視野とやりたいことがブワッと広がったRubyKaigi 2024

はじめに

おはこんばんにちは!...いや今回は、はいさ〜い🌺🌺🌺

沖縄の楽しかった思い出をお土産を食べるたびに思い出しているしおりんです🌺 RubyKaigi 2024に参加するために沖縄に行ってきました!カンファレンスはブログを書くまでがカンファレンス!ということで、参加した感想ブログです。

今年は去年以上に自分にとって最高のRubyKaigiとなったので、少しずつ書き進めていったところだいぶかかってしまいました😇 (過去最長6000文字超え)

RubyKaigi 2024とは?

rubykaigi.org

RubyKaigiとは、プログラミング言語Rubyに関する国際会議です。 今年は2024/05/15-05/17の3日間、沖縄県那覇市で開催されました!

参加人数としては、1000人以上! 日本のみならず海外のRubyistも一堂に沖縄に集まってRubyのことを話すお祭りのような3日間でした!

ちなみに私のRubyKaigiの参加歴としては去年のRubyKaigi 2023が初参加、今年は2回目の参加でした。
(去年の参加レポは会社のテックブログにて↓)

tech.pepabo.com

RubyKaigiに参加する前にやったこと

去年参加してすごく楽しかった記憶が痛烈に残っている一方で、初参加の緊張で、自分からコミュニケーションを取れるまでに少し時間がかかってしまった点や、やはり内容が難しく全然理解できなかったという反省も強く残っていました。

なので、今年参加するにあたって「去年よりもっと楽しめるようにする!」というテーマを自分の中で掲げ、それを達成するためにRubyKaigiの開催前から色々自分の中で動いてみました。

1. カンファレンスネイル

まずはカンファレンスネイル!これは、去年に引き続き今年もやってみたものになります。

Xのいいね数から実際の会場も含め、去年より多く反響をいただけたのがとても嬉しかったです! 去年は初参加ということもあって、自分から言い出すというよりかはネイルが目に入った方からお声がけいただいた流れで「RubyKaigiをイメージしたんです〜」という形で会話が進むことが多かったです。

けれど今年はXのいいね数やリポスト数も多くいただけたこともあったので、自己紹介の時に「RubyKaigiのイメージネイルをしている者です〜」と自分から発信してみたところ、そこから会話を広げることができたり「あ!Xでみました!」と言っていただける場面が多くあって嬉しかったです!

カンファレンスネイルをすることの効果として、初めての方と話す際のきっかけになるのはもちろん、去年もやっていましたよね?と覚えていてくれた方もいて、2回目の効果も実感することができました。

そして今年もRubyKaigi 2024のデザイナーさんに直接ご挨拶しネイルを見ていただくことができました。 カンファレンスネイルができるのも、最高のデザインを考えているデザイナーさんがいてのことなので「今年も最高のデザインをありがとうございます!」と感謝を伝えることができたのはとても嬉しかったです。

カンファレンスネイルの楽しさにもうすっかり取り憑かれてしまったので、今後もRubyKaigiはもちろん他のカンファレンスでもやっていく予定です💪

ということで次回はKaigi on Railsでカンファレンスネイルをやります💕

2. 事前イベントへの参加

今回私は、Smart Bankさん・Wantedlyさんが主催する事前イベントに参加しました。

smartbank.connpass.com

事前イベントは今年初めて参加したのですが、スピーカーの方々から始まる前に内容について聞けることで、当日実際のセッションの聞く際に0からではなく概要を少し把握した状態で臨めるため、「わかる...わかるぞ...!!あの時話していたことは、こういうことだったのか!!」と自分の中に話を落とし込みやすく、面白さを実感することができました。

また懇親会で、去年会った方にご挨拶ができたりまたここで初めまして!をした方に当日沖縄で「事前イベントぶりですね!こんにちは!」と挨拶することができたのも良かったですね〜

事前イベントの力恐るべし...来年も開催されたら絶対行きたい💪

3. 社内で開催された事前勉強会への参加

今回、RubyKaigi前の準備として社内でセッションを1つ選択して、それについて調べて発表する勉強会が開催されました。

事前に調べた感想は、行く直前にブログに書きました。なので、ここでは実際に参加した後の感想を書きます。 shiorin223.hatenablog.com

楽しみにしていたセッションがいざ始まった瞬間、私は金子さんの話のスピードに圧倒されました。 少しでも聞き逃さず後から振り返れるようにと、メモを取ることに集中して聞いていたのですが、事前に勉強会のために調べていた単語が多くあり、メモをしながら「多分この辺りの話をしているのかな?」と分かった瞬間が多くあったのがとても嬉しかったです。

それだけでなく、Parser関連のセッションはもちろんのことそれ以外のセッションやLTでもParserや関連した単語が出てくる場面が多かった、またそれが自分の中で分かったのもすごく嬉しくParserを予習の題材に選んで本当に良かったなと思いました。

