Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

• mktakuya • 向平 卓矢 / むこうひら たくや • 北海道の高専出身 • 都内のIT企業でエンジニア • Ruby on RailsとPodcastがすき • ゆるふわPodcastのホスト 自己紹介

Slide 3

Slide 3 text

Podcastについて

Slide 4

Slide 4 text

Podcastについて Webで音声を配信するやつ。オンデマンド形式。 → 好きなアプリを利用して、好きなタイミングで聴くことが出来る。 日本のエンジニア界隈でもまれによく流行する。 → 老舗はRebuildやbackspace.fmなど。   その他個人Podcastや最近では企業が採用目的でやってたりも。 誰でもかんたんに配信することが出来る。 → Spotify for Podcastersなど各種プラットフォームでかんたんに配信可能!

Slide 5

Slide 5 text

自分もPodcastをやってみた 2019年、学生時代の友人とゆるふわPodcastを開始! 内容はエンジニア3人の雑談。 2023-10-28時点で216エピソード配信中! 2020年からの約3年半、毎週配信達成中! Podcastのロゴは KoRロゴ作者の杉江さん作! →

Slide 6

Slide 6 text

なぜ、続けられているか? まれによく流行り始める人が増えるものの、続いてるものは少ない。 なぜ、続けられているか? Podcastという趣味・サイドプロジェクト 管理画面やWebサイト、音声配信といった道具をつくること 両方をバランス良く楽しめていることが、 楽しみながら続けられている理由と思っている。

Slide 7

Slide 7 text

Podcastのもろもろ、自作してます ゆるふわPodcastは、Railsで動いています。 WebサイトやRSSフィードの配信、音声コンテンツの配信など、 すべてRailsを利用して構築してきました! 既存のプラットフォームを利用せず自作したのは、 つくる過程で技術的成長を得るため。 つくることを楽しむため。

Slide 8

Slide 8 text

Podcast配信の変遷 v0.1(2019〜): Jekyll + GitHub Pages / SoundCloud v1.0(2020〜): Rails + SoundCloud v2.0(2022〜): Railsで音声配信含め完全自作 v3.0(2023〜): Rails + ART19並行運用

Slide 9

Slide 9 text

Jekyll + GitHub Pages / SoundCloudで構築 Jekyll + GitHub Pages / SoundCloudで構築! → Webサイト・RSSフィードをJekyll + GH Pagesで。   音声管理・配信・計測をSoundCloudで。   Jekyll + GitHub Pagesで配信は、当時の流行。 Jekyll: Ruby製の静的サイトジェネレータ → 簡単にWebサイトをつくれるやつ。   GitHub Pagesとの相性◎

Slide 10

Slide 10 text

Podcast配信の流れ(Jekyll + GH Pages時代) 1.収録 2.編集 3.SoundCloudに音声をアップロードして公開予約 4.Markdownでエピソードページ作成 5.エピソードページを公開

Slide 11

Slide 11 text

Podcast配信の流れ(Jekyll + GH Pages時代) 1.収録 2.編集 3.SoundCloudに音声をアップロードして公開予約 4.Markdownでエピソードページ作成 5.エピソードページを公開  SoundCloudで音声が公開される  タイミングに合わせてgit push

Slide 12

Slide 12 text

Podcast配信の流れ(Jekyll + GH Pages時代) 1.収録 2.編集 3.SoundCloudに音声をアップロードして公開予約 4.Markdownでエピソードページ作成 5.エピソードページを公開  SoundCloudで音声が公開される  タイミングに合わせてgit push >めんどくさい<

Slide 13

Slide 13 text

1年ほど、Jekyll + GH Pages時代を過ごす 2019年5月にはじめてから約1年ほど、Jekyll + GH Pagesで運用。 2020年春、コロナでリモートワーク + 1周年のタイミングで、 隔週だった更新頻度を毎週に。 → Jekyll + GH Pages運用のめんどくささが毎週のものに……。

Slide 14

Slide 14 text

好きに触れて運用出来るRails Appを持ちたい Podcast開始と同タイミングで社会人に。 WebエンジニアとしてRailsを書いて過ごす中で、 「好きに触れて運用出来るRails Appを持ちたい」と思っていた。 → 仕事で使う技術や個人で気になった技術を試す砂場がほしい → 日々Rails Appを運用していく中での知見を身に着けたい

Slide 15

Slide 15 text

Rails化の機運

Slide 16

Slide 16 text

v1.0: まずは小さくはじめる WebサイトとRSSフィード配信、コンテンツ管理画面だけRails化。 音声ファイル管理・配信はSoundCloudのまま。 Webサイト → SoundCloudの埋め込みプレーヤー RSSフィード → MP3の直リンク

Slide 17

Slide 17 text

Podcast配信の流れ(Jekyll + GH Pages時代) 1.収録 2.編集 3.SoundCloudに音声をアップロードして公開予約 4.Markdownで記事ページ作成 5.エピソードページを公開

