この記事はRails Girls Japan Advent Calendar 2022の1日目の記事です。
自己紹介
だいたい仙台でソフトウェアエンジニアをしている あのぶる と申します。
Rails Girls関連の活動だとSendai 1stと2ndのオーガナイザー、Sendai, More!の運営をしていたりします。
……と、ここまでは去年までと一緒なんですが、今年から新しいロールが追加されました。3月の末頃*1からRails Girls Japanのメンバーとして活動をしています。
実は元々「いずれは何かもうちょっと踏み込んだ貢献が出来たらいいな」くらいの温度感では考えていたのですが、それが今だとは全く想定しておらず…… お声がけいただいたときにビックリしすぎて意味不明なリアクションをし、cobachieさんを盛大に困惑させてしまった記憶だけが鮮明に残っています。その節は本当にすみませんでした。
前述のとおりで意欲自体はあったので、遅いか早いかの違いかなと思い*2、その場で承諾した次第です。
Rails Girlsに関わる人達が楽しく活動できるように、出来ることをやっていきたいと思っています。よろしくお願いします。
……という話の流れは今回の記事にはあまり関係なく、今週末はRails Girls Gathering Japan 2022!ということで今年の連動企画である、Rails Girls国内開催10周年を記念したツイート募集企画の技術的な話をしていきたいと思います。
大長編になりそうな予感がするので、とりあえず設計の話から…
お祝いツイートのまとめページを作りたい!
せっかくツイートを募集するならそれをまとめて見られるページがあるといいよね、ということで調査をしてみました。 当初はこういう感じ↑の埋め込みタイムラインでシュッとできたらいいなという気持ちだったのですが、残念ながら現在のTwitterの仕様ではハッシュタグ検索には対応していない模様。
となるとやることは2つ。
- 何らかの方法で定期的にハッシュタグの付いたツイートを収集し
- 何らかの形でWebサイトに掲載する
やり方はたくさんあると思いますが、今回どう実現するのが良さそうか、考えてみました。
1. ハッシュタグの付いたツイートを収集する
ツイート収集するならTwitter APIを使うのが正攻法ですよね、というところでここはスッと決まりました。
手作業でクエリを組み立てるのはちょっと大変なので、デベロッパー登録した後にTwitter API Playgroundで色々試してみるとよいです。
意外とツイートURLのリストを直接取得できるような方法が(たぶん)なかったのですが、検索APIでURL組み立てに必要な情報は揃いそう、ということで安堵しました。
Twitter APIで情報が集められることを確認した後、収集バッチの要件としてはこんな感じで考えていました。
この辺の要件はメジャーなクラウドサービスなら大体実現できそうかなと思っていました。今回はあまりきっちり検討しなかったのですが、極端な話、データ量によってはGoogleスプレッドシートとGoogle Apps Scriptでも出来たんじゃないかな、とは思っています。
今回は個人的にFirebase Realtime Databaseを使ってみたかったこともあり、それに合わせる形でGoogle Cloud Functionsで実装する方向で決まりました。
Firebase Realtime Databaseはデータベースを立てるだけでフロントエンドで利用出来る、というレベルの手軽さが今回は特に助かりました。
2. 集めたツイートをGatheringの公式サイトに掲載する
実装前にattsumiさんによる素敵デザインの公式サイトが出来上がっていて、フロントエンドがReactで実装されていたので全面的にそれに乗っかる(?)形になりました。React入ってるなら(今回の作業範囲なら)私のフロントエンド知識でも何とかなりそうだな、と考え、こちらはFirebaseのJavaScript版SDKがあることだけを確認して調査終了。
まとめと次回予告
実際の作業順としてはデータベース作成→公式サイト実装→ツイート収集バッチ実装、という感じで、公式サイト側さえ作ってしまえばあとは何とでも出来る、という感じでベタベタな関係にせず済ませられたのが良かったかなーと思っています。
多分アドベントカレンダーとしてもう2本くらい、次回はデータベースの作成と公式サイトに掲載するところのお話をしようと思います。
最後に大事な話なんですが、#rgjp10th
の記念ツイートは引き続き募集中ですのでよろしくお願いします🥰
次の記事はkurotakyさんの「Rails Girls Gathering Japan 2022に参加した」です。アイテムスポンサー、いつもお世話になってます!