RubyKaigiに参加してみて

セッションの感想

Writing Weird Code

drive.google.com

これは言わずもがな、終始驚きの連続でした。TRICKはすごい好きなコンテンツなのですが、どうしてそう動くのか全くわからなかったのでその辺りの話が聞くことができ、Rubyやプログラミングのまた違った一面と出会うことができたのがとても面白かったです。

また作品に圧倒されたのはもちろんなのですが、要所要所でRubyKaigiのセッションと絡める形で説明があったのもとても印象的ですし、こういうところでも繋がっているんだ!と驚きました。

これを機に、Quineの世界に飛び込んでみたい!またそれ以降のセッションに対してさらに楽しみになることができたKeynoteでした!

The grand strategy of Ruby

speakerdeck.com

Parserを事前に勉強していたので、1番楽しみなセッションでした! スピードは結構早かったですが、ParserやParser Generatorとは何かという基礎的な部分から、Rubyの中で動いているParserがどうして悪魔城と呼ばれているのかという部分まで丁寧に紹介があった点が、とても勉強になりました。

そしてそんな悪魔城を切り崩すためのロードマップの紹介がまずあったのですが見た瞬間、なかなか果てしない道のりだな...と思わず感じてしまいました。

けれどそこから金子さんを筆頭に様々な人が協力し少しずつ倒していっているという話を聞き、その姿がまるで勇者のパーティーみたいに思え、勢いの凄さやこれから先さらに広がっていく可能性に非常にワクワクしました。

普段何気なく様々なライブラリなどを使ってRubyを動かしているけれど、その1つ1つにParserが関わっていることにとても感銘を受けました。 また、そのあたりの知見をさらに広げるためにコンピュータサイエンスのことを学んだり実際に動いているコードをもっともっと知りたい!と思えたセッションでした。

またさらに、1日目のオフィシャルパーティーで金子さんに直接ご挨拶し感想を伝えることができたのもすごく嬉しかったです!その後、成瀬さんからセッションを聞いて難しかった部分や知見を深めるためにどこからキャッチアップすればいいかなどの話も伺うことができ、私の中の知的好奇心がブワッと広がった楽しい時間を過ごすことができました! ありがとうございました!

Make Your Own Regex Engine!

speakerdeck.com

こちらは正規表現エンジンをRubyで作る方法を紹介するセッションでした。 正規表現エンジン、Rubyで作れるんだ....と思ったのが初めの驚きでした。

正規表現を使う時の記号やルールなど、覚えるまで難しいけれどシステム側がどうなっているのかは知らなかったので、作る手順をなぞりながら仕組みを聞くことができた点が身に入りやすく勉強になりました。

中でもパターンをマッチさせたいけれど、1単語分をマッチさせるだけでも、最初から最後まで読み取ることや1文字1文字をちゃんと読み取り判定するようにするために考えなくてはいけないことがたくさんあるんだということを知り感銘を受けました。

makenowjust.github.io

実際にドキュメントが公開されているので、手を動かし私も正規表現エンジン作りにチャレンジしたいと思います 💪

セッション以外の感想

Event

去年、DrinkUpに参加して本当に楽しかった記憶があったので今年も申し込みが始まった瞬間にバシバシ申込を行って、たくさんのEventに参加させていただきました! どれも本当に楽しく充実した時間を過ごせました。開催していただけたスポンサーの方々に感謝の気持ちでいっぱいです。改めてありがとうございました!

RubyKaigi 2024 参加Event

今回は色々なeventに参加する中で、「去年以来ですね〜!」と挨拶できたのが2回目を感じて嬉しかったです。 また中でも去年より海外圏のRubyistの方々と多く交流できた点が、私の中で今回とても良い経験になりました。英語は学校で勉強して以来だったので、辿々しさとか間違っている部分はたくさんあったかもしれなかったけれど、勇気を出して、頭の中にある単語とか文法を引っ張り出して少し会話ができたのが楽しかったです。

また、コードとかRubyKaigi関連の会話だと、指し示す単語は共通するのでコミュニケーションが少し取りやすく、プログラミング言語は世界共通で動いているんだなと改めて実感することができました。

ただ一方でせっかくできたrubyfrinedsだったのにコミュニケーションがうまく取れなかった自分にとても悔しさを感じたので、Duolingoをインストールし英会話の勉強を始めました。 来年のRubyKaigiではもっと積極的にコミュニケーション取れるように身につけるぞ🔥

Kaigi on Railsの運営のこと

Kaigi on Rails 2024からオーガナイザーの一員になりました!

今少しずつ準備を進めているのですが、RubyKaigiに参加したときに準備している内容とリンクする場面を多く感じることができた点も印象的でした!

