Slide 1

Slide 1 text

推し活としての`rails new .` Kaigi on Rails 2024 sakahukamaki / kotatsu

Slide 2

Slide 2 text

自己紹介  ● 家に猫が三匹いる ● Rails10年生 ● 同人誌を書くタイプのオタク

Slide 3

Slide 3 text

このトークで持って帰れるもの ● オタクへの何らかの気持ち ● 知らない世界の断片 ● 軽率なオタクという存在の知見

Slide 4

Slide 4 text

今日話すこと、話さないこと ● 話す ○ オタクが何をしたか ○ 頑張らない開発体制 ● 話さない ○ rails new . 以上のRailsのはなし

Slide 5

Slide 5 text

前提知識

Slide 6

Slide 6 text

推し活とは ● 家に猫が三匹いる ● Rails10年生 ● 同人誌を書くタイプのオタク https://kotobank.jp/word/推し活

Slide 7

Slide 7 text

今日の推し 魔界の一般人 シャレトン https://youtube.com/@shareton_sha

Slide 8

Slide 8 text

活動スタイル ● いわゆる動画勢 ● 匿名のお手紙とのコミュニケーション(大喜利) ● オリジナルショートドラマ

Slide 9

Slide 9 text

普段の姿 なかみ https://x.com/sharepos_ hokori/status/15775943 35524450304

Slide 10

Slide 10 text

野球の話とか https://x.com/sharepos_ hokori/status/14033204 18723762179

Slide 11

Slide 11 text

週末は競馬予想 なかみ https://x.com/sharepos_ hokori/status/16398708 76253585408

Slide 12

Slide 12 text

恋愛や人生相談もある なかみ https://x.com/sharepos_ hokori/status/12917378 73180315648

Slide 13

Slide 13 text

その他の活動軸 ● オリジナルショートドラマ 通称:本編 ● 企画から発生した架空のVTuberの設定を追加募 集し、エイプリルフールには「存在するVTuber として活動する姿」も披露

Slide 14

Slide 14 text

オタクと距離が近い ● オタクの発案が取り込まれる ● 人生相談が拾われたりする

Slide 15

Slide 15 text

オタクと距離が近い ● オタクの発案が取り込まれる ● 人生相談が拾われたりする うれしい

Slide 16

Slide 16 text

きょりちか 匿名だからこそ成り立つ大喜利、コミュニケーション マシュマロで行われていた

Slide 17

Slide 17 text

サービス Ruby on Railsと Pythonで出来た Webサービス https://marshmallow-qa.com

Slide 18

Slide 18 text

マシュマロ #とは ● 匿名のメッセージ ● 受け手に優しい機能 ○ 攻撃的なメッセージを弾く ○ よくない言葉を伏字にしてくれる ○ Pythonの実装はこのへん ● 推しのコンテンツに深く関わるサービス

Slide 19

Slide 19 text

事件 ある日マシュマロに事件

Slide 20

Slide 20 text

事件 ある日マシュマロに事件 マシュマロ: 認証ユーザを優遇します ログイン必須にします

Slide 21

Slide 21 text

こまる… 匿名だけど不平等になった https://x.com/sharepos_hokori/status/1664066921707499520

Slide 22

Slide 22 text

困るね…… オタク間に差があると悲しいのは推しも同じ https://x.com/sharepos_ hokori/status/16641188 07580012549

Slide 23

Slide 23 text

マシュマロでは要件を満たせなくなった https://x.com/sharepos _hokori/status/166425 5928831729664 引越先探しの旅へ

Slide 24

Slide 24 text

一長一短 ほめて箱 × 伏せ字オープン https://x.com/sharepos _hokori/status/166428 1621493878837

Slide 25

Slide 25 text

一長一短 お題箱 × 画像化 https://x.com/sharepos_hokori/status/1664246739979882497

Slide 26

Slide 26 text

一長一短 wavebox × 画像化 https://x.com/sharepos_ hokori/status/16648190 30308577280

Slide 27

Slide 27 text

一長一短 質問箱 × 広告デカすぎ × 無差別お手紙が 届く https://x.com/sharepos_hokori/status/1664194206745899009

Slide 28

Slide 28 text

一長一短 Google Form × 画像化 × 利便性 https://x.com/sharepos_hokori/status/1664256673652035584

Slide 29

Slide 29 text

一長一短 Zabuu × 長文 × 安定性 https://x.com/sharepos_ hokori/status/16644769 73836668929

