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/

Takuya Mukohira

January 27, 2022
Tweet

More Decks by Takuya Mukohira

Other Decks in Programming

Transcript

  1. Podcast配信システムを


    自作したら捗った話
    2022-01-26 吉祥寺.pm 28【オンライン】


    @mktakuya

    View full-size slide

  2. 自己紹介
    • @mktakuya(えむけー / mk / MK)


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


    • サーバサイド多め。主にRuby


    • 学生時代の友達と雑談系Podcastを配信しています

    ゆるふわPodcast https://yuru28.com

    View full-size slide

  3. Podcast配信システムを


    自作したら捗った話

    View full-size slide

  4. ゆるふわPodcast
    • 2019年5月〜 高専時代の友人と開始した雑談Podcast


    • 2022年1月27日時点で全120エピソード公開中


    • → 2020年5月から毎週配信継続中!!


    • 基本3人で雑談、たまにゲストをお迎えして真面目な話


    • → 「若いエンジニア達が何を考えているか知ることが

      出来ておもしろい」らしい
    https://yuru28.com
    ↑ EP33 fukabori.fm iwashiさんを深堀りする回


     https://yuru28.com/33

    View full-size slide

  5. 音声配信へのこだわり
    • Anchorやstand.fmなど音声配信サービスを利用せず、

    自分たちでサイトを作りフィードを配信している

     → 技術勉強だったりオープンな技術を尊重したかったり

       Rebuildの宮川さんへの憧れだったり……
    ↑Rails製管理画面→

    View full-size slide

  6. Podcastの音声配信
    • Web上にMP3ファイルを置いて、

    そのURLを記載したRSSフィードを配信すれば

    Podcastは成り立つ


    • 言ってしまえばWebサイトなどはおまけ


    • (当たり前だが)音声配信がPodcastのキモ

    View full-size slide

  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プラン)

    View full-size slide

  8. Before: SoundCloudベース
    • Podcastを始めた2019年春


    • Webサイトや管理画面、RSSフィードはRailsで作成


    • SoundCloudに音声ファイルをアップロード

     Webから視聴:  公式の埋め込みプレーヤー

     アプリから視聴: フィードにMP3 URLを記載


    • ストレージと配信を

    SoundCloudに任せる形に

    View full-size slide

  9. SoundCloudベースのツラミ
    • エピソード公開が二度手間だった


    • SoundCloudで音声UP → SoundCloudのTrack IDをメモ
    → 管理画面でメタデータ編集 → 公開予約


    • アナリティクスが貧弱だった


    • 過去データや再生元(Web?アプリ?)が取れない


    • 仲間内の趣味でやるにはお高い価格だった($16/月)

    View full-size slide

  10. 音声配信も自作の機運

    View full-size slide

  11. 満たしたい要件
    • 音声UPからエピソード公開まで管理画面でできること


    • 音声DLの日時やエピソード番号、

    User-Agentやリファラなどをログに残せること


    • SoundCloudベースのものよりも安いこと(重要)

    View full-size slide

  12. 技術調査: ロギングについて
    • 音声はエッジ(Cloud
    fl
    are)からDLしてほしいが、

    ロギングのためにオリジン(Rails)にもアクセスが必要

     → エッジからレスポンスが返ると、

       Railsにリクエストが届かずロギング出来ない


    • rebuild.fm を研究 m(_ _)m

    → フィード記載のURLにアクセスすると、

      キャッシュの効いたMP3ファイルのURLにリダイレクト
    ↑ ①RSSフィードには、 cache.rebuild.fm のURLが載っている
    ↑ ②実際の音声ファイルはリダイレクト後にCDNからDL

    View full-size slide

  13. ロギングの実装
    • フィードには↓のようなURLを記載し、

    /audio/d36e49d128/podcast-ep120.mp3

    Controller内でロギングとリダイレクトを行った
    ← rails_storage_proxy_url(ar_instance.attribute) すると、

      Railsが裏側でS3等からファイルをDLし、

      クライアントにファイルを送信(プロキシ)してくれる
    ↑ フィード記載のURLへのアクセスはオリジンまで到達し、リダイレクト後のURLはエッジがレスポンスを返す


     これによって、Rails AppでのロギングとMP3ファイルのキャッシュからの配信を両立する

    View full-size slide

  14. あとはふつうのRails開発
    • Rails謹製のActiveStorageを利用して

    Episodeモデルにaudio_
    fi
    leをattach


    • お手軽版S3(?)のLightsailオブジェクトストレージ利用


    • 音声DLのログをBigQueryに流したりなどしつつ……

    View full-size slide

  15. !!!完成!!!
    • リスナーから見てなにかが変わったわけでは無いが。。。


    • Webプレイヤー経由 / RSSフィード経由のDL数をとれたり


    • User-Agentからみんなの

    Podcastアプリを調査

    してみたり
    ←↑ RedashからBigQueryに


      繋いでBIしてみた図

    View full-size slide

  16. !!!完成!!!
    • 編集→公開も管理画面で完結


    • SoundCloudと管理画面を行き来する

    不毛な作業から開放🎉


    • (音声配信部分だけ)$16 / 月 → $1 / 月に圧縮


    • SoundCloud Pro: $16

    → Lightsailのオブジェクトストレージ: $1


    • 年間$180(2万円ちょい)の費用削減🎉

    View full-size slide

  17. 吉祥寺.pm 28


    テーマ「リブート」

    View full-size slide

  18. リブート的な話
    • 2021年: Podcastのサポータープログラムの収益で

    (ありがたいことに)収支がトントンに。


    • 2022年: 脱SoundCloud(DONE)や脱Heroku(WIP)を

    やって、経費を圧縮する予定。


    • 利益(?)をゲスト様のマイク代にしたり、

    機材アップグレードにまわしたり、

    よりおもしろいことに投資したり


    • 2022年5月からPodcastも4年目になるので、

    ここらでリブートしていきたい💪
    www.patreon.com/bePatron?u=12932782

    View full-size slide

  19. おもしろいことの例
    • もっとゲスト回 / 企画回増やす


    • 突然YouTuberデビューする


    • BigQueryに突っ込んだ再生ログを使ってなにかする


    • エピソードの自動文字起こしを使ってなにかする


    • ……アイデア募集!
    ← Googleの自動文字起こしAPIで生成した


      文字起こしの検索(そのうち公開予定)

    View full-size slide

  20. まとめ
    • Podcast配信システムを自作すると捗る


    • 費用圧縮


    • ログ取って遊べる


    • 自由度高い


    • 大容量ファイルへのアクセスをキャッシュ効かせつつ

    ロギングしたいときは、ロギング用URLからキャッシュの
    効いたURLにリダイレクトすると良い


    • 配信を 自分でやると 捗るよ(575)

    View full-size slide