Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Podcast配信システムを自作したら捗った話 / kichijojipm-28

Podcast配信システムを自作したら捗った話 / kichijojipm-28

吉祥寺.pm28【オンライン】 - connpass
https://kichijojipm.connpass.com/event/236031/

D56efd2db811cb782f1458df3888c82a?s=128

Takuya Mukohira

January 27, 2022
Tweet

More Decks by Takuya Mukohira

Other Decks in Programming

Transcript

  1. Podcast配信システムを 自作したら捗った話 2022-01-26 吉祥寺.pm 28【オンライン】 @mktakuya

  2. 自己紹介 • @mktakuya(えむけー / mk / MK) • 都内のIT企業でWebエンジニア •

    サーバサイド多め。主にRuby • 学生時代の友達と雑談系Podcastを配信しています 
 ゆるふわPodcast https://yuru28.com
  3. Podcast配信システムを 自作したら捗った話

  4. ゆるふわPodcast • 2019年5月〜 高専時代の友人と開始した雑談Podcast • 2022年1月27日時点で全120エピソード公開中 • → 2020年5月から毎週配信継続中!! •

    基本3人で雑談、たまにゲストをお迎えして真面目な話 • → 「若いエンジニア達が何を考えているか知ることが 
   出来ておもしろい」らしい https://yuru28.com ↑ EP33 fukabori.fm iwashiさんを深堀りする回  https://yuru28.com/33
  5. 音声配信へのこだわり • Anchorやstand.fmなど音声配信サービスを利用せず、 
 自分たちでサイトを作りフィードを配信している 
  → 技術勉強だったりオープンな技術を尊重したかったり 
   

    Rebuildの宮川さんへの憧れだったり…… ↑Rails製管理画面→
  6. Podcastの音声配信 • Web上にMP3ファイルを置いて、 
 そのURLを記載したRSSフィードを配信すれば 
 Podcastは成り立つ • 言ってしまえばWebサイトなどはおまけ •

    (当たり前だが)音声配信がPodcastのキモ
  7. 音声配信 Before / After • 今日は「Podcastの音声配信システム」について話します • Before: SoundCloudベース •

    SoundCloud上のMP3ファイルのURLをフィードに記載 • 音声配信だけで月$16(SoundCloud Pro) • After: 自前配信(S3 + CDN) • Amazon Lightsail オブジェクトストレージに 
 ファイルを配置し、RailsのActiveStorageのURLを フィードに記載し、CDN(Cloud fl are)経由で配信 • 音声配信月$1(オブジェクトストレージ 5GBプラン)
  8. Before: SoundCloudベース • Podcastを始めた2019年春 • Webサイトや管理画面、RSSフィードはRailsで作成 • SoundCloudに音声ファイルをアップロード 
  Webから視聴:

     公式の埋め込みプレーヤー 
  アプリから視聴: フィードにMP3 URLを記載 • ストレージと配信を 
 SoundCloudに任せる形に
  9. SoundCloudベースのツラミ • エピソード公開が二度手間だった • SoundCloudで音声UP → SoundCloudのTrack IDをメモ → 管理画面でメタデータ編集

    → 公開予約 • アナリティクスが貧弱だった • 過去データや再生元(Web?アプリ?)が取れない • 仲間内の趣味でやるにはお高い価格だった($16/月)
  10. 音声配信も自作の機運

  11. 満たしたい要件 • 音声UPからエピソード公開まで管理画面でできること • 音声DLの日時やエピソード番号、 
 User-Agentやリファラなどをログに残せること • SoundCloudベースのものよりも安いこと(重要)

  12. 技術調査: ロギングについて • 音声はエッジ(Cloud fl are)からDLしてほしいが、 
 ロギングのためにオリジン(Rails)にもアクセスが必要 
  →

    エッジからレスポンスが返ると、 
    Railsにリクエストが届かずロギング出来ない • rebuild.fm を研究 m(_ _)m 
 → フィード記載のURLにアクセスすると、 
   キャッシュの効いたMP3ファイルのURLにリダイレクト ↑ ①RSSフィードには、 cache.rebuild.fm のURLが載っている ↑ ②実際の音声ファイルはリダイレクト後にCDNからDL
  13. ロギングの実装 • フィードには↓のようなURLを記載し、 
 /audio/d36e49d128/podcast-ep120.mp3 
 Controller内でロギングとリダイレクトを行った ← rails_storage_proxy_url(ar_instance.attribute) すると、

    
   Railsが裏側でS3等からファイルをDLし、 
   クライアントにファイルを送信(プロキシ)してくれる ↑ フィード記載のURLへのアクセスはオリジンまで到達し、リダイレクト後のURLはエッジがレスポンスを返す  これによって、Rails AppでのロギングとMP3ファイルのキャッシュからの配信を両立する
  14. あとはふつうのRails開発 • Rails謹製のActiveStorageを利用して 
 Episodeモデルにaudio_ fi leをattach • お手軽版S3(?)のLightsailオブジェクトストレージ利用 •

    音声DLのログをBigQueryに流したりなどしつつ……
  15. !!!完成!!! • リスナーから見てなにかが変わったわけでは無いが。。。 • Webプレイヤー経由 / RSSフィード経由のDL数をとれたり • User-Agentからみんなの 


    Podcastアプリを調査 
 してみたり ←↑ RedashからBigQueryに   繋いでBIしてみた図
  16. !!!完成!!! • 編集→公開も管理画面で完結 • SoundCloudと管理画面を行き来する 
 不毛な作業から開放🎉 • (音声配信部分だけ)$16 /

    月 → $1 / 月に圧縮 • SoundCloud Pro: $16 
 → Lightsailのオブジェクトストレージ: $1 • 年間$180(2万円ちょい)の費用削減🎉
  17. 吉祥寺.pm 28 テーマ「リブート」

  18. リブート的な話 • 2021年: Podcastのサポータープログラムの収益で 
 (ありがたいことに)収支がトントンに。 • 2022年: 脱SoundCloud(DONE)や脱Heroku(WIP)を 


    やって、経費を圧縮する予定。 • 利益(?)をゲスト様のマイク代にしたり、 
 機材アップグレードにまわしたり、 
 よりおもしろいことに投資したり • 2022年5月からPodcastも4年目になるので、 
 ここらでリブートしていきたい💪 www.patreon.com/bePatron?u=12932782
  19. おもしろいことの例 • もっとゲスト回 / 企画回増やす • 突然YouTuberデビューする • BigQueryに突っ込んだ再生ログを使ってなにかする •

    エピソードの自動文字起こしを使ってなにかする • ……アイデア募集! ← Googleの自動文字起こしAPIで生成した   文字起こしの検索(そのうち公開予定)
  20. まとめ • Podcast配信システムを自作すると捗る • 費用圧縮 • ログ取って遊べる • 自由度高い •

    大容量ファイルへのアクセスをキャッシュ効かせつつ 
 ロギングしたいときは、ロギング用URLからキャッシュの 効いたURLにリダイレクトすると良い • 配信を 自分でやると 捗るよ(575)