しんたろーのITアカデミー
開発日記

5日でDiscordに街を創った。1人開発が生み出す異常な量産体制。

5日でDiscordに街を創った。1人開発が生み出す異常な量産体制。
しんたろーしんたろー
11分で読めます
この記事の内容(目次)
※この記事は、Claude Codeで1人開発しているSNS運用SaaS「ThreadPost」の開発日記です。

SNS運用を自動化しませんか?

ThreadPostなら、投稿作成・画像生成・スケジュール管理までAIがサポート。

無料で始める

誰もいない街に、16人の住人を呼び込んだ。

MEE6を捨てて、自作Botを作り始めた。気づいたら16人のキャラクターがDiscordに住み着き、111件の独自コンテンツを喋っていた。

全部1人で作った。我ながらどうかしてる。

Discord Botを「舞台装置」として再定義
Discord Botを「舞台装置」として再定義

今週の狂気

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時半、設定通りに「けんた」がニュースを配信し始めた。

月額数ドルの固定費と引き換えに、眠らない街を手に入れた。

ここまで読んだあなたに

今なら無料で全機能をお試しいただけます。設定後はAIが投稿案を毎日生成。確認して選ぶだけ。

無料で始める

落とし穴:「それな」が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でSNS運用を自動化する

ThreadPost — SNS投稿をAIが自動化

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

無料で始める

この記事をシェア

XはてブLINE
しんたろー

ThreadPost開発者・個人開発エンジニア

AI × SaaS個人開発者。Cursor / Claude Code を使った効率的開発、SNS自動化について実体験から発信。

人気の記事