$30 off During Our Annual Pro Sale. View Details »

自分の道具を自作してつくる喜びを体感しよう、Railsで。 〜4年続いたPodcastを実例に〜 / Kaigi on Rails 2023

自分の道具を自作してつくる喜びを体感しよう、Railsで。 〜4年続いたPodcastを実例に〜 / Kaigi on Rails 2023

自分の道具を自作してつくる喜びを体感しよう、Railsで。 〜4年続いたPodcastを実例に〜 by Takuya Mukohira / mktakuya - Kaigi on Rails 2023
https://kaigionrails.org/2023/talks/mktakuya/

Takuya Mukohira

October 28, 2023
Tweet

More Decks by Takuya Mukohira

Other Decks in Technology

Transcript

  1. 自分の道具を自作して


    つくる喜びを体感しよう、


    Railsで。
    2023-10-28 / Kaigi on Rails 2023


    mktakuya
    〜 4年続いたPodcastを実例に〜

    View Slide

  2. • mktakuya


    • 向平 卓矢 / むこうひら たくや


    • 北海道の高専出身


    • 都内のIT企業でエンジニア


    • Ruby on RailsとPodcastがすき


    • ゆるふわPodcastのホスト
    自己紹介

    View Slide

  3. Podcastについて

    View Slide

  4. Podcastについて
    Webで音声を配信するやつ。オンデマンド形式。


    → 好きなアプリを利用して、好きなタイミングで聴くことが出来る。


    日本のエンジニア界隈でもまれによく流行する。


    → 老舗はRebuildやbackspace.fmなど。


      その他個人Podcastや最近では企業が採用目的でやってたりも。


    誰でもかんたんに配信することが出来る。


    → Spotify for Podcastersなど各種プラットフォームでかんたんに配信可能!

    View Slide

  5. 自分もPodcastをやってみた
    2019年、学生時代の友人とゆるふわPodcastを開始!


    内容はエンジニア3人の雑談。


    2023-10-28時点で216エピソード配信中!


    2020年からの約3年半、毎週配信達成中!
    Podcastのロゴは


    KoRロゴ作者の杉江さん作! →

    View Slide

  6. なぜ、続けられているか?
    まれによく流行り始める人が増えるものの、続いてるものは少ない。


    なぜ、続けられているか?


    Podcastという趣味・サイドプロジェクト


    管理画面やWebサイト、音声配信といった道具をつくること


    両方をバランス良く楽しめていることが、


    楽しみながら続けられている理由と思っている。

    View Slide

  7. Podcastのもろもろ、自作してます
    ゆるふわPodcastは、Railsで動いています。


    WebサイトやRSSフィードの配信、音声コンテンツの配信など、


    すべてRailsを利用して構築してきました!


    既存のプラットフォームを利用せず自作したのは、


    つくる過程で技術的成長を得るため。


    つくることを楽しむため。

    View Slide

  8. Podcast配信の変遷
    v0.1(2019〜): Jekyll + GitHub Pages / SoundCloud


    v1.0(2020〜): Rails + SoundCloud


    v2.0(2022〜): Railsで音声配信含め完全自作


    v3.0(2023〜): Rails + ART19並行運用

    View Slide

  9. Jekyll + GitHub Pages / SoundCloudで構築
    Jekyll + GitHub Pages / SoundCloudで構築!


    → Webサイト・RSSフィードをJekyll + GH Pagesで。


      音声管理・配信・計測をSoundCloudで。


      Jekyll + GitHub Pagesで配信は、当時の流行。


    Jekyll: Ruby製の静的サイトジェネレータ


    → 簡単にWebサイトをつくれるやつ。


      GitHub Pagesとの相性◎

    View Slide

  10. Podcast配信の流れ(Jekyll + GH Pages時代)
    1.収録


    2.編集


    3.SoundCloudに音声をアップロードして公開予約


    4.Markdownでエピソードページ作成


    5.エピソードページを公開

    View Slide

  11. Podcast配信の流れ(Jekyll + GH Pages時代)
    1.収録


    2.編集


    3.SoundCloudに音声をアップロードして公開予約


    4.Markdownでエピソードページ作成


    5.エピソードページを公開
     SoundCloudで音声が公開される


     タイミングに合わせてgit push

    View Slide

  12. Podcast配信の流れ(Jekyll + GH Pages時代)
    1.収録


    2.編集


    3.SoundCloudに音声をアップロードして公開予約


    4.Markdownでエピソードページ作成


    5.エピソードページを公開
     SoundCloudで音声が公開される


     タイミングに合わせてgit push
    >めんどくさい<

    View Slide

  13. 1年ほど、Jekyll + GH Pages時代を過ごす
    2019年5月にはじめてから約1年ほど、Jekyll + GH Pagesで運用。


    2020年春、コロナでリモートワーク + 1周年のタイミングで、


    隔週だった更新頻度を毎週に。


    → Jekyll + GH Pages運用のめんどくささが毎週のものに……。

    View Slide

  14. 好きに触れて運用出来るRails Appを持ちたい
    Podcast開始と同タイミングで社会人に。


    WebエンジニアとしてRailsを書いて過ごす中で、


    「好きに触れて運用出来るRails Appを持ちたい」と思っていた。


    → 仕事で使う技術や個人で気になった技術を試す砂場がほしい


    → 日々Rails Appを運用していく中での知見を身に着けたい

    View Slide

  15. Rails化の機運

    View Slide

  16. v1.0: まずは小さくはじめる
    WebサイトとRSSフィード配信、コンテンツ管理画面だけRails化。


    音声ファイル管理・配信はSoundCloudのまま。


    Webサイト → SoundCloudの埋め込みプレーヤー


    RSSフィード → MP3の直リンク

    View Slide

  17. Podcast配信の流れ(Jekyll + GH Pages時代)
    1.収録


    2.編集


    3.SoundCloudに音声をアップロードして公開予約


    4.Markdownで記事ページ作成


    5.エピソードページを公開

    View Slide

  18. Podcast配信の流れ(v1.0時代)
    1.収録


    2.編集


    3.SoundCloudに音声をアップロードして公開予約


    4.管理画面でエピソードページを作成して公開予約


    4.Markdownで記事ページ作成


    5.エピソードページを公開

    View Slide

  19. Podcast配信の流れ(v1.0時代)
    1.収録


    2.編集


    3.SoundCloudに音声をアップロードして公開予約


    4.管理画面でエピソードページを作成して公開予約
    公開タイミング


    手動調整を廃止!

    View Slide

  20. 好きに触れて運用出来るRails AppをGET!
    めんどくさかった配信作業を少しラクに!


    毎週配信をはじめたタイミングだったので、省力化の効果大!


    なによりも、


    念願の「好きに触れて運用出来るRails App」を手に入れた🎉


    View Slide

  21. 好きに触れて運用出来るRails Appの効能
    つくって動かして終わりではなく、動かし続ける中での知見を得られる。


    自分がユーザーとして使う中で気づいた不満を、開発者として改善出来る


    → 最強のドッグフーディング


    動かしていくための知見を体感しながら学ぶことが出来る


    → ログ管理、エラー監視、パフォーマンス改善、Railsアップグレードなど

    View Slide

  22. Podcast配信の流れ(v1.0時代)
    1.収録


    2.編集


    3.SoundCloudに音声をアップロードして公開予約


    4.管理画面でエピソードページを作成して公開予約

    View Slide

  23. Podcast配信の流れ(v1.0時代)
    1.収録


    2.編集


    3.SoundCloudに音声をアップロードして公開予約


    4.管理画面でエピソードページを作成して公開予約
    2画面行き来が


    めんどくさい

    View Slide

  24. Podcastの分析
    音声配信はSoundCloudに任せていた。


    → 主要データはすべてSoundCloudが握っていた。


    自分のコンテンツのログを保持できない不満、


    SoundCloudの分析画面への不満


    → タイムゾーンがUTC、分析軸が大雑把、


      どのアプリから聞かれたのかわからない、


      etc...

    View Slide

  25. Podcastの分析
    音声配信はSoundCloudに任せていた。


    → 主要データはすべてSoundCloudが握っていた。


    自分のコンテンツのログを保持できない不満、


    SoundCloudの分析画面への不満


    → タイムゾーンがUTC、分析軸が大雑把、


      どのアプリから聞かれたのかわからない、


      etc...
    もっといろいろ


    データ集めて


    分析したい

    View Slide

  26. 前提:Podcastの配信について
    Podcastは、オープンな規格。


    Web上にMP3とRSSフィードを置くだけで成り立つ。


    配信者は好きな場所でホスティングして、


    リスナーは好きなアプリで聴く。自由でオープンなもの。
    https://yuru28.com/

    View Slide

  27. オープンな規格であれば


    自作できる

    View Slide

  28. 自作の音声管理・配信、ついでにロギング
    音声ファイルの管理や配信には、Active Storageを利用。


    → 触ってみたかったActive Storageの素振りも兼ねて


    RSSフィードにロギング用URL(Rails App向き)を記載。


    ロギング後、キャッシュの効いたURL(CDN向き)へリダイレクト。


    → SoundCloudでは取りきれなかったログを取得!
     Podcast配信システムを自作したら捗った話


     https://speakerdeck.com/mktakuya/kichijojipm-28

    View Slide

  29. Podcast配信の流れ(v1.0時代)
    1.収録


    2.編集


    3.SoundCloudに音声をアップロードして公開予約


    4.管理画面でエピソードページを作成して公開予約

    View Slide

  30. Podcast配信の流れ(v2.0時代)
    1.収録


    2.編集


    3.管理画面で音声とメタデータを設定して公開予約


    3.SoundCloudに音声をアップロードして公開予約


    4.管理画面でエピソードページを作成して公開予約

    View Slide

  31. Podcast配信の流れ(v2.0時代)
    1.収録


    2.編集


    3.管理画面で音声とメタデータを設定して公開予約
    自作のシステムですべてが完結!

    View Slide

  32. 視聴状況の分析も
    音声配信を自作したため、ログもしっかり取れるように。


    → ログをBigQueryに流し、BIツール(Redash)で分析して遊んだりも。
    ← 利用アプリの割合


          日次 DL数


      (Web/App区別)→

    View Slide

  33. そして、v3.0へ……
    縁あって、


    Podcastの音声広告ネットワークに加入。


    ART19(別の音声配信SaaS)を利用することに。


    Rails AppとART19をAPI連携・並行稼働中……。
     Podcastの音声配信部分を自前のものから別の配信サービスへ移行した


     https://blog.m6a.jp/entry/2023/07/18/193000

    View Slide

  34. 好きに触れて運用出来るRails Appを持って
    2020年4月に最初のcommitを積んでから、


    3年半ずっと使い続け、メンテナンス・機能追加し続けてきた。


    Podcastというサイドプロジェクトと、


    その道具の自作・改善というループをずっとまわしてきた。


    → 楽しみながら技術的成長を得ることが出来た。

    View Slide

  35. 昔話

    View Slide

  36. 学生時代


    (〜2018)

    View Slide

  37. 業務(授業)外でも


    アウトプットしたい

    View Slide

  38. いろいろ


    つくってた

    View Slide

  39. https://mktakuya.github.io/works/

    View Slide

  40. だけど続かない

    View Slide

  41. https://mktakuya.github.io/works/2018/misdo-now/

    View Slide

  42. View Slide

  43. ものをつくってはいたけれど……
    つくって動かして満足してしまい、動かし続けられたことがない……。


    → ものをつくる・成長する が目的だからダメってわけじゃない。


      けど、動かし続けることで得られる楽しみ・学びだってあるはず。


    自分が使いたいものなら、動かし改善し続けられるのでは?


    → そもそも自分が使いたいものって、結構既に世の中にありません?


      わざわざ自作してまで使いたいものって、なんだろう……。

    View Slide

  44. 業務(授業)外でもコードを


    書きたいけどつくりたいものがない


    という悩み

    View Slide

  45. View Slide

  46. 自分の道具を自作してつくる喜びを体感する
    趣味やサイドプロジェクトとかけ合わせてのものづくりで、


    ドッグフーディングしながら開発するループをつくることができた。
    自身が最大のユーザーとして


    ドッグフーディング
    自身が唯一の開発者として


    少しずつ改善

    View Slide

  47. View Slide

  48. なぜRailsか

    View Slide

  49. サイドプロジェクト✕ものづくり
    ここまで、


    趣味やサイドプロジェクト✕ものづくりの有用性をお話してきた。


    あくまで趣味・サイドプロジェクト。


    もちろん、本業は別にあるので使える時間は限られている。


    また、基本的に開発者は自分ひとりだけ。


    そんなサイドプロジェクト✕ものづくりこそ、


    Railsがもたらす高い生産性がピッタリ。

    View Slide

  50. Podcast配信の変遷
    v0.1(2019〜): Jekyll + GitHub Pages / SoundCloud


    v1.0(2020〜): Rails + SoundCloud


    v2.0(2022〜): Railsで音声配信含め完全自作


    v3.0(2023〜): Rails + ART19並行運用

    View Slide

  51. Podcast配信の変遷
    v0.1(2019〜): Jekyll + GitHub Pages / SoundCloud


    v1.0(2020〜): Rails + SoundCloud


    v2.0(2022〜): Railsで音声配信含め完全自作


    v3.0(2023〜): Rails + ART19並行運用
    早く脱Jekyllしたい。rails newから


    最低限機能でHerokuデプロイまで爆速。

    View Slide

  52. Podcast配信の変遷
    v0.1(2019〜): Jekyll + GitHub Pages / SoundCloud


    v1.0(2020〜): Rails + SoundCloud


    v2.0(2022〜): Railsで音声配信含め完全自作


    v3.0(2023〜): Rails + ART19並行運用
    単なるテキストを扱うサイトから


    音声ファイルを扱うサイトへ進化。


    Active Storage導入で高速実装。

    View Slide

  53. Railsのエコシステムに乗って低コストな開発
    ちょっとしたデータ取り込みタスクを実行したい!


    → Rakeタスクつくってサクッと実行。テストもかんたんに書ける。


    告知ツイートが面倒だから投稿日の19時に自動ツイートしたい!


    → Active Job使ってジョブ作成、日時指定実行もおまかせ!


    ファンクラブ会員限定コンテンツやりたい!まずはユーザー認証から!


    → deviseやomniauthでサクッと認証周り構築!

    View Slide

  54. 一人開発者の味方: Ruby on Rails
    とりあえずrails newしてデプロイすれば動く。


    日常のちょっとしたスクリプトの実行から、


    次のステップへの進化まで、Rails標準機能でカバー!


    用途に合わせていくつかの著名なgemを利用すれば、


    よくある機能を最速でつくれる

    View Slide

  55. https://world.hey.com/dhh/the-one-person-framework-711e6318

    View Slide

  56. 生みの親 DHHが語る Railsが大規模開発に強い理由 - Forkwell Press


    https://pr.forkwell.com/articles/dhh-rails-large-scale-development/

    View Slide

  57. 生みの親 DHHが語る Railsが大規模開発に強い理由 - Forkwell Press


    https://pr.forkwell.com/articles/dhh-rails-large-scale-development/
    「Railsは一人の開発者のために設計している」と
    いうことを意識するようにしています。最初から
    GithubやShopify、Basecampのような大きな企業
    向けにデザインするのではなく、次のスタート
    アップのためだということを念頭に置くのです。
    57

    View Slide

  58. The One Person Frameworkの思想
    「一人の開発者のためのフレームワーク」


    「大企業ではなく、次のスタートアップのため」


    と作者が宣言しているRailsは、


    まさにサイドプロジェクト✕ものづくりのツールとしてピッタリ。


    rails newから3年半、


    サイドプロジェクトもものづくりも両方楽しんで続けられたのは、


    Railsの思想あってこそ。

    View Slide

  59. View Slide

  60. まとめ
    サイドプロジェクトで使う道具を自分でつくり改善することを通じて、


    楽しみながら技術的な成長とつくる喜びを得られた。


    使える時間が限られている趣味やサイドプロジェクトと


    かけ合わせてのものづくりにこそ、


    Ruby on Railsとそのエコシステムがもたらす高い生産性がピッタリ。

    View Slide

  61. おわりに
    みなさんが、「自分もRailsでなにか作ってみよう!」と思い、


    つくる喜びを体感する一歩を踏み出していただければ幸いです。

    View Slide

  62. 自分の道具を自作して


    つくる喜びを体感しよう、


    Railsで。
    〜 4年続いたPodcastを実例に〜

    View Slide