Slide 1

Slide 1 text

桐生あんず / id: kiryuanzu 
 「1ヶ月でWebサービスを作る会」 で出会った rails new そして 今に至る rails new

Slide 2

Slide 2 text

こんにちは

Slide 3

Slide 3 text

● 桐生あんず / kiryuanzu(@anzu_mmm) 
 ● Classi株式会社のエンジニア 
 ● 神奈川の南側の地域rb「三浦半島.rb」を やってます 
 ● 趣味はポッドキャストと同人誌制作 
 自己紹介

Slide 4

Slide 4 text

Classiのメンバーも参加しています kozy4324 akinko1918 nekobitsdreams nkc_yuppy r_tommy1038 1momor1

Slide 5

Slide 5 text

三浦半島.rb (発足の「機運」を作ってくださった 東京Ruby会議12実行委員のみなさん ありがとうございます !!)

Slide 6

Slide 6 text

桐生あんず / id: kiryuanzu 
 「1ヶ月でWebサービスを作る会」 で出会った rails new そして 今に至る rails new

Slide 7

Slide 7 text

このトークで話すこと ● 生活の一部で rails new したくなった人間の体 験談 ● 自作のWebサービスを開発する上で「どうしたら ローンチまで辿り着けるのか 」の深掘り

Slide 8

Slide 8 text

このトークのねらい ● 「やるぞ!!」 という気持ちを(特に以下の方々 に)持ち帰ってもらう ○ サービスをこれから作る/作っていて、ローンチ を目指している人 ○ 久々に個人開発したいけれど、作る勢いがま だつかない人

Slide 9

Slide 9 text

導入

Slide 10

Slide 10 text

1ヶ月でWebサービスを作る勉強会

Slide 11

Slide 11 text

学生時代に参加した 初めての勉強会

Slide 12

Slide 12 text

RailsGirls Kyoto 7th の存在を 教えてもらった (Rubyコミュニティを初 めて知る)

Slide 13

Slide 13 text

上記を経て 個人サービス開発が趣味となって エンジニアのキャリアにたどり着いた

Slide 14

Slide 14 text

しかしここ数年の様子 ● あまり個人開発に触れない日々 ● 学生当時より技術知識は増えたはずなのに 中々ローンチまで辿り着かない

Slide 15

Slide 15 text

一念発起

Slide 16

Slide 16 text

やはり手持ちのサービスがほしい !

Slide 17

Slide 17 text

趣味のポッドキャストをテーマに個 人サービスを作ってみることにした

Slide 18

Slide 18 text

ポッドキャストとは 出典リンク : https://ja.wikipedia.org/wiki/ポッドキャスト

Slide 19

Slide 19 text

大まかにいえばネットラジオです

Slide 20

Slide 20 text

> Webサーバ上にマルチメディア・データファ イル(音声データ・動画データなど )をアップ ロードし、RSSを通してWWW上に公開する ことである

Slide 21

Slide 21 text

RSS(Rich Site Summary) ● ニュースやブログなどウェブサイトの更新情報 を配信するための文書フォーマットの総称 (XML形式で記述) ○ RSSフィードとも呼ばれる ○ ポッドキャストの主な規格はRSS 2.0 ○ RSSリーダーを使って対象サイトの更新情報 をチェックすることができる ○

Slide 22

Slide 22 text

(衰退の一途という説もあるけれど ……?)

Slide 23

Slide 23 text

ポッドキャストを複数プラットフォーム で配信したい時に便利 ● Spotify ● Apple Podcast ● YouTube Music ● etc… Amazon Music のポッドキャスト追加管理画面

Slide 24

Slide 24 text

ポッドキャスト界隈ではまだまだ使 われている

Slide 25

Slide 25 text

ポッドキャストの RSSフィードの主な 構成情報 ● ポッドキャストについての説明 ● 各エピソードの詳細情報 ○ カバー画像、説明、更新日時 ● 各エピソードの音声データ ● 一意で識別するためのuid

Slide 26

Slide 26 text