Slide 30

Slide 30 text

推し、落ち着かない ● 長文が届く ● ワンクリックで画像にしたい ● 攻撃的な手紙は弾きたい 上記の要件にフィットするサービスがない

Slide 31

Slide 31 text

大変そう 推しが大変そうだとオタクはつらい

Slide 32

Slide 32 text

青天の霹靂 https://x.com/sharepos_hokori/status/1665196149136056320

Slide 33

Slide 33 text

エンジニアワイ、気付く ワイ、つくれるじゃん

Slide 34

Slide 34 text

そう、Ruby on Railsならね ● 必要な機能はお手紙を送るだけ ● 長文はDBでどうとでも ● 画像出力もなんとでもなるやろ

Slide 35

Slide 35 text

聞いてみよ 「作っていい?」 「作るって何?」 「じゃあ作るね」 「作るって何??」 https://x.com/sharepos_ hokori/status/16655755 20510287873

Slide 36

Slide 36 text

方針が決まった ● あとはやるだけ ● 仕事の合間にさっさと実装

Slide 37

Slide 37 text

作るぞ

Slide 38

Slide 38 text

git init ●

Slide 39

Slide 39 text

タイトル回収 ●

Slide 40

Slide 40 text

そうして出来上がったのがこれ

Slide 41

Slide 41 text

とても平成 ● 最低限の機能だけ

Slide 42

Slide 42 text

こころいき ● 最低限の機能だけ ● 出来ない事にこだわるとぽしゃる ● とにかく出す

Slide 43

Slide 43 text

何はともあれリリース 👏

Slide 44

Slide 44 text

具体的に何したの

Slide 45

Slide 45 text

時系列 ● 2023/6/5 `git init`, `rals new .` ● 2023/6/6 開発環境整備(Docker回り) ● 2023/6/8 Letterモデル爆誕 ● 2023/6/9 管理画面、ロゴ爆誕 ● 2023/6/10 お手紙の画像化を実装して本番投下

Slide 46

Slide 46 text

はやさ ● 構想からリリースまで5日 ● Ruby on Railsはすごい

Slide 47

Slide 47 text

作ったもの ● LettersController ○ new, create ● Admin::LettersController ○ index, show

Slide 48

Slide 48 text

作らなかったもの ● ユーザー管理

Slide 49

Slide 49 text

ユーザー管理を作らない ● どうせ管理画面を見るのは推しだけ ● 推し1人のためにUserモデル/テーブルを設計 ○ オタク全員がアカウントを作るとかもある?

Slide 50

Slide 50 text

ユーザー管理を作らない? ● どうせ管理画面を見るのは推しだけ ● 推し1人のためにUserモデル/テーブルを設計 ○ オタク全員がアカウントを作るとかもある? ○ 様々な要件を考えるのだるい

Slide 51

Slide 51 text

推しのログインはざっくりと ● BASIC認証でエイってやってバーン ● authenticate_or_request_with_http_basic ○ usernameとpasswordは環境変数に埋めた

Slide 52

Slide 52 text

これも作らなかった ● マシュマロにある伏字機能 ○ 「下ネタの為に課金したいわけじゃない」とい う発言から不要と判断

Slide 53

Slide 53 text

なかまあつめ

Slide 54

Slide 54 text

あの画面をもう一度

Slide 55

Slide 55 text

見た目、平成すぎ…? ● 幸いなことに ● オタクが なかまに なりたそうに  こちらを うかがっている ○ 気がした

Slide 56

Slide 56 text

ツイートしてみた ● デザインもお絵かきもできん!

Slide 57

Slide 57 text

🐟🐟🐟 ● オタク釣れた ● やっぱり居る https://x.com/sharepos_hokori/status/1666773616602787846

Slide 58

Slide 58 text

どう集めるか ● 求人を出す ● 「こちら側」の人間をあぶり出す ● やる気のある人間を引っかける

Slide 59

Slide 59 text

どこに集めるか ● 元々Discordに推しのファン鯖 (オタクの集まり)があった ● 同じプラットフォームを使う形でひとあつめ

Slide 60

Slide 60 text

求人掲載 ● 探してみた ● ページのヘッダでひとさがし Ruby、Rails、Docker、Git、HTML、CSS、UIデザイン、アイコン制 作、その他もろもろ心当たりある人は@shareton_postに連絡くださ い。

Slide 61

Slide 61 text