スポンサーブースや懇親会などに参加しながら、運営するとしたらどう動くだろう?とか話をしている時も「あっ、このあたりが参加者とすると少しマイナスに感じるんだ」など、運営目線で考えるという形で視野を広げることができたのが、とてもいい経験となりました。

そうして色々見て学ぶことができたので、俄然Kaigi on Railsも盛り上げるぞ!!とやる気がみなぎりました 💪 10月25日・26日、有明で会いましょう!!!!!

kaigionrails.org

おわりに

前回より楽しむぞ!と行き込んで臨んだ結果、去年の数十倍も楽しいRubyKaigiが過ごすことができました!

kaigi effectが自分の中でたくさん生まれたのはもちろん、去年よりもこれを気持ちだけでなくちゃんと行動に移したい!と思い、早速動き出始めています 💪

  • 英語でコミュニケーションがもっと取れるようになりたい

    • ->Duolingoを始めた!現在継続18日目!
    • 目標:自分の話したいことを英語で変換できる力をつける!
  • ParserからRubyが動いている仕組みをもっと知りたい

    • ->「Rubyのしくみ」を引き続き読む
  • コンピュータサイエンスの基礎を勉強する
    • ->techhouseさんがRubyKaigiの時に紹介していた勉強会に参加できるという案内が来たので、早速申し込んでみた!

RubyKaigiは、仲間がいることを実感できるだけでなく参加するたびに自分の視野をぐわっと広げることができるので、とても大好きなイベントです。今年も本当にありがとうございました!

来年のRubyKaigi 2025 in 松山もとっても楽しみ! 来年も今年以上に楽しめるように今から動くぞ〜〜 💪💪💪

RubyKaigi 2024の前に勉強したら、楽しみな気持ちが数十倍に増えた

おはこんばんにちは!いよいよ沖縄!RubyKaigiですね〜〜〜🌺 沖縄では3回は海ぶどうを食べようと決めているしおりんです。

RubyKaigiに参加するのは2回目となります!前回よりもRubyKaigiを楽しめるようになりたい!と思い、今回事前にParserについて勉強してみました。

結果、視野が広がりRubyKaigiのセッションに対しての楽しみをすごく高めることができたので、今回はその気持ちを忘れないように書き残します。 (RubyKaigiが始まるまでに出したいという気持ちだけで書いているのでだいぶ乱文です... 🙏)

勉強しようと思ったきっかけ

調べてみようと思ったきっかけは社内でRubyKaigi前に事前学習会が開かれたことでした。内容としては、気になるセッションを1つ選んでそれについて深掘りするというもので、私は単語としてはよく聞くことが多いけれどちゃんとわかってないなと思っていたParser、そして金子さん(@spikeolaf)のセッションをピックアップし調べることにしました。

rubykaigi.org

実際に調べてまとめたものに関しては、載せようと思ったのですがまだ公開用にまとめきれていないので後ほど載せます🙇‍♀️

実際に勉強してみた結果

実際に勉強することに手を出してみた結果、難しさは多く感じましたがそれよりも自分にとってよかった点がたくさん出ました!

  • 去年のスライドや今年の紹介文において指している単語がわかるようになった
  • 他の関連あるセッションの解像度が上がった
  • 難しかったけれど、具体的にどこが難しいと思ったか、どういうところがもっと知りたいと思ったかがわかった。  - 今回調べた中だと、CRubyの動きをもっと知りたいと思ったからC言語とか触れてみるといいんだろうか?という学びの芽生えが生まれた

ただ一方で調べて社内学習会のためにまとめつつも、自分の中で半分くらいの理解までしか落とし込めなかったな〜と軽い反省があったのでそのことを同じ会に参加していた同僚の方に相談したところ、Rubyのしくみって本いいよ!!と教えてもらい、それが社内の本棚にあったのですぐ借りて読んでみました。

すると落とし込めなかった一人で調べられなかったわからない部分(そもそもどうして解析が必要なのか、どういう仕組みで普段触っているrubyのコードにつながるのかなど)に対する内容が丁寧にわかりやすく解説されて「なるほど!これってそういうことだったんだ!!」と理解できる部分が増えました!!

事前学習会を社内で開催してもらえたことで、今後につながる学びとRubyKaigiへの楽しみさを高めることができました!

さあ沖縄楽しむぞ〜〜!今年もRubyKaigi 2024イメージネイルをしてます!見たい方などぜひお気軽に話しかけてください〜!

2023年を振り返って

おはこんばんにちは!今年も大晦日孤独のグルメを見て、焼肉が食べたくなりました。しおりんです🍖 近所の場所も紹介されてたので、2024年に行ってみようかな〜

さて、2023年最終日ということで振り返って思ったことを残そうと思います。

読書めっちゃ楽しい!📕📕

今年、特に11月ぐらいから読書の楽しさに目覚めました。