これ、自分でも作れるかも? テキストと音声ファイルのデータを登録し、RSS フィードの形式で出力できたらOK

Slide 27

Slide 27 text

自前で作る意味とは? Spotify等のプラットフォーム上でRSSフィードは発 行可能

Slide 28

Slide 28 text

そこにロマンを感じたので

Slide 29

Slide 29 text

先駆者たちの存在 Kaigi on Rails 2023 / mktakuyaさん(ゆるふわポッドキャストさん )の発表

Slide 30

Slide 30 text

Rails製の事例が複数ある yaslab さんのブログ

Slide 31

Slide 31 text

ゴール決定 ● ポッドキャストの RSSフィード発行 APIを 作る ● まずはこれだけを見据えてやってみる

Slide 32

Slide 32 text

やっていく

Slide 33

Slide 33 text

まずはやること整理から

Slide 34

Slide 34 text

Chat GPT を 補助線の役割 として使う

Slide 35

Slide 35 text

その上で自分でまとめる

Slide 36

Slide 36 text

最低限の機能をおさえる 1. 管理者用のユーザーを作成・認証画面でログイン ○ ユーザー情報はコンソールで作成 (他ユーザー作る機会なさそうと判断 ) 2. 管理画面でポッドキャストのエピソードを投稿 3. 管理画面でポッドキャストのエピソード一覧・編集画面 を表示 4. エピソード情報をRSSフィードで発行

Slide 37

Slide 37 text

最終的なroutes.rbはこんな感じ

Slide 38

Slide 38 text

主に必要だったところ

Slide 39

Slide 39 text

音声・画像ファイルを保存 →配信 ● ActiveStorageで音声ファイル・エピソードのカバー画像をS3(ク ラウドストレージ )にアップロードする ● S3で管理する画像・音声ファイルは CloudFront でCDN配信 Active Storage S3のファイルを CloudFront でCDN 配信 Amazon S3 Amazon CloudFront ActiveStorage で S3にアップロード

Slide 40

Slide 40 text

RSSフィードを発行 respond_to で format.rss を指定 コントローラー(Episode::RssController)内の定義は以下のみ

Slide 41

Slide 41 text

Builder テンプレートを使う Railsガイド Action View の概要より参照 フィード用のXMLを組み立てていく / 記述量は100行いかないくらい

Slide 42

Slide 42 text

インフラのはなし

Slide 43

Slide 43 text

VPS(Amazon Lightsail)を選択

Slide 44

Slide 44 text

判断基準: できるだけ AWS のサービスに 寄せるかとなった ● PaaS (Heroku や render.com、Fly.io 等)の選択肢も浮 かんではいた ● オブジェクトストレージ、CDN、ドメイン全てAWSだなあ となったので ● 業務でAWS が一番身近だったのでできるだけ AWS に 寄せることにした

Slide 45

Slide 45 text

せっかくなので Rails8のデフォルトに 乗っかってみる

Slide 46

Slide 46 text

Kamal2 ● config/deploy.yml で以下のセットアップをしたら  kamal deploy一発でデプロイできる、便利 ○ ssh接続・パブリックIP・ホストの指定 ○ Docker Hub の認証情報・サービスのシークレットの設定 ● VPSと相性はよさそう

Slide 47

Slide 47 text

SQLite を本番DBに使う ● デフォルト設定そのままで使っている ● Rails8 で大幅強化という話もあるが、自サービスではあまり検 証できていないのが実情 ○ 今回のサービスでは同時書き込みが発生するタイミングが ないというのもある ● DBサーバを別で用意しなくて良いのはうれしい ○ VPSのコストだけを気にしたら良いので

Slide 48

Slide 48 text

(結果的に) あまり手間なく本番環境の構築・デ プロイができた

Slide 49

Slide 49 text

あとは RSSフィードの精度を 上げていくのみ ● Spotify で作った元のフィードと比較していく ● Chat GPT にも比較をお願いしたけど割と漏れがあった

Slide 50

Slide 50 text

Cast Feed Validator という 検証サイトにお世話になった

Slide 51

Slide 51 text

指摘された箇所を修正していく