炙り出し <●><●> <●><●> <●><●> こっちを見たな?  <●><●> <●><●> <●><●> 待ってたよ! 【流出するな】開発鯖のリンク: https://xxxxxxxxxxxx【お前ら外秘】

Slide 62

Slide 62 text

紹介、突撃 ● 推し経由で紹介されたユーザーにDM ● 運営アカウントにDMしてきたユーザーを招待

Slide 63

Slide 63 text

ロゴもでてきた ● とにかく手が早い ● オタクすごい

Slide 64

Slide 64 text

OGPも出てきた ● アイデアと仕上げは別人(感謝)

Slide 65

Slide 65 text

ひとあつめできた ● 仕様の相談が出来る ● なんかラフが飛んでくる ● なんか実装が飛んでくる ● めっちゃほめてくれる

Slide 66

Slide 66 text

いまの開発鯖 ● 絶対に返事してくれる人誰かひとり ● 基本的に3人以上の反応がある ● 来るもの拒まず去るもの気づかず

Slide 67

Slide 67 text

ひと あつまる すごい 👏

Slide 68

Slide 68 text

Ruby on Railsってすごい ● 何も考えずにサービスが作れた ● リリースまでの障壁がない ○ SaaSがあってうれしい ■ さっくりデプロイ

Slide 69

Slide 69 text

爆速リリースを支えたSaaS ● ユーザー管理を頑張らない人間は インフラを頑張る気がない ● 思い出したのは古のRuby PaaS「MOGOK」 ○ https://www.iij.ad.jp/dev/tech/activities/mogok/ ○ MOGOKは、もう……

Slide 70

Slide 70 text

Heroku VS ● よくある選択肢はHeroku ● 強く選ぶ理由もなければ強く選ばない理由もない ○ Rails Girlsとかコミュニティ活動なら選ぶ

Slide 71

Slide 71 text

国産でRailsが動くと嬉しい ● 探してみたらあった ● ロリポップ!マネージドクラウド by GMOペパボ ○ https://mc.lolipop.jp/ ● サポートも日本語だし心強い ● 英語頑張らなくてよい ○ とにかく運用で頑張りたくない

Slide 72

Slide 72 text

頑張らないインフラ 完成 ● ロリポップ!マネージドクラウドのDBがMySQL ● Gemfileに `gem "mysql2", "~> 0.5"`と追記 ● ~完~

Slide 73

Slide 73 text

インフラ やらないこと ● 監視 ● バックアップ

Slide 74

Slide 74 text

インフラ やらないこと ● 監視  ⇒なんかあったらDMをくれ ● バックアップ  ⇒サービス移行もお祭りにしたオタクなら   DBがぶっ飛んでも祭りになる説   あると思います ■ (規約にも「祈れ」って書いてる)

Slide 75

Slide 75 text

維持費 ● オタク金払いがち ● 自費 ● 実際各種サブスクとそう変わらん値段 ○ 1400円くらい/月 ● (同人誌より安い)

Slide 76

Slide 76 text

無事運用開始 ● 推し、オタクの様々な方向から要望が発生する

Slide 77

Slide 77 text

推しから要望もろた ● ワンクリックで画像にしたい ● お気に入りほしい ● ブロックしたい

Slide 78

Slide 78 text

推しから要望もろた ● ワンクリックで画像にしたい  ⇒都度ダウンロード→クリップボード ● お気に入りほしい  ⇒is_favorite カラムを追加 ● ブロックしたい  ⇒rackでごにょごにょ

Slide 79

Slide 79 text

開発鯖、すごい アーと思ってた部 分を実装してくれ るひとがいる

Slide 80

Slide 80 text

開発鯖、すごい(2) 概念推しカラーリングのデザインが出てきた 

Slide 81

Slide 81 text

開発鯖で考えた ● 見た目を推しに合わせよう ● コンテンツに合わせたタグを付けよう ⇒作った

Slide 82

Slide 82 text

出てきたバグ ● 改行が反映されない ○ safe_joinのやつじゃん、直します ● 絵文字が投稿できない ○ DBの設定見直してutf8からutf8mb64へ ○ 有識者のDMで「アッDBの設定見てないや」と思 い出せた

Slide 83

Slide 83 text

オタクの要望 ● プレビューしたい ● (推しが見てるらしい)手紙の総数を俺らも見たい  ⇒作った

Slide 84

Slide 84 text

