※この記事は、Claude Codeで1人開発しているSNS運用SaaS「ThreadPost」の開発日記です。
SNS運用を自動化しませんか?
ThreadPostなら、投稿作成・画像生成・スケジュール管理まで全てAIにお任せ。
誰もいない街に、16人の住人を呼び込んだ。
MEE6を捨てて、自作Botを作り始めた。気づいたら16人のキャラクターがDiscordに住み着き、111件の独自コンテンツを喋っていた。
全部1人で作った。我ながらどうかしてる。

今週の狂気
Discordコミュニティ「ぽすたまタウン」の構築に着手した。最初は既製品のBotで済ませるつもりだった。
「キャラクターが喋る」「掛け合いがある」体験を作りたくなった。結果、36回のコミットでBotを完全自作した。
新機能2件、バグ修正1件。コミュニティのインフラからコンテンツまで、すべてをAIとペアプロで書き上げた。

既製品の限界と、111件のコンテンツ量産体制
コミュニティを作るとき、最初は「MEE6」や「Dyno」のような汎用Botを入れるのが定石だ。数クリックでウェルカムメッセージやレベル管理が導入できる。
僕も最初はそうした。でも、すぐに壁にぶつかった。
僕が作りたかったのは、単なる掲示板ではない。キャラクターが住み着き、ユーザーのレベルに合わせて話しかけてくる「街」だ。
既製品のBotでは、固定のメッセージしか返せない。レベルに応じた動的なコンテンツ出し分けも、複数キャラの掛け合いも不可能だった。
だから僕はMEE6を捨てた。
「feat: ウェルカム機能を拡張 (MEE6から自作に移行)」
ここから狂気の量産が始まった。まずキャラクターを16人定義した。
名前、アイコンURL、テーマカラー。それぞれに独自の口調と性格を持たせた。
単一のペルソナだと、ユーザーは「AIと話している」と即座に認識して飽きる。
関係性を持たせた複数キャラによる掛け合いは、ユーザーに「コミュニティという空間」を錯覚させるための仕掛けだ。
ただし、これを実装するにはDiscord APIの壁を越える必要があった。
Discordの「Webhook」は、1チャンネルにつき15個までという上限がある。
16人のキャラにそれぞれWebhookを割り当てると、上限を突破してエラーを吐く。
僕はWebhookを動的に使い回す設計に変更した。
「fix: Webhook共有化 & プレゼンター設定改善」
1つのWebhookを共有し、発言するキャラに合わせて名前とアイコンを動的に差し替える。
これで15個の上限を回避しつつ、無限のキャラクターを同じチャンネルに呼び出せるようになった。
次はコンテンツの量産だ。コミュニティの熱量を維持するには、圧倒的な量のコンテンツがいる。
僕はClaude Codeに16キャラの設定を読み込ませ、オンボーディングからレベル30までのシナリオを一気に生成させた。
「feat: Discord Bot 3ヶ月コンテンツ完成 & 拡張ガイドライン追加」
完成したコンテンツは111件。一般的なBotの定型文はせいぜい3〜5パターンだ。
挨拶、ノウハウ共有、メンタルケア、トレンド速報。16人がそれぞれの役割で毎日違うことを喋る。
しんたろー:
Claude Codeが吐き出したJSONファイルを見たとき、少し引いた。111件のテキストデータ。全部口調が違う。手作業なら1ヶ月はかかる量を、30分で終わらせた。ただしUIは何もできてない。コンテンツだけ先に爆誕した。
ただテキストを流すだけでは面白くない。Botっぽさを消すための細工を入れた。
メッセージ送信の前に、文字数に応じたランダムな待機処理を入れた。
長文ほど長く待つ。タイピングの気配を演出するためだ。
即レスするAIは便利だが、冷たい。数秒の「間」があるだけで、画面の向こうに誰かがいるような錯覚が生まれる。
さらに、ニュース配信機能も作った。
毎日決まった時間に、AIが選んだ記事をキャラクターが要約して配信する。
「feat: ぽすたまニュース掛け合い機能追加」
オープニングがあり、記事の紹介があり、最後は複数キャラでの掛け合いで締める。
これもすべて動的に生成される。プロンプトをハードコードすると保守性がつらいことになる。
だから「PresenterConfig」という設定ファイルを作り、キャラの振る舞いを一元管理した。
「fix: ぽすたまニュースのバリエーション改善」
オープニングは6パターン。締めも6パターン。毎回違う展開になる。
完璧な仕組みができた。僕は満足してPCを閉じた。
翌朝、すべてがぶっ壊れているとも知らずに。
インフラの罠と、深夜のゴーストタウン
Fly.ioでBotを動かせば、24時間365日コミュニティは盛り上がり続けるはずだった。
デプロイは一瞬で終わった。しかし翌朝、Discordを開くとチャンネルは静まり返っていた。
Botが完全に沈黙していた。ログを見ると、深夜3時にコンテナがシャットダウンされていた。
Fly.ioの「スケール・トゥ・ゼロ」機能が発動していた。
HTTPリクエストが一定時間ないと、インフラ側が勝手にコンテナを落としてコストを削減する機能だ。
Webアプリなら最強の機能だ。でもDiscord Botにとっては致命傷だった。
Discord Botは「WebSocket」でGatewayに常時接続している。外部からのHTTPリクエストを待っているわけではない。
PaaS側から見れば「通信のない暇なコンテナ」に見える。だから落とされた。
「fix: Fly.ioの自動停止を無効化(Discord Bot用)」
設定ファイルを書き換え、ヘルスチェックを無効化した。
コンテナを強制的に常時起動状態に固定した。
しんたろー:
クラウドの親切設計にやられた。深夜3時にBotが静かに落ちていくログを見て、変な汗が出た。自動停止はコスト削減の神機能だと思ってたけど、Discord Botには時限爆弾だった。デフォルト設定を盲信するのはやめる。たぶん。
常時稼働に切り替えたことで、Botは無事に息を吹き返した。
朝6時半、設定通りに「けんた」がニュースを配信し始めた。
月額数ドルの固定費と引き換えに、眠らない街を手に入れた。
ここまで読んだあなたに
今なら無料で全機能をお試しいただけます。設定後は完全放置でプロ品質の投稿を毎日生成。
落とし穴:「それな」が16人分並ぶ地獄
画面いっぱいに「それな」が並んでいた。
16人のキャラクター全員が、同じ相槌を連呼していた。
プロンプトの共通化が原因だった。「同じフレーズを繰り返さない」という指示を全体に適用したら、全員が一番無難な相槌に収束した。
誰かが発言すると、別のキャラが「それな」と返す。さらに別のキャラも「それな」と被せる。
「fix: プレゼンターごとの口調例を動的に参照するよう修正」
共通設定を剥がし、キャラごとの動的参照に切り替えた。
個性を出すには、あえて制約を緩める必要があった。
しんたろー:
まじかよ…16人全員「それな」。完全にディストピアだった。「人間らしくしろ」って雑に指示すると、一番無難な相槌に全員が収束する。個性ってのは、共通ルールじゃなくて個別の制約から生まれるんだな。次からはキャラごとに口調例を別ファイルで管理する。
今日の数字
| 項目 | 今日の数字 | 比較対象 |
|---|---|---|
| コミット数 | 36件 | 先週の1日平均は12件。3倍のペース。 |
| コンテンツ数 | 111件 | 一般的なBotの定型文は3〜5件。22倍。 |
| BotのWebhook数 | 1個 | Discordの仕様上限は15個。共有化で回避。 |
| キャラクター数 | 16人 | 企業が運用する公式Botでも通常は1〜2人。 |
111件のコンテンツを手動で管理するのは、専任のコミュニティマネージャー1名が1ヶ月フル稼働する工数に相当すると言われている。
僕は30分で終わらせた。ただしその後、「それな」地獄に1時間溶かした。
よくある質問
Q: 自作Botのインフラ費用はどれくらいかかっている?
Fly.ioの常時稼働コンテナとデータベースを合わせて、月額約5ドル程度だ。
OpenAIのHaikuモデルも1日数十円で収まっている。
既製品の高機能Botの有料プランより圧倒的に安い。ただし今後コミュニティが成長してAPIコールが爆発したとき、このコストがどう跳ね上がるかはまだ見えていない。
Q: Webhookの15個上限はどうやって気づいた?
16人目のキャラを追加しようとしたらAPIがエラーを返した。エラーメッセージを見て初めて上限の存在を知った。
調べたら「1チャンネルにつき15個まで」という仕様がDiscordの公式ドキュメントに普通に書いてあった。
先に読めという話だ。
Q: 「スケール・トゥ・ゼロ」問題はFly.io特有のもの?
RenderやRailwayなど、無料・低価格帯のPaaSはほぼ同じ仕様を持っている。
HTTPリクエストがない時間が続くとコンテナを落とす設計で、WebアプリのコストをゼロにするためのものだがDiscord BotのようなWebSocket常時接続には相性が最悪だ。
「min_machines_running = 1」を設定ファイルに1行追加するだけで回避できる。
街を作るのはコード、育てるのは人間
Botはただのツールではなく、コミュニティの体験を設計する舞台装置だった。
ThreadPostも同じ思想で作っている。SNS運用の「舞台裏」を自動化して、人間が人間らしいことに集中できる仕組みだ。

この記事が参考になったら、ThreadPostを試してみませんか?
投稿作成・画像生成・スケジュール管理まで、全てAIにお任せできます。
ThreadPostをもっと知る