しおりん(*゚-゚)の本棚 (しおりん(*゚-゚)) - ブクログ

きっかけは、この本に出会ったことからでした。

リーダーシップに出会う瞬間 成人発達理論による自己成長のプロセス https://amzn.asia/d/j3YAaeW

小説や漫画以外の本には抵抗感がこれまであったのですが、この本を読み出したことをきっかけに知らない考え方に出会う楽しさ、そこから自分の考え方の視野が広がっていくことにとてもワクワクして一気に色々な本を読みまくっています!

また久々に本屋さんに足を運んで、気になる本を探すことにも楽しくなってきたので、来年もますます本が大好きになりそうです🥰

目標を高く持って早く達成しなくてはと焦って空回りした

今年のはじめに出したやっていきの記事の中で、「 極限まで頑張りすぎない」ということを示したのに、しっかり頑張りすぎました🫠 2023年のやっていき。 - shiorinのアウトプット

どうしてそうなったのかを思い返してみると、期待されているであろうことを満たせていないこと、まわりの実力と自分の実力を比べて全然足りていない感じ、少しでも早く実力をつけないといけないと焦って、でも全然出来なくて空回りしてそんな自分を責める…という自分いじめループに陥ってしまい、しんどくなってしまう場面が数回ありました。

その度に、休んだ方がいいよと少し休みを取らせていただけるチームの方々をはじめとした職場には本当に今年も感謝の気持ちでいっぱいです🙏 ありがとうございました!

休んだ時にも本を読んで、目的や意味もなく誰かと比べて自分を責めすぎても、何も生まない。しなきゃいけないと思いすぎる必要はない。ということに気がつくことが出来ました。

また今回立ち止まったときに、自分がしんどいと感じる時はどうなっているか、辛い時どうやって自分を癒すと楽しくなれるか、というのをメモして客観視して残してみました。

書いた後にそれを見ると「これだけ備えが出来てるから、またなったとしてもまぁきっと私は大丈夫っしょ!」と自分を信じることが出来ました!

自分を信じてみるって、ちゃんとやった事なかったけどなかなかいいものですね☺️ 自分、ちゃんとやってんじゃん!いいやつじゃん!って思えてワクワクしました。

おわりに

ということで、簡単ですが2023年を振り返ってみました! 2024年やっていきも、年始に書く予定です!

2023年もありがとうございました!!2024年もよろしくお願いします🎉🎉🎉

そうめん茹でたら引火した事件を起こしたので再発防止のためにポストモーテムを書いてみる

おはこんばんにちは!1年間の自分に対して最大限の感謝を伝えるために今日人生で初めてうなぎ屋さんに入ってうな重を食べましたしおりんです!高かったけど、とーっても美味しかったぁ〜〜!1年間ありがとう私!来年も行こうね ✌️

今回は、GMOペパボ EC Advent Calendar 2023の17日目の記事です。前回はtakapiさんの個人開発Webアプリケーションを0円で運用するでした!私自身、勉強のために自分でWebアプリケーションを作りたい!と思った際、まず立ちはだかった不安がお金の面だったので、0円で運用できる方法はとても魅力的で参考になる内容でした👀 0円なので気軽に試せそう!私もやってみよう 💪

adventar.org

はじめに

さて、私が所属しているGMOペパボではサービスでインシデントが発生した際、収束後に振り返りと再発防止を目的としたポストモーテムを作成しています。

ここ数年で、私自身インシデント対応に携わる機会が増えました。

それに伴いポストモーテムを書く機会も増えてきたのですが、まだ慣れておらず抵抗感が若干あり....

ということで、ポストモーテムに対しての抵抗感を減らす、そしてペパボのポストモーテムの良さを紹介したい!! という目的のもと、今回は普段利用しているフォーマットを用いて、最近私生活で起きたインシデントを振り返り、再発を防止するためのポストモーテムを作ってみようと思います!

なお、今回の記事では詳細は割愛しますが、インシデントが発生した際のフローについては、セキュリティ対策室のhiroyaさんが作成したこちらのスライドがわかりやすいので合わせて掲載します! 起こってしまったインシデントに対し、心理的ハードルを少しでも下げ、職種に関わらず全員で取り組むことができるようにするため、現状整理から解決に向けての動き方、そして再発防止の取り組みまで、一連の流れが分かりやすく仕組みとして構築されているのが本当に素晴らしいのです!!

私自身も初めてインシデント対応に参加して不安いっぱいだった時、この仕組みにとても助けられました😭🙏 この場を借りて、感謝を...!いつもありがとうございます!!! speakerdeck.com


