自分の道具を自作してつくる喜びを体感しよう、Railsで。 〜4年続いたPodcastを実例に〜 by Takuya Mukohira / mktakuya - Kaigi on Rails 2023 https://kaigionrails.org/2023/talks/mktakuya/
自分の道具を自作してつくる喜びを体感しよう、Railsで。2023-10-28 / Kaigi on Rails 2023mktakuya〜 4年続いたPodcastを実例に〜
View Slide
• mktakuya• 向平 卓矢 / むこうひら たくや• 北海道の高専出身• 都内のIT企業でエンジニア• Ruby on RailsとPodcastがすき• ゆるふわPodcastのホスト自己紹介
Podcastについて
PodcastについてWebで音声を配信するやつ。オンデマンド形式。→ 好きなアプリを利用して、好きなタイミングで聴くことが出来る。日本のエンジニア界隈でもまれによく流行する。→ 老舗はRebuildやbackspace.fmなど。 その他個人Podcastや最近では企業が採用目的でやってたりも。誰でもかんたんに配信することが出来る。→ Spotify for Podcastersなど各種プラットフォームでかんたんに配信可能!
自分もPodcastをやってみた2019年、学生時代の友人とゆるふわPodcastを開始!内容はエンジニア3人の雑談。2023-10-28時点で216エピソード配信中!2020年からの約3年半、毎週配信達成中!PodcastのロゴはKoRロゴ作者の杉江さん作! →
なぜ、続けられているか?まれによく流行り始める人が増えるものの、続いてるものは少ない。なぜ、続けられているか?Podcastという趣味・サイドプロジェクト管理画面やWebサイト、音声配信といった道具をつくること両方をバランス良く楽しめていることが、楽しみながら続けられている理由と思っている。
Podcastのもろもろ、自作してますゆるふわPodcastは、Railsで動いています。WebサイトやRSSフィードの配信、音声コンテンツの配信など、すべてRailsを利用して構築してきました!既存のプラットフォームを利用せず自作したのは、つくる過程で技術的成長を得るため。つくることを楽しむため。
Podcast配信の変遷v0.1(2019〜): Jekyll + GitHub Pages / SoundCloudv1.0(2020〜): Rails + SoundCloudv2.0(2022〜): Railsで音声配信含め完全自作v3.0(2023〜): Rails + ART19並行運用
Jekyll + GitHub Pages / SoundCloudで構築Jekyll + GitHub Pages / SoundCloudで構築!→ Webサイト・RSSフィードをJekyll + GH Pagesで。 音声管理・配信・計測をSoundCloudで。 Jekyll + GitHub Pagesで配信は、当時の流行。Jekyll: Ruby製の静的サイトジェネレータ→ 簡単にWebサイトをつくれるやつ。 GitHub Pagesとの相性◎
Podcast配信の流れ(Jekyll + GH Pages時代)1.収録2.編集3.SoundCloudに音声をアップロードして公開予約4.Markdownでエピソードページ作成5.エピソードページを公開
Podcast配信の流れ(Jekyll + GH Pages時代)1.収録2.編集3.SoundCloudに音声をアップロードして公開予約4.Markdownでエピソードページ作成5.エピソードページを公開 SoundCloudで音声が公開される タイミングに合わせてgit push
Podcast配信の流れ(Jekyll + GH Pages時代)1.収録2.編集3.SoundCloudに音声をアップロードして公開予約4.Markdownでエピソードページ作成5.エピソードページを公開 SoundCloudで音声が公開される タイミングに合わせてgit push>めんどくさい<
1年ほど、Jekyll + GH Pages時代を過ごす2019年5月にはじめてから約1年ほど、Jekyll + GH Pagesで運用。2020年春、コロナでリモートワーク + 1周年のタイミングで、隔週だった更新頻度を毎週に。→ Jekyll + GH Pages運用のめんどくささが毎週のものに……。
好きに触れて運用出来るRails Appを持ちたいPodcast開始と同タイミングで社会人に。WebエンジニアとしてRailsを書いて過ごす中で、「好きに触れて運用出来るRails Appを持ちたい」と思っていた。→ 仕事で使う技術や個人で気になった技術を試す砂場がほしい→ 日々Rails Appを運用していく中での知見を身に着けたい
Rails化の機運
v1.0: まずは小さくはじめるWebサイトとRSSフィード配信、コンテンツ管理画面だけRails化。音声ファイル管理・配信はSoundCloudのまま。Webサイト → SoundCloudの埋め込みプレーヤーRSSフィード → MP3の直リンク
Podcast配信の流れ(Jekyll + GH Pages時代)1.収録2.編集3.SoundCloudに音声をアップロードして公開予約4.Markdownで記事ページ作成5.エピソードページを公開
Podcast配信の流れ(v1.0時代)1.収録2.編集3.SoundCloudに音声をアップロードして公開予約4.管理画面でエピソードページを作成して公開予約4.Markdownで記事ページ作成5.エピソードページを公開
Podcast配信の流れ(v1.0時代)1.収録2.編集3.SoundCloudに音声をアップロードして公開予約4.管理画面でエピソードページを作成して公開予約公開タイミング手動調整を廃止!
好きに触れて運用出来るRails AppをGET!めんどくさかった配信作業を少しラクに!毎週配信をはじめたタイミングだったので、省力化の効果大!なによりも、念願の「好きに触れて運用出来るRails App」を手に入れた🎉
好きに触れて運用出来るRails Appの効能つくって動かして終わりではなく、動かし続ける中での知見を得られる。自分がユーザーとして使う中で気づいた不満を、開発者として改善出来る→ 最強のドッグフーディング動かしていくための知見を体感しながら学ぶことが出来る→ ログ管理、エラー監視、パフォーマンス改善、Railsアップグレードなど
Podcast配信の流れ(v1.0時代)1.収録2.編集3.SoundCloudに音声をアップロードして公開予約4.管理画面でエピソードページを作成して公開予約
Podcast配信の流れ(v1.0時代)1.収録2.編集3.SoundCloudに音声をアップロードして公開予約4.管理画面でエピソードページを作成して公開予約2画面行き来がめんどくさい
Podcastの分析音声配信はSoundCloudに任せていた。→ 主要データはすべてSoundCloudが握っていた。自分のコンテンツのログを保持できない不満、SoundCloudの分析画面への不満→ タイムゾーンがUTC、分析軸が大雑把、 どのアプリから聞かれたのかわからない、 etc...
Podcastの分析音声配信はSoundCloudに任せていた。→ 主要データはすべてSoundCloudが握っていた。自分のコンテンツのログを保持できない不満、SoundCloudの分析画面への不満→ タイムゾーンがUTC、分析軸が大雑把、 どのアプリから聞かれたのかわからない、 etc...もっといろいろデータ集めて分析したい
前提:Podcastの配信についてPodcastは、オープンな規格。Web上にMP3とRSSフィードを置くだけで成り立つ。配信者は好きな場所でホスティングして、リスナーは好きなアプリで聴く。自由でオープンなもの。https://yuru28.com/
オープンな規格であれば自作できる
自作の音声管理・配信、ついでにロギング音声ファイルの管理や配信には、Active Storageを利用。→ 触ってみたかったActive Storageの素振りも兼ねてRSSフィードにロギング用URL(Rails App向き)を記載。ロギング後、キャッシュの効いたURL(CDN向き)へリダイレクト。→ SoundCloudでは取りきれなかったログを取得! Podcast配信システムを自作したら捗った話 https://speakerdeck.com/mktakuya/kichijojipm-28
Podcast配信の流れ(v2.0時代)1.収録2.編集3.管理画面で音声とメタデータを設定して公開予約3.SoundCloudに音声をアップロードして公開予約4.管理画面でエピソードページを作成して公開予約
Podcast配信の流れ(v2.0時代)1.収録2.編集3.管理画面で音声とメタデータを設定して公開予約自作のシステムですべてが完結!
視聴状況の分析も音声配信を自作したため、ログもしっかり取れるように。→ ログをBigQueryに流し、BIツール(Redash)で分析して遊んだりも。← 利用アプリの割合 日次 DL数 (Web/App区別)→
そして、v3.0へ……縁あって、Podcastの音声広告ネットワークに加入。ART19(別の音声配信SaaS)を利用することに。Rails AppとART19をAPI連携・並行稼働中……。 Podcastの音声配信部分を自前のものから別の配信サービスへ移行した https://blog.m6a.jp/entry/2023/07/18/193000
好きに触れて運用出来るRails Appを持って2020年4月に最初のcommitを積んでから、3年半ずっと使い続け、メンテナンス・機能追加し続けてきた。Podcastというサイドプロジェクトと、その道具の自作・改善というループをずっとまわしてきた。→ 楽しみながら技術的成長を得ることが出来た。
昔話
学生時代(〜2018)
業務(授業)外でもアウトプットしたい
いろいろつくってた
https://mktakuya.github.io/works/
だけど続かない
https://mktakuya.github.io/works/2018/misdo-now/
ものをつくってはいたけれど……つくって動かして満足してしまい、動かし続けられたことがない……。→ ものをつくる・成長する が目的だからダメってわけじゃない。 けど、動かし続けることで得られる楽しみ・学びだってあるはず。自分が使いたいものなら、動かし改善し続けられるのでは?→ そもそも自分が使いたいものって、結構既に世の中にありません? わざわざ自作してまで使いたいものって、なんだろう……。
業務(授業)外でもコードを書きたいけどつくりたいものがないという悩み
自分の道具を自作してつくる喜びを体感する趣味やサイドプロジェクトとかけ合わせてのものづくりで、ドッグフーディングしながら開発するループをつくることができた。自身が最大のユーザーとしてドッグフーディング自身が唯一の開発者として少しずつ改善
なぜRailsか
サイドプロジェクト✕ものづくりここまで、趣味やサイドプロジェクト✕ものづくりの有用性をお話してきた。あくまで趣味・サイドプロジェクト。もちろん、本業は別にあるので使える時間は限られている。また、基本的に開発者は自分ひとりだけ。そんなサイドプロジェクト✕ものづくりこそ、Railsがもたらす高い生産性がピッタリ。
Podcast配信の変遷v0.1(2019〜): Jekyll + GitHub Pages / SoundCloudv1.0(2020〜): Rails + SoundCloudv2.0(2022〜): Railsで音声配信含め完全自作v3.0(2023〜): Rails + ART19並行運用早く脱Jekyllしたい。rails newから最低限機能でHerokuデプロイまで爆速。
Podcast配信の変遷v0.1(2019〜): Jekyll + GitHub Pages / SoundCloudv1.0(2020〜): Rails + SoundCloudv2.0(2022〜): Railsで音声配信含め完全自作v3.0(2023〜): Rails + ART19並行運用単なるテキストを扱うサイトから音声ファイルを扱うサイトへ進化。Active Storage導入で高速実装。
Railsのエコシステムに乗って低コストな開発ちょっとしたデータ取り込みタスクを実行したい!→ Rakeタスクつくってサクッと実行。テストもかんたんに書ける。告知ツイートが面倒だから投稿日の19時に自動ツイートしたい!→ Active Job使ってジョブ作成、日時指定実行もおまかせ!ファンクラブ会員限定コンテンツやりたい!まずはユーザー認証から!→ deviseやomniauthでサクッと認証周り構築!
一人開発者の味方: Ruby on Railsとりあえずrails newしてデプロイすれば動く。日常のちょっとしたスクリプトの実行から、次のステップへの進化まで、Rails標準機能でカバー!用途に合わせていくつかの著名なgemを利用すれば、よくある機能を最速でつくれる
https://world.hey.com/dhh/the-one-person-framework-711e6318
生みの親 DHHが語る Railsが大規模開発に強い理由 - Forkwell Presshttps://pr.forkwell.com/articles/dhh-rails-large-scale-development/
生みの親 DHHが語る Railsが大規模開発に強い理由 - Forkwell Presshttps://pr.forkwell.com/articles/dhh-rails-large-scale-development/「Railsは一人の開発者のために設計している」ということを意識するようにしています。最初からGithubやShopify、Basecampのような大きな企業向けにデザインするのではなく、次のスタートアップのためだということを念頭に置くのです。57
The One Person Frameworkの思想「一人の開発者のためのフレームワーク」「大企業ではなく、次のスタートアップのため」と作者が宣言しているRailsは、まさにサイドプロジェクト✕ものづくりのツールとしてピッタリ。rails newから3年半、サイドプロジェクトもものづくりも両方楽しんで続けられたのは、Railsの思想あってこそ。
まとめサイドプロジェクトで使う道具を自分でつくり改善することを通じて、楽しみながら技術的な成長とつくる喜びを得られた。使える時間が限られている趣味やサイドプロジェクトとかけ合わせてのものづくりにこそ、Ruby on Railsとそのエコシステムがもたらす高い生産性がピッタリ。
おわりにみなさんが、「自分もRailsでなにか作ってみよう!」と思い、つくる喜びを体感する一歩を踏み出していただければ幸いです。
自分の道具を自作してつくる喜びを体感しよう、Railsで。〜 4年続いたPodcastを実例に〜