Slide 52

Slide 52 text

全部通った 👏

Slide 53

Slide 53 text

Spotify に自作の RSSフィードの リンクを設定

Slide 54

Slide 54 text

(デモ)Spotify で再生

Slide 55

Slide 55 text

ローンチできた 🎉

Slide 56

Slide 56 text

どうしたらサービスをローンチまで 持っていけるか

Slide 57

Slide 57 text

1. 小さく作って出す ● まずはRSSフィードの発行 を目標とした ● その上で最低限必要な機能を確認し実装 ○ 3週間かけて運用開始まで到達

Slide 58

Slide 58 text

2. 様子を実況する プロポーザル提出後にまだ半分もサービスができてなかった時のツイート

Slide 59

Slide 59 text

3. 自分が最初のユーザーであること ● 自分がまず「あったらいいな」と思えるサービス ● ポッドキャストを週1くらいで更新するのでその度に使う ことになる

Slide 60

Slide 60 text

この3つの行動を意識していた

Slide 61

Slide 61 text

思い返すと昔作ったサービスも この条件を満たしていた

Slide 62

Slide 62 text

一例: 布教箱 布教してほしいお題を投稿してみ んなで布教するサービス

Slide 63

Slide 63 text

我ながら良い発想だな〜と思う ……

Slide 64

Slide 64 text

だがしかし

Slide 65

Slide 65 text

続いていないのである

Slide 66

Slide 66 text

サービスを続けるのって難しい

Slide 67

Slide 67 text

なぜ?

Slide 68

Slide 68 text

金 ● インフラ費用が気を抜くと3000円前後ぐらいになってい た ○ 構成をがんばって ALB でリクエストをさばくとかやっ ていた ● 使わないまま数千円を払うのはちょっと気持ちとして辛 い

Slide 69

Slide 69 text

ユーザー不在 ● 使われるタイミングがないと続ける意思が消えていく ● ある程度の「承認」がないとモチベが続かない……

Slide 70

Slide 70 text

外部要因 ● デプロイ先のプラットフォーム・外部APIの仕様変更 ● 例: Heroku の有料化、 Twitter API の仕様変更 ○ モチベーションがあれば代替できていたかもだが、そこ までには至れず

Slide 71

Slide 71 text

上記を意識しつつ運用継続中 ● ポッドキャストを定期的にアップロードするために 必要不可欠なツール ● Amazon Lightsail は月額固定制 ○ 3ヶ月無料/月1000円以下のプラン ● いろいろ追加したくなるが、最低限の機能を動かし続けるこ とを実践

Slide 72

Slide 72 text

まずは無理しないレベルで 続けてみる

Slide 73

Slide 73 text

再考「どうしたら個人サービスを ローンチまで辿り着けるのか」

Slide 74

Slide 74 text

まずは「作ろう」までに至る機運 好きなこと・趣味をたくさん持つこと ● 身の回りの習慣やコミュニティのための「道具」を自作する ● 作ろうと思うきっかけがないと意外と始まらない ポッドキャスト活動がまさにそれだった (やんちゃクラブ Advent Calender 2024 ってやつに感謝だ)

Slide 75

Slide 75 text

それでもまだ至れなかったら?

Slide 76

Slide 76 text

コミュニティで他の人の勢いを知る Kaigi on Rails 2024 での kotatsu さん・asonasさんの発表

Slide 77

Slide 77 text

「自分のサービス、やっぱり欲しい ……!」

Slide 78

Slide 78 text

そして今に至る rails new

Slide 79

Slide 79 text

再掲: このトークのねらい ● 「やるぞ!!」 という気持ちを(特に以下の方々 に)持ち帰ってもらう ○ サービスをこれから作る/作っていて、ローンチ を目指している人 ○ 久々に個人開発したいけれど、作る勢いがま だつかない人

Slide 80

Slide 80 text

(ポッドキャストでの )いつもの言葉

Slide 81

Slide 81 text

もし面白いと思ったら、 チャンネル登録・高評価 よろしくお願いします

Slide 82

Slide 82 text

ありがとうございました