概要

  • 作成日: 2023-12-19
  • サマリ(発生状況): 鍋にそうめんを入れた時に溢れた麺に鍋肌にあふれた火が引火した
  • インパクト(影響範囲): そうめんが焦げた
  • 根本原因: そうめんの量に対して鍋が小さすぎた。そうめんを入れた後に火のそばから離れてしまった
  • 発生原因: 鍋肌に火が溢れるくらい強火にしすぎた。
  • 復旧日時: 2023年11月6日 13:30
  • 対応: 鍋のお湯を使って消火。焦げた部分と焦げていない部分を分離
  • 検出: 台所に戻ったら鍋から火が上がっていた
  • アクションアイテム(再発防止策):
    • 火をかけた時に、鍋から離れない
    • 麺を茹でるときは一段階大きな鍋を使う
    • 鍋肌に溢れるまで火力を上げない

教訓

うまくいったこと

  • 引火してすぐ気がついたので、鍋の中のお湯で鎮火できた
  • 焦げていない部分があったことで、全て処分せず一部は食べることができた

うまくいかなかったこと

  • 本来食べる予定だったそうめんの量が減ってしまった

幸運だったこと

  • 引火してすぐ気がついたので、鍋の中のお湯で鎮火できた

タイムライン

障害発生・障害検知〜対応開始

13:10 お湯を火力最大で沸かし始める

13:15 沸騰したことを確認したので、そうめんを投入

13:16 調理している中で出たゴミをリビングへ捨てにいく

13:18 そうめんに火が引火していることに気がつく

対応開始〜原因特定

13:19 引火した部分をお湯に入れて鎮火

原因特定〜障害の緩和・解消

13:21 麺の半分は焦げずに残っていることを確認

13:22 焦げた部分の除去作業開始

13:35 焦げた部分の除去作業完了

13:40 大きめの鍋に水を入れてお湯を沸かす

13:42 沸騰したお湯にそうめんを入れて茹でる

13:45 そうめん完成


おわりに

以上、そうめん引火インシデントでした。

時間を惜しんだ結果、横着しすぎたのが最大の反省です 😇 なんでもMAXまで強火にすればいいってもんじゃないんですね...

また日常のこんな些細な事件であっても書きやすいこのポストモーテム雛形はすごい!

これで自信がついたので、ポストモーテムを書けるようになった💪 (まあもちろん、ポストモーテムを書く事象が起こらないのが一番なのですがね😇)

寒さを吹き飛ばせ!GASとChatGPTで目指す自動投稿への挑戦🚀

おはこんばんにちは!気温が寒くなってきたことで、大好きな編み物が捗るようになって嬉しいしおりんです 🧶今は小さいバッグを製作中です💪

今回は🎅GMOペパボエンジニア Advent Calendar 2023の7日目の記事です。 昨日はエンジニアが5ヶ月で5つの部署を回ってみた|yumuでした 🎉 ペパボのエンジニア新卒研修がどういうことをしているのか気になる方はぜひ読んでみてください 😊

adventar.org

はじめに

最近MuuMuu Sitesというサービスを使ってブログのまとめサイトを作成し、その中で日記ページを開設しました 🎉

shiorin-holon.fun

日記を書いたとき見てくれる人がいると嬉しいので、公開したらXにもタイトルと日記ページのリンクを貼って投稿しています。 ...が、これを毎回手動でやるのはちょっとめんどくさい🫠

なのでこの投稿作業が自動で行われるようにGoogle Apps Script(以下GAS)で実現できないか、ChatGPTとおしゃべりしながら進めてみました 💪

完成したのでそれを紹介します!!....という記事にしたかったのですが、結論から言うと完成まで至らずまだ道半ばの状態なので、今回は試行錯誤した様子を紹介します😭

MuuMuu Sitesとは?

MuuMuu Sitesとは、ムームードメイン独自ドメインを取得しNotionのページと組み合わせることで、簡単にWebサイトとして公開できるサービスです!

muumuu-domain.com

Notionのテンプレートが充実しているため、Notionに作りたい内容を追加するだけで簡単にWebサイトを公開できるのがとても良いです。

またGMOペパボでは、入社するとムームードメインで1人1つ好きな独自ドメインを取得できるという福利厚生があります! recruit.pepabo.com

MuuMuu Sites楽しそう!福利厚生でもらえる独自ドメインもまだGetしてなかったしアプトプット力向上のために日記サイトを作りたいと思っていただよなぁ 🤔 よし!やるぞ!と思い、サービスに登録して作ってみました 💪

自動投稿をどうやって実現させるか

新しい記事を公開した際、自動的にツイートするようにするためには「新しい記事が追加されたこと」を検知する必要となります。

今回私は以下の流れで、検知からXへの投稿までの流れを実現しようと考えました。

日記ページを追加しWebページに反映する
↓
ページが追加されたタイミングで、スプレットシートに記録する
↓
スプレットシートの更新内容を見て追加があったことを検知したら、その内容をXに投稿する

この流れを実現するためにどういうことを試したかについて、次の章から説明します。

1. MuuMuu Sitesを更新するときのメールをフックとしてツイートする

