🛠 DojoCast を Jekyll から Rails に移行しました
Okinawa.rb Advent Calendar 2018 25日目の記事です。
2018年12月に僕が司会を務めるポッドキャスト「DojoCast」の英語収録を行ったところ、海外でも聴いてくれている人がいるようで嬉しいです ;)
YassLab 社には「トライ」という「まずはやってみようよ!」という文化がありますが、僕自身も新しいことにチャレンジするのは好きだし、遊びながら学んだ方が (少なくとも僕は) 楽しいと感じるので常にそうできるよう心がけています 😆
How wonderful to hear from our co-founder James @Whelton who spoke to the brilliant @CoderDojoJapan podcast #DojoCast.
— ☯CoderDojo☯ (@CoderDojo) December 20, 2018
Give it a listen from 1.35 (for english speakers)! https://t.co/dGcYZOcHMP pic.twitter.com/wpjBOVJrVJ
さて、DojoCast や英語収録の内容については上記リンクから聴いていただくこととして、本記事ではこの収録を公開するために裏側で色々と動いていたので、今回はその技術的な背景と実装したことを軽くまとめておきますね。
NOTE: YassLab 社と CoderDojo Japan との関係性については前回の記事をご参照ください。
移行の技術的な背景
DojoCast も「まずはやってみるか🤔」という気持ちで始めたプロジェクトの1つですが、当初は「どういった層が聞くのか」「そもそも価値はあるのか」などが分からなかったので、当初は必要最低限の機能を GitHub Pages (Jekyll) で雑に実装し、dojocast.coderdojo.jp というドメインから公開していました。
実際にやってみるとメンターやチャンピオンを中心に聴きたい人や、CoderDojo コミュニティ同士の知見の共有、パートナー企業のPRに繋がったりと、色々な場面で価値を感じることがありました。
「価値があるならもうちょっと頑張ってみるか」と思う一方で、当時の技術スタックでは次のような課題もありました。
- モバイルアプリから購読できるようにするために RSS を実装したい
- 音声ファイルは Amazon S3 などの適切な外部サービスに置きたい
- Jekyll でも出来るけど辛そう (だし個別に SSL 対応するのもなぁ…🤔💭)
もちろんいずれの課題も手動でやれば解決できますが、リソースは有限で出来る事も限られているので、やればやるほど楽になっていくようなカタチを目指していきたいです。そこで考えたのが、Rails 製の coderdojo.jp に DojoCast の機能を移行するプロジェクトです。
CoderDojo Japan official website integrated with Cloud-based Rails CMS
https://github.com/coderdojo-japan/coderdojo.jp
Rubyのエコシステムは巨大なので、上記のような課題を解決するためのライブラリも豊富です。また、coderdojo.jp は既に SSL 対応済みなので、Jekyll で SSL 周りに対応する必要も無くなります。
移行作業
上記の背景のもと、実際に行った作業が次のPRです。
具体的には上記PRで次のような作業を行っています。
- Markdown を描画する仕組みの再利用
- 各エピソードを扱うモデルを作成
- 各エピソードのファイル移行・一部更新
- 新エピソードの編集・公開
- デザイン改善、ナビゲーションの設置など
CoderDojo Japan には既に Markdown を描画する仕組み (Docs) とデザイン (Keiyaku CSS) があるので、基本的には既存の仕組みを再利用しながら簡単に実装することができました。
仕組みを再利用しているので共通化できる部分もいくつかあるのですが、ひとまず新エピソードを公開したいという目論見があったので、現時点ではリファクタリングは後回しにしています。というのも、冒頭で共有したツイートですが、実はそのツイートの数日前に CoderDojo Foundation の人達とミーティングする機会があって、そこで直接共有したから紹介してもらえたという背景があるからです (言い換えるとその日までに公開できる状態まで持っていきたかった)。
結果としてはうまく @CoderDojo アカウントからも共有してもらえたので、移行作業に取り掛かるタイミング・優先順位の付け方としては良かったかなと考えています ☺️
次にやりたいこと
上記の PR で無事に Jekyll から Rails に移行できたので、あとは大体なんでもできそうです 🤔💭 個人的には iTunes Store に登録したいなぁという気持ちもあるので、そのために必要な仕様と実装も調べてみようかなとは考えています。
DojoCastのRSSフィードを実装してiTunesから購読できるようにする #363
https://github.com/coderdojo-japan/coderdojo.jp/issues/363
RailsチュートリアルやRailsガイドもそうですが、最初は少人数で始めた開発プロジェクトが少しずつ大きくなっていくのは楽しいですね 📈✨ coderdojo.jp も最初は一人で始めた小さいプロジェクトでしたが、年々より多くの人たちに利用されるようになってきています。
今回実装した Podcast 機能に限らず、やるべき方針を見定め、今後も coderdojo.jp でできることがあれば少しずつ改善していきたいと思います。ただし次にやるべきことが常に開発であるとは限らないので、開発だけでなく、「CoderDojo コミュニティにとって役立つことは何なのか」から考えて、そこから効果的なアクションを模索・実行していきたいなと考えています。
開発視点から見る次のアクション
次のアクションはまだ決めていませんし、上述の通り開発が常に最優先になるとは限らないのですが、「もし開発に絞ったとするとどんなアクションがありうるか」について、執筆時点での状況を最後にまとめておきますね ;)
最近は自社でRailsチュートリアル法人プランを始めたこともあり、決済周りの知見が増えてきているので、例えば CoderDojo 専用の決済サービスなんかも実装できたりするのかもなぁとは考えています。他にも、メンテナンスしやすい状態にするために現在運用されている DojoPaaS を node から Ruby に移行するプロジェクトとか、直近のイベント情報を表示する仕組みなんかも少しずつですが動いていたりします。
DojoPaaS のコードを node から Ruby に移植したい #110
https://github.com/coderdojo-japan/dojopaas/issues/110
直近のイベント情報を集計するtaskの追加 #297
https://github.com/coderdojo-japan/coderdojo.jp/pull/297
いずれのプロジェクトも PR/Issue などでまとめているので、もし興味あれば気軽に覗いてみてください 📜👀✨
上記の他にも、もし「coderdojo.jp でこんなことやってみたい」「こういうアプリ作ろうと思いますがどうですか?」などのご相談があれば @yasulab までお気軽にご連絡ください 📧✨ 開発環境に関するドキュメントは GitHub の README から公開していて、開発目線で見たソースコードの動きも1年単位で記事にしているので、開発に関する情報のキャッチアップはしやすい状況になっているかなとは思います ☺️
それでは、よいお年を!
Happy Coding ;)
最近のお知らせ
- 08/28 🎓 JPHACKS 2024 に学習支援で協賛
- 08/16 📕Railsガイドが Rails 7.2 に対応しました
- 08/14 💞 協賛プラン導入事例: 虎の穴ラボ
- 07/19 🎁 AWS賞の副賞を受け取りました!
- 07/10 💞 協賛プラン導入事例: GA technologies
- 07/08 💞 協賛プラン導入事例: note
- 06/12 🤝 りこぴあ交流会@東京に協賛!
- 06/10 🤖 AI サポートが GPT-4o に対応
- 05/24 💎 After RubyKaigi 2024 に LT 登壇
- 05/23 🏝 RubyKaigi 2024 アウトプットまとめ