オタクの反応を見た ● バグる→推しに報告する→推しからDMが来る ● 要望がある→推しに連絡する→推しから以下略 ● 推しに迷惑のかかる流れが生まれていた ● (大体オタク隠れるのでエゴサも機能しない)

Slide 85

Slide 85 text

オタク、隠れがち ● 推しとのやりとりも匿名が喜ばれるオタク ● よくよく考えたらオタクが運営アカウントに凸る訳 がない ● 運営宛の手紙も受け取ろう  ⇒目安箱を作る

Slide 86

Slide 86 text

目安箱の通知 ● Feedback#save後にDiscordのincoming webhook を叩く ○

Slide 87

Slide 87 text

オタクの要望 ● 金を払わせろと言われた ○ オタク金払いがち ● OFUSEにて送金受付対応 ○ https://ofuse.me/ ● 匿名で送金されがち ○ (返信したいのでログインして送って欲しい)

Slide 88

Slide 88 text

お金もらったので ● 定期的に収支を公開 ○ 公開する度に何故か残高が増える謎 ■ オタク金払いがち ○ 元気な月だけ公開している ■ 兎にも角にもがんばらない

Slide 89

Slide 89 text

反響

Slide 90

Slide 90 text

朗報、「【朗報】」 ● 推しの喜びは オタクの喜び https://x.com/shareton _sha/status/166745197 4365896705

Slide 91

Slide 91 text

プレゼントにもなった ● 意図せぬプレゼントに https://x.com/sharepos_hokori/status/1667485783467651072

Slide 92

Slide 92 text

「教室の隅で埃食ってた」は内輪ネタ https://x.com/sharepos_hokori/status/1665691932918415360

Slide 93

Slide 93 text

運用体制

Slide 94

Slide 94 text

あるもの ● サービス ● 開発鯖 ● 規約 ● 祈り

Slide 95

Slide 95 text

ないもの ● ドメイン ● 監視・バックアップ ● CI/CD ● テストコード ● やる気

Slide 96

Slide 96 text

とにかくがんばらない ● ゆるくやる ● 息切れしないで運用する ● 終わらせないのが大事

Slide 97

Slide 97 text

ちょっとしたオタクのがんばりで 推しの平穏が保たれた🎉

Slide 98

Slide 98 text

令和ちゃんにキレてるし なかみ https://x.com/sharepos_ hokori/status/18414938 66509467691

Slide 99

Slide 99 text

野球の話もしてるし https://x.com/sharepos_ hokori/status/18369392 51369578676

Slide 100

Slide 100 text

🏇の話もしてる https://x.com/sharepos_ hokori/status/18476620 54758580691

Slide 101

Slide 101 text

今後やりたいこと ● もらったイラストのギャラリーページ ● お手紙の柄を内容に合わせて変更 ○ フッターに馬とか野球とか ● キリ番踏み逃げを許さないイベント

Slide 102

Slide 102 text

やらかした感想

Slide 103

Slide 103 text

エンジニアとしてどう? ● 平日にRailsを書いている知識が役に立って嬉しい

Slide 104

Slide 104 text

オタクとしてどう? ● 平日にRailsを書いている知識が「推しのために」役 に立って嬉しい

Slide 105

Slide 105 text

Railsアプリ ● 日々の仕事より楽なアプリだし、簡単に作って雑に メンテできててよい ○ 実務経験あっての「簡単」 ● 遊び場にしようかと思ってたけど、Wasmも ViewComponentもHotwireもなーんにもしてない

Slide 106

Slide 106 text

幸運 ● 作ったはいいものの人が集まらないサービスはある ● 最初からターゲットが居て公認で使ってもらえたの はラッキー

Slide 107

Slide 107 text

アレなおきもち ● 休日にコード書いてる人に対して勝手にコンプ レックスがあった ● 自分の同人趣味みたいなもんだと分かったのでど うでもよくなった ○ 休日にコードを書くのは、休日にコードを書くということ ○ 同人誌をつくるのは、休日に原稿を書くということ

Slide 108

Slide 108 text

楽しんでやる ● 趣味に仕事が役立つこともある ● 休日に仕事を趣味にする必要はない ○ やらなくても死なない ● 推しの役に立てると嬉しい

Slide 109

Slide 109 text

いかがでしたか ● オタクへの何らかの気持ちは芽生えましたか ● 知らない世界は見えましたか ● オタク金払いがち、覚えましたか

Slide 110

Slide 110 text

おしまい 👋