まず考えていたのはMuuMuu Sitesから更新が完了した際に届くメールを検知する材料にできないかということです。

Notionでの編集が完了しWebページへ公開するためには、以下の手順を踏む必要があります。

  1. Notionのページの編集が完了したら、MuuMuu Sitesの管理ページに行き「更新する」ボタンを押す
  2. MuuMuu Sites側で追加したNotionの内容をWebページに反映するための更新処理を行う
  3. 更新が完了するとその通知がメールで届く

なので、メールの内容を取ってくるためのGASをまず相談しました。

すると、以下のスクリプトを返してくれました

function extractAndWriteToSheet() {
  // スプレッドシートのID
  var spreadsheetId = 'Your_Spreadsheet_ID';

  // スプレッドシート内のシート名
  var sheetName = 'Sheet1';

  // 検索する件名
  var subjectToSearch = 'Your_Target_Subject';

  // Gmailの検索クエリ
  var searchQuery = 'subject:' + subjectToSearch;

  // スプレッドシートを開く
  var sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheetName);

  // Gmailのメッセージを検索
  var threads = GmailApp.search(searchQuery);

  // スプレッドシートをクリア
  sheet.clear();

  // ヘッダー行を追加
  sheet.appendRow(['Subject', 'Body', 'Received Time']);

  // 各スレッドのメッセージを処理
  for (var i = 0; i < threads.length; i++) {
    var messages = threads[i].getMessages();
    for (var j = 0; j < messages.length; j++) {
      // メッセージの件名、本文、受信時間を取得
      var subject = messages[j].getSubject();
      var body = messages[j].getPlainBody();
      var receivedTime = messages[j].getDate();

      // スプレッドシートに書き込む
      sheet.appendRow([subject, body, receivedTime]);
    }
  }
}

// 新しいメールが届いたときに実行するトリガーを設定
function setTrigger() {
  // スクリプトを毎分実行するトリガーを設定
  ScriptApp.newTrigger('extractAndWriteToSheet')
    .timeBased()
    .everyMinutes(1)
    .create();
}

このスクリプトを実行してみた結果が以下です。

想定した通りに取れている🙌 ... となったのですが、具体的にその時更新したページの情報まではメールの中身には載っていませんでした。 Xへポストする時に日記のタイトルとリンクを含めたいという目的が、メールを使う形だと実現できないと判断し、この方法は断念しました。

2. 日記ページのタイトルとリンクをチェックして、新しいものが追加されたことを検知したらツイートする

更新完了メールではダメそうということがわかったので、次はWebページに公開された時の変化を検知する材料として使えないか試してみることにしました。

MuuMuu Sitesで作られた日記ページを開発者ツールでみてみると、muu-database-card__titlemuu-database-card__linkにそれぞれ日記のタイトルとリンクが入っていることがわかりました。

なので、ここをスコープにすることで新しいものが追加されたことを検知できるのでは?と思い、早速ChatGPTに相談してみました。

function scrapeWebsiteAndRecord() {
  // スプレッドシートのIDとシート名を指定
  var spreadsheetId = 'YOUR_SPREADSHEET_ID'; // ここにスプレッドシートのIDを入力
  var sheetName = 'Sheet1'; // ここにシートの名前を入力

  // ウェブサイトのURLとクラスを指定
  var url = 'https://shiorin-holon.fun/acbb35e7-2c92-48a6-929d-b2bdeb55d879/';
  var titleClassName = 'muu-database-card__title';
  var linkClassName = 'muu-database-card__link';

  // スプレッドシートを取得
  var spreadsheet = SpreadsheetApp.openById(spreadsheetId);
  var sheet = spreadsheet.getSheetByName(sheetName);

  // タイトルとリンクを取得
  var data = scrapeData(url, titleClassName, linkClassName);

  // 新しいデータがあればスプレッドシートに書き込む
  data.forEach(function (item) {
    if (!sheet.getRange('A:A').getValues().flat().includes(item.title)) {
      sheet.appendRow([new Date(), item.title, item.link]);
    }
  });
}

function scrapeData(url, titleClassName, linkClassName) {
  var response = UrlFetchApp.fetch(url);
  var html = response.getContentText();

  // HTML解析
  var doc = XmlService.parse(html);
  var root = doc.getRootElement();

  // タイトルとリンクを取得
  var titleElements = findElementsByClass(root, titleClassName);
  var linkElements = findElementsByClass(root, linkClassName);

  // 取得した要素のテキストとリンクを配列にして返す
  var data = [];
  for (var i = 0; i < titleElements.length; i++) {
    var title = titleElements[i].getText();
    var link = (linkElements[i] && linkElements[i].getAttribute('href')) ? linkElements[i].getAttribute('href').getValue() : '';
    data.push({ title: title, link: link });
  }
  return data;
}