Slide 18

Slide 18 text

Podcast配信の流れ(v1.0時代) 1.収録 2.編集 3.SoundCloudに音声をアップロードして公開予約 4.管理画面でエピソードページを作成して公開予約 4.Markdownで記事ページ作成 5.エピソードページを公開

Slide 19

Slide 19 text

Podcast配信の流れ(v1.0時代) 1.収録 2.編集 3.SoundCloudに音声をアップロードして公開予約 4.管理画面でエピソードページを作成して公開予約 公開タイミング 手動調整を廃止!

Slide 20

Slide 20 text

好きに触れて運用出来るRails AppをGET! めんどくさかった配信作業を少しラクに! 毎週配信をはじめたタイミングだったので、省力化の効果大! なによりも、 念願の「好きに触れて運用出来るRails App」を手に入れた🎉

Slide 21

Slide 21 text

好きに触れて運用出来るRails Appの効能 つくって動かして終わりではなく、動かし続ける中での知見を得られる。 自分がユーザーとして使う中で気づいた不満を、開発者として改善出来る → 最強のドッグフーディング 動かしていくための知見を体感しながら学ぶことが出来る → ログ管理、エラー監視、パフォーマンス改善、Railsアップグレードなど

Slide 22

Slide 22 text

Podcast配信の流れ(v1.0時代) 1.収録 2.編集 3.SoundCloudに音声をアップロードして公開予約 4.管理画面でエピソードページを作成して公開予約

Slide 23

Slide 23 text

Podcast配信の流れ(v1.0時代) 1.収録 2.編集 3.SoundCloudに音声をアップロードして公開予約 4.管理画面でエピソードページを作成して公開予約 2画面行き来が めんどくさい

Slide 24

Slide 24 text

Podcastの分析 音声配信はSoundCloudに任せていた。 → 主要データはすべてSoundCloudが握っていた。 自分のコンテンツのログを保持できない不満、 SoundCloudの分析画面への不満 → タイムゾーンがUTC、分析軸が大雑把、   どのアプリから聞かれたのかわからない、   etc...

Slide 25

Slide 25 text

Podcastの分析 音声配信はSoundCloudに任せていた。 → 主要データはすべてSoundCloudが握っていた。 自分のコンテンツのログを保持できない不満、 SoundCloudの分析画面への不満 → タイムゾーンがUTC、分析軸が大雑把、   どのアプリから聞かれたのかわからない、   etc... もっといろいろ データ集めて 分析したい

Slide 26

Slide 26 text

前提:Podcastの配信について Podcastは、オープンな規格。 Web上にMP3とRSSフィードを置くだけで成り立つ。 配信者は好きな場所でホスティングして、 リスナーは好きなアプリで聴く。自由でオープンなもの。 https://yuru28.com/

Slide 27

Slide 27 text

オープンな規格であれば 自作できる

Slide 28

Slide 28 text

自作の音声管理・配信、ついでにロギング 音声ファイルの管理や配信には、Active Storageを利用。 → 触ってみたかったActive Storageの素振りも兼ねて RSSフィードにロギング用URL(Rails App向き)を記載。 ロギング後、キャッシュの効いたURL(CDN向き)へリダイレクト。 → SoundCloudでは取りきれなかったログを取得!  Podcast配信システムを自作したら捗った話  https://speakerdeck.com/mktakuya/kichijojipm-28

Slide 29

Slide 29 text

Podcast配信の流れ(v1.0時代) 1.収録 2.編集 3.SoundCloudに音声をアップロードして公開予約 4.管理画面でエピソードページを作成して公開予約

Slide 30

Slide 30 text

Podcast配信の流れ(v2.0時代) 1.収録 2.編集 3.管理画面で音声とメタデータを設定して公開予約 3.SoundCloudに音声をアップロードして公開予約 4.管理画面でエピソードページを作成して公開予約

Slide 31

Slide 31 text

Podcast配信の流れ(v2.0時代) 1.収録 2.編集 3.管理画面で音声とメタデータを設定して公開予約 自作のシステムですべてが完結!

Slide 32

Slide 32 text

視聴状況の分析も 音声配信を自作したため、ログもしっかり取れるように。 → ログをBigQueryに流し、BIツール(Redash)で分析して遊んだりも。 ← 利用アプリの割合       日次 DL数   (Web/App区別)→

Slide 33

Slide 33 text

そして、v3.0へ…… 縁あって、 Podcastの音声広告ネットワークに加入。 ART19(別の音声配信SaaS)を利用することに。 Rails AppとART19をAPI連携・並行稼働中……。  Podcastの音声配信部分を自前のものから別の配信サービスへ移行した  https://blog.m6a.jp/entry/2023/07/18/193000

Slide 34

Slide 34 text

