Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Podcast配信システムを自作したら捗った話 / kichijojipm-28
Search
Takuya Mukohira
January 27, 2022
Programming
3k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Podcast配信システムを自作したら捗った話 / kichijojipm-28
吉祥寺.pm28【オンライン】 - connpass
https://kichijojipm.connpass.com/event/236031/
Takuya Mukohira
January 27, 2022
More Decks by Takuya Mukohira
See All by Takuya Mukohira
最近読んで良かった本 / Yokohama North Meetup #10
mktakuya
0
1.7k
Podcasting Guide 2024
mktakuya
3
2k
『インタプリタの作り方』の紹介 / Let's enjoy crafting interpreters
mktakuya
1
1.5k
マネジメントとコミュニケーションとプロトコルと / kichijojipm-34
mktakuya
1
1k
自分の道具を自作してつくる喜びを体感しよう、Railsで。 〜4年続いたPodcastを実例に〜 / Kaigi on Rails 2023
mktakuya
1
3k
趣味と趣味の掛け算で技術を学んでいく話 / 2020-11-27
mktakuya
0
390
ゆるふわなPodcastのすすめ / kichijojipm-22
mktakuya
0
1.5k
コーチLT / Rails Girls Tokyo 12th
mktakuya
1
1.3k
プログラミングと一人暮らし 〜Nature Remoで遊ぶ編〜 / prolt-2019
mktakuya
1
380
Other Decks in Programming
See All in Programming
Java × distroless で 軽量なコンテナイメージを / Java on Distroless
contour_gara
0
500
Why Laravel apps break—Mastering the fundamentals to keep them maintainable
kentaroutakeda
1
340
ふつうのFeature Flag実践入門
irof
7
3.6k
Copilot CLI の継戦能力を高める コンテキスト管理
nozomutu
1
1.2k
プロパティの順序で型推論が壊れる!? TypeScript6.0の修正からContext-Sensitivityの仕組みを追う
bicstone
2
1.3k
Inside Stream API
skrb
1
650
Javaの型とAI時代に型が大事な理由 / java types and type in AI era
kishida
2
110
気づいたらRubyで100作品 ー クリエイティブコーディングが生活の一部になるまで / 100 Ruby Sketches Later: How Creative Coding Became Part of My Life
chobishiba
3
550
技術記事、AIに書かせるか、自分で書くか? 〜それでも私が自分の手で書く理由〜 / #QiitaConference
jnchito
2
1.3k
脅威をエンジニアリングの糧にして――現場編 / Turning Threats into Engineering Fuel — Field Edition
nrslib
0
250
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
120
GitHub Copilot CLIのいいところ
htkym
2
1.3k
Featured
See All Featured
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
71
40k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
320
Into the Great Unknown - MozCon
thekraken
41
2.5k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
150
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.5k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
340
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.9k
Paper Plane
katiecoart
PRO
1
51k
Scaling GitHub
holman
464
140k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
550
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.3k
Transcript
Podcast配信システムを 自作したら捗った話 2022-01-26 吉祥寺.pm 28【オンライン】 @mktakuya
自己紹介 • @mktakuya(えむけー / mk / MK) • 都内のIT企業でWebエンジニア •
サーバサイド多め。主にRuby • 学生時代の友達と雑談系Podcastを配信しています ゆるふわPodcast https://yuru28.com
Podcast配信システムを 自作したら捗った話
ゆるふわPodcast • 2019年5月〜 高専時代の友人と開始した雑談Podcast • 2022年1月27日時点で全120エピソード公開中 • → 2020年5月から毎週配信継続中!! •
基本3人で雑談、たまにゲストをお迎えして真面目な話 • → 「若いエンジニア達が何を考えているか知ることが 出来ておもしろい」らしい https://yuru28.com ↑ EP33 fukabori.fm iwashiさんを深堀りする回 https://yuru28.com/33
音声配信へのこだわり • Anchorやstand.fmなど音声配信サービスを利用せず、 自分たちでサイトを作りフィードを配信している → 技術勉強だったりオープンな技術を尊重したかったり
Rebuildの宮川さんへの憧れだったり…… ↑Rails製管理画面→
Podcastの音声配信 • Web上にMP3ファイルを置いて、 そのURLを記載したRSSフィードを配信すれば Podcastは成り立つ • 言ってしまえばWebサイトなどはおまけ •
(当たり前だが)音声配信がPodcastのキモ
音声配信 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プラン)
Before: SoundCloudベース • Podcastを始めた2019年春 • Webサイトや管理画面、RSSフィードはRailsで作成 • SoundCloudに音声ファイルをアップロード Webから視聴:
公式の埋め込みプレーヤー アプリから視聴: フィードにMP3 URLを記載 • ストレージと配信を SoundCloudに任せる形に
SoundCloudベースのツラミ • エピソード公開が二度手間だった • SoundCloudで音声UP → SoundCloudのTrack IDをメモ → 管理画面でメタデータ編集
→ 公開予約 • アナリティクスが貧弱だった • 過去データや再生元(Web?アプリ?)が取れない • 仲間内の趣味でやるにはお高い価格だった($16/月)
音声配信も自作の機運
満たしたい要件 • 音声UPからエピソード公開まで管理画面でできること • 音声DLの日時やエピソード番号、 User-Agentやリファラなどをログに残せること • SoundCloudベースのものよりも安いこと(重要)
技術調査: ロギングについて • 音声はエッジ(Cloud fl are)からDLしてほしいが、 ロギングのためにオリジン(Rails)にもアクセスが必要 →
エッジからレスポンスが返ると、 Railsにリクエストが届かずロギング出来ない • rebuild.fm を研究 m(_ _)m → フィード記載のURLにアクセスすると、 キャッシュの効いたMP3ファイルのURLにリダイレクト ↑ ①RSSフィードには、 cache.rebuild.fm のURLが載っている ↑ ②実際の音声ファイルはリダイレクト後にCDNからDL
ロギングの実装 • フィードには↓のようなURLを記載し、 /audio/d36e49d128/podcast-ep120.mp3 Controller内でロギングとリダイレクトを行った ← rails_storage_proxy_url(ar_instance.attribute) すると、
Railsが裏側でS3等からファイルをDLし、 クライアントにファイルを送信(プロキシ)してくれる ↑ フィード記載のURLへのアクセスはオリジンまで到達し、リダイレクト後のURLはエッジがレスポンスを返す これによって、Rails AppでのロギングとMP3ファイルのキャッシュからの配信を両立する
あとはふつうのRails開発 • Rails謹製のActiveStorageを利用して Episodeモデルにaudio_ fi leをattach • お手軽版S3(?)のLightsailオブジェクトストレージ利用 •
音声DLのログをBigQueryに流したりなどしつつ……
!!!完成!!! • リスナーから見てなにかが変わったわけでは無いが。。。 • Webプレイヤー経由 / RSSフィード経由のDL数をとれたり • User-Agentからみんなの
Podcastアプリを調査 してみたり ←↑ RedashからBigQueryに 繋いでBIしてみた図
!!!完成!!! • 編集→公開も管理画面で完結 • SoundCloudと管理画面を行き来する 不毛な作業から開放🎉 • (音声配信部分だけ)$16 /
月 → $1 / 月に圧縮 • SoundCloud Pro: $16 → Lightsailのオブジェクトストレージ: $1 • 年間$180(2万円ちょい)の費用削減🎉
吉祥寺.pm 28 テーマ「リブート」
リブート的な話 • 2021年: Podcastのサポータープログラムの収益で (ありがたいことに)収支がトントンに。 • 2022年: 脱SoundCloud(DONE)や脱Heroku(WIP)を
やって、経費を圧縮する予定。 • 利益(?)をゲスト様のマイク代にしたり、 機材アップグレードにまわしたり、 よりおもしろいことに投資したり • 2022年5月からPodcastも4年目になるので、 ここらでリブートしていきたい💪 www.patreon.com/bePatron?u=12932782
おもしろいことの例 • もっとゲスト回 / 企画回増やす • 突然YouTuberデビューする • BigQueryに突っ込んだ再生ログを使ってなにかする •
エピソードの自動文字起こしを使ってなにかする • ……アイデア募集! ← Googleの自動文字起こしAPIで生成した 文字起こしの検索(そのうち公開予定)
まとめ • Podcast配信システムを自作すると捗る • 費用圧縮 • ログ取って遊べる • 自由度高い •
大容量ファイルへのアクセスをキャッシュ効かせつつ ロギングしたいときは、ロギング用URLからキャッシュの 効いたURLにリダイレクトすると良い • 配信を 自分でやると 捗るよ(575)