// 特定のクラスを持つ要素を検索する関数
function findElementsByClass(element, className) {
  var elements = [];
  var descendants = element.getDescendants();
  for (var i = 0; i < descendants.length; i++) {
    var currentElement = descendants[i];
    if (
      currentElement.getType() === XmlService.ContentTypes.ELEMENT &&
      currentElement.getAttribute('class') &&
      currentElement.getAttribute('class').getValue() === className
    ) {
      elements.push(currentElement);
    }
  }
  return elements;
}

URLの形にするためには調整が必要だけれど、ひとまず日記ページごとに取得してスプレットシートに書き込むことができた!

よし!いよいよXへポストする処理を追加するぞ!とChatGPTに相談したのですが....APIに接続するためのトークンの設定まわりで手こずってしまい、うまくいきませんでした....

この辺りはXのAPIドキュメントを読み込んで仕様を読み解く必要がありそうなことが判明したので、引き続きみていこうと思います。

おわりに

ChatGPTと相談しながらコードを書くという楽しさと意図したものが返ってくるように伝える少しの大変さを実感することができたのは、とてもよかったです!

目的が達成できるようにChatGPTやGASの勉強を続けて、引き続き取り組んでいきます 💪

そして次の🎅GMOペパボエンジニア Advent Calendar 2023 - Adventarは、inowayさんです!お楽しみに 😊

やってみたいことが増えたKaigi on Rails2023

2023年10月27日-28日に開催されたKaigi on Railsに参加してきました!

kaigionrails.org

カンファレンスは、ブログを書くまでがカンファレンス!!!ということで、参加した熱が冷めないうちに参加レポを書きます 💪

感想まとめ

  • 月曜日からの業務に活かしたいと思えるセッションが多くて、とても良かった
  • Smart Bankに所属している登壇者さん、どの方もスライド見やすく話も上手で、すごかった
  • 知っている方が増えてきたので、Drink Upやアフターパーティで「こんにちは!」できる回数が増えて嬉しかった

2日間で、たくさんのセッションを見れた

2日間、たくさんのセッションを見ることができました!オフラインで開催されたこともあり、トラックが2つあったのですが、もーーーーほぼ毎時間「どっちにいくか...」とギリギリまで迷ってました😇

なので、聞けなかったセッションに関しては、アーカイブを見る予定です 💪

セッション全体の感想としては、前回オンラインの時に参加した時も感じたのですが、やはりKaigi on Railsは業務に繋げやすい内容が多くて、業務や自分の勉強として、やってみようかな!と思える話がたくさんありました。

特に、パフォーマンス改善やrailsのアップデート業、またペアプロに関して、セッションを聞いてこれまで感じていた抵抗感から楽しそう!という気持ちが芽生えたので、業務でチャンスを見つけたら、チャレンジしてみたい💪💪💪

他にもセッションを聞いて、「これ手を動かしてみたいな」と思ったことをちゃんとできるよう、今回は自分の中でリスト化したので、早速自分の手で動かしてみて、より理解を深められるように取り組んでいきたいと思います。

それと、Smart Bankに所属されている方が多く登壇されていること、また皆さんすごくスライドのまとめかたや話し方がわかりやすかったのも、結構印象的でした。

プロポーザル出すところから会を開いてみんなで考えているという噂も聞き、どうやっているのだろうとすごく気になっているので、どこかでぜひ聞きたい!

(これを懇親会で聞きそびれたのが、唯一やり残したこと...クヤシイ😭)

なお、特に良かったセッションに関しての感想を初め、ここで書いていたのですが感想が溢れ出てとても長くなったので、記事を分けて投稿しようと思います!

今回もおしゃべりが楽しかった

今回もいろいろな方とお話しして知り合いを増やすことができたのが本当に楽しく、オフラインで参加する醍醐味を今回もたくさん感じることができました。

また、Ruby関連のカンファレンスに参加する回数が増えたことで、「あ!RubyKaigiの時にお会いしましたよね〜」という会話から入れる人が増えて嬉しい気持ちもたくさん実感することができました😊

また、ランチや二次会も楽しむことができました!

実はこれまで、1日あるイベントに参加する際、これまでは結構ランチどうしよう...一人かな...という不安を感じがちでした。

ただ今回は、不安を感じていた自分をすっかり忘れちゃうくらい、気軽に参加でき、これは知り合った方を増やすことができた成果だなと思います。

ご一緒できた方、ありがとうございました🎉

なお、2日目に関しては、ランチと二次会とたくさんMNTSQさんにご馳走になりました!本当にありがとうございました!

Kaigi on Railsありがとうございました!そして、次は...

改めて、Kaigi on Railsでお話しできた方はもちろん、登壇者の方や運営の皆様など、関わったすべての方に感謝の気持ちでいっぱいです!