好きに触れて運用出来るRails Appを持って 2020年4月に最初のcommitを積んでから、 3年半ずっと使い続け、メンテナンス・機能追加し続けてきた。 Podcastというサイドプロジェクトと、 その道具の自作・改善というループをずっとまわしてきた。 → 楽しみながら技術的成長を得ることが出来た。

Slide 35

Slide 35 text

昔話

Slide 36

Slide 36 text

学生時代 (〜2018)

Slide 37

Slide 37 text

業務(授業)外でも アウトプットしたい

Slide 38

Slide 38 text

いろいろ つくってた

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

だけど続かない

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 text

ものをつくってはいたけれど…… つくって動かして満足してしまい、動かし続けられたことがない……。 → ものをつくる・成長する が目的だからダメってわけじゃない。   けど、動かし続けることで得られる楽しみ・学びだってあるはず。 自分が使いたいものなら、動かし改善し続けられるのでは? → そもそも自分が使いたいものって、結構既に世の中にありません?   わざわざ自作してまで使いたいものって、なんだろう……。

Slide 44

Slide 44 text

業務(授業)外でもコードを 書きたいけどつくりたいものがない という悩み

Slide 45

Slide 45 text

No content

Slide 46

Slide 46 text

自分の道具を自作してつくる喜びを体感する 趣味やサイドプロジェクトとかけ合わせてのものづくりで、 ドッグフーディングしながら開発するループをつくることができた。 自身が最大のユーザーとして ドッグフーディング 自身が唯一の開発者として 少しずつ改善

Slide 47

Slide 47 text

No content

Slide 48

Slide 48 text

なぜRailsか

Slide 49

Slide 49 text

サイドプロジェクト✕ものづくり ここまで、 趣味やサイドプロジェクト✕ものづくりの有用性をお話してきた。 あくまで趣味・サイドプロジェクト。 もちろん、本業は別にあるので使える時間は限られている。 また、基本的に開発者は自分ひとりだけ。 そんなサイドプロジェクト✕ものづくりこそ、 Railsがもたらす高い生産性がピッタリ。

Slide 50

Slide 50 text

Podcast配信の変遷 v0.1(2019〜): Jekyll + GitHub Pages / SoundCloud v1.0(2020〜): Rails + SoundCloud v2.0(2022〜): Railsで音声配信含め完全自作 v3.0(2023〜): Rails + ART19並行運用

Slide 51

Slide 51 text

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デプロイまで爆速。

Slide 52

Slide 52 text

Podcast配信の変遷 v0.1(2019〜): Jekyll + GitHub Pages / SoundCloud v1.0(2020〜): Rails + SoundCloud v2.0(2022〜): Railsで音声配信含め完全自作 v3.0(2023〜): Rails + ART19並行運用 単なるテキストを扱うサイトから 音声ファイルを扱うサイトへ進化。 Active Storage導入で高速実装。

Slide 53

Slide 53 text

Railsのエコシステムに乗って低コストな開発 ちょっとしたデータ取り込みタスクを実行したい! → Rakeタスクつくってサクッと実行。テストもかんたんに書ける。 告知ツイートが面倒だから投稿日の19時に自動ツイートしたい! → Active Job使ってジョブ作成、日時指定実行もおまかせ! ファンクラブ会員限定コンテンツやりたい!まずはユーザー認証から! → deviseやomniauthでサクッと認証周り構築!

Slide 54

Slide 54 text

一人開発者の味方: Ruby on Rails とりあえずrails newしてデプロイすれば動く。 日常のちょっとしたスクリプトの実行から、 次のステップへの進化まで、Rails標準機能でカバー! 用途に合わせていくつかの著名なgemを利用すれば、 よくある機能を最速でつくれる

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

生みの親 DHHが語る Railsが大規模開発に強い理由 - Forkwell Press https://pr.forkwell.com/articles/dhh-rails-large-scale-development/

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

The One Person Frameworkの思想 「一人の開発者のためのフレームワーク」 「大企業ではなく、次のスタートアップのため」 と作者が宣言しているRailsは、 まさにサイドプロジェクト✕ものづくりのツールとしてピッタリ。 rails newから3年半、 サイドプロジェクトもものづくりも両方楽しんで続けられたのは、 Railsの思想あってこそ。

Slide 59

Slide 59 text

No content

Slide 60

Slide 60 text

まとめ サイドプロジェクトで使う道具を自分でつくり改善することを通じて、 楽しみながら技術的な成長とつくる喜びを得られた。 使える時間が限られている趣味やサイドプロジェクトと かけ合わせてのものづくりにこそ、 Ruby on Railsとそのエコシステムがもたらす高い生産性がピッタリ。

Slide 61

Slide 61 text

おわりに みなさんが、「自分もRailsでなにか作ってみよう!」と思い、 つくる喜びを体感する一歩を踏み出していただければ幸いです。

Slide 62

Slide 62 text

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