来年は参加はもちろんのこと、登壇か運営スタッフなど一歩踏み出した形で参加したいという気持ちも芽生えました。

本当に楽しく、また学びいっぱいの2日間を過ごすことができました!ありがとうございました〜〜!

さあ!次は、松江に行くぞ〜〜💪💪💪

RubyKaigi 2023へ行ってきました!

おはこんばんにちは!最近、醤油と赤ワインブームが到来しているしおりんです。

少し日は経ってしまいましたが、先日5/11~5/13に開催されたRubyKaigi2023 へ参加してきました!

今年は長野県松本市で開催され、実際に現地に行って参加したので、その感想について今回は書きます。

rubykaigi.org

今回のテーマ

1. 積極的に色々な人と「初めまして、こんにちは!」と繋がりを作る 💪 RubyWorldConference 2023, PHPerKaigi 2023とオフラインで参加して、他社のエンジニアと交流し繋がる楽しさを実感しつつあったので、RubyKaigi 2023ではその繋がりをたくさん作ることを意識しました。

2. Rubyの中でわからないことをわかるようにする

これはセッションを聞く上で目標としました。 RubyKaigi はセッションの中身が難しい印象が去年オンラインで参加した際に感じ、わからないことへの不安が大きくなってしまいました。

なので今年は現地で参加するけれど、全て一発で理解することに頑張りすぎるのではなく、わからないことを洗い出すことを自分の中の目標として定めました。

事前に準備していてよかったこと

1. 積極的に色々な人と「初めまして、こんにちは!」と繋がりを作る 💪

繋がりを作りやすくするために、自分のTwitterのプロフィールをぱっと出せるツールを使いました。

  • SUZURIで自分のTwitterアイコンとプロフィールページに飛べるQRコードのアクリルキーホルダーを作成

suzuri.jp

QRコードは当日会社のブースで印刷してもらえたり、NFCタグについては当日たまたまいただけて用意することができました。

カンファレンスイメージのネイルをした💅

これは、ことみんさんがPHPerKaigi2023の時、カンファレンスイメージのネイルをしていたのがやろうと思ったきっかけです。

RubyKaigi 2023のページをネイリストさんに見せて「これでお願いします!!」とお願いして、やってもらいました!

2. Rubyの中でわからないことをわかるようにする

事前にRubyKaigiのスケジュールを見て概要を把握する、会社のランチ会に参加しました。 タイトルや概要を翻訳するだけではわからない、発表する人がどういう人かや去年と比べてどういうトレンドかなど、RubyやRubyaKaigiに詳しい人から、見方などを教えてもらえました。

この会に参加したことで、RubyKaigiの中で見たいセッションを定めやすくなったり、当日の予定を柔軟に決めることができました!

3日間実際に参加してどうだったか

1. 積極的に色々な人と「初めまして、こんにちは!」と繋がりを作る 💪 → 達成 🎉🎉

この2つがあったことで、今回たくさんの方とTwitterを交換することができ、後から見たところ、70人もフォロワーが増えていました🙌 ありがとうございました!

Twitterのフォロワーが70人近く増えた!

また、せっかくTwitterでの繋がりをたくさん作れたので、3日目はランチを募集してみました!

結構緊張しながら、深夜に勢いで投稿し次の日の朝にRTしようかと思っていたのですが、思ったより早く反応をいただけて集まれたのが嬉しかったです!

楽しかった〜〜本当にありがとうございました!


ネイルについては、初めはRubyKaigi 2023のデザインが可愛かったので、気分を上げようと思ってやってみたのですが、実際にランチや懇親会の時に話すきっかけにつながったのがとてもよかったです。

また、matzやRubyKaigi 2023のデザインを手がけたattsumiさんに実際にネイルを見てもらい、感謝を伝えることができたのも嬉しかったです😊

2. Rubyの中でわからないことをわかるようにする→達成 🎉🎉 わからないことをたくさん洗い出すことができました!!

また実際にデモンストレーションがあったセッションも多かったので、実際に手を動かしたり、紹介されていたRubyのコードを見に行こうとなりました💪

セッションの感想は、会社のテックブログに書いたのでそちらを是非見てください〜 (公開されたら、追記します)

ちょっとした反省

色々な人と話せること、そして松本の美味しいご飯とお酒にはしゃぎすぎ、しっかり胃を壊しました... 松本観光できなかったのが悔しすぎるので、今年松本へリベンジ旅行に行くことを決めました 💪

さあ、次回は沖縄だ!!!

今回、RubyKaigi に初めて参加し色々な人と話したりセッションを聞いたことで、コミュニティに積極的に関わっていきたいという自分のエンジニアとしての方向性を見つけることができました!

なので、来年のRubyKaigi 2024 in Okinawa までに、今よりもコミュニティやRubyに関われるような実績を作ることが目標です 💪

では沖縄でまた会いましょう〜!!