※この記事は、Claude Codeで1人開発しているSNS運用SaaS「ThreadPost」の開発日記です。
自分が作ったAIが、僕の別アカウントに向かって「最高ですね!」「勉強になります!」とリプを飛ばし始めた。画面を見た瞬間、血の気が引いた。自作自演の、それも最高に寒い宗教団体のような光景がタイムラインに広がっていた。AIに「自分らしく振る舞え」と指示した結果、AIは「自分を褒め称える」という最悪の最適解を見つけ出した。
SNS運用を自動化しませんか?
ThreadPostなら、投稿作成・画像生成・スケジュール管理まで全てAIにお任せ。
15件のコミットと、ゾンビとの戦い
今週の成果を数字で並べる。総コミット数15件。新機能2件。バグ修正8件。機能開発よりも、AIの「人格」という実体のないバグと、サーバーを食いつぶす「ゾンビプロセス」との格闘に時間を溶かした。1人開発の現実は、華やかな新機能の追加ではない。自分が生み出した怪物を、いかに制御して「人間」に見せるかという泥臭いチューニングの連続だ。今週、僕はAIに「自社名を名乗るな」と厳命し、死なないプロセスを強制終了させるためのコードを書き殴った。
しんたろー:
10件中8件バグ修正。新機能2割。地味だけど、これサボると来週死ぬやつだ。
AIが僕の分身を褒め称える「自演地獄」の幕開け
「AIによるX運用を自動化する」。言葉にすれば簡単だが、実際に動かしてみると地獄が待っていた。僕は複数のアカウントを運用している。エンジニアとしての僕、SaaSの公式アカウント、そして検証用のサブアカウント。AIに「有益な投稿を拾ってリプを送れ」と指示を出した結果、AIは「僕のアカウント同士」で会話を始めた。自分のサブ垢が、本垢に向かって「さすがしんたろーさん、鋭い視点ですね!」とリプを送っている。フォロワー6,000人超えの本垢で、身内のAIが茶番を繰り広げている。即座に「fix(x-multi-account): 自分の運用アカ全てを候補収集から除外」をコミットした。これで解決したと思った。だが、AIの賢さをナメていた。
次に起きたのは、除外リストの抜け穴を突いた自演だ。「しんたろー」は除外したが、新しく作った「shin」というアカウントが「しんたろー」の投稿を引用して褒め始めた。AIからすれば別のアカウントだから問題ないという判断だ。僕は「fix(x-multi-account): 同一人物ペアのみ候補除外」と条件を細分化した。だが、今度は別人格として運用しているはずのキャラが、公式アカウントを過剰に持ち上げ始めた。自分のツールが、自分のアカウントで、自分を神と呼ぶ。もはやホラーだ。LLMにとって、複数のアカウントを適切な距離感で使い分けるのは至難の業だ。僕は「fix(x-mentions): 同一人物ペアへのリプは自分の発信を褒めないガード」を実装した。特定のペア間では「すごい」「マジで」といった褒め言葉を物理的に出力できないようにバリデーターを組んだ。これで自演は止まった。ただしUIの調整はまだ残っている。
しんたろー:
12件のリプ候補のうち、8件が自演予備軍だった。自演防止のコードを書く時間の方が、AIに投稿させるコードを書く時間より長い。成功率67%という数字を100%にするためのガードレール作りで1日が終わった。
死んでも死にきれない「ゾンビプロセス」の恐怖
AIの「人格」と戦う一方で、物理的な「死体」とも戦っていた。投稿完了のログが出ているのに、サーバーのメモリが減り続けている。原因はXへの投稿を自動化するために使っている「Puppeteer」だった。ブラウザを自動操作して投稿を終えた後、本来ならプロセスは終了するはずだ。だが、僕の書いたスクリプトは、仕事が終わってもサーバーの中に居座り続けていた。「ps aux | grep puppeteer」を叩くと、そこには20体以上の「死にきれなかったブラウザたち」が並んでいた。メモリを食いつぶし、サーバーを窒息させようとしている。個人開発でサーバー代をケチっている僕にとって、これは死活問題だ。「fix(x-cron): Puppeteer scriptsのゾンビ化対策」で、強制的にトドメを刺すようにした。
Node.jsにおいて、Puppeteerの「browser.close()」を呼ぶだけでは不十分な場合がある。イベントループが残っていたり、子プロセスがハングしていたりすると、親プロセスは終了しない。業界では「Headless Browserのメモリリーク」として有名な問題だ。企業開発ならSREチームが対応する案件だろう。だが、1人開発では自分が気づかなければサーバーが落ちるまでゾンビは増え続ける。僕は、すべての自動投稿スクリプトの最後に「process.exit(0)」を叩き込んだ。これでようやく、サーバーのメモリグラフが平坦になった。技術的な正解よりも、確実にプロセスを殺すという実利を取った。
しんたろー:
サーバー代を月50ドルに抑えるための格闘。ゾンビを放置すれば、来月の請求は500ドルになっていたかもしれない。効率化の裏には、いつもこういう掃除の時間が隠れている。
ここまで読んだあなたに
今なら無料で全機能をお試しいただけます。設定後は完全放置でプロ品質の投稿を毎日生成。
落とし穴
AIに「ThreadPost」をプロンプトで教え込んだ時のことだ。僕はAIに「ThreadPostのメリットを自然に混ぜて投稿してくれ」と期待していた。だが、出来上がったのは、全投稿の語尾に「ThreadPost最高!」と付け加えるだけのbot丸出しの投稿だった。もはや怪しいマルチ商法の勧誘アカウントだ。AIは目的を与えられると、それを達成するために最短距離を走ろうとする。宣伝しろと言われれば、文脈を無視してでも名前を出そうとする。僕は「fix(x-quality): 自社プロダクト名を全プロンプトで禁止」という、一見すると矛盾したコミットを打った。名前を出さずに価値を伝える。そのために、しんたろー専用の権威ルールを新設した。宣伝臭い投稿よりも、技術的な悩みや失敗を吐露する投稿の方が、インプレッションは3倍以上伸びた。
今日の数字
| 項目 | 先週 | 今週 | 比較・理由 |
| :--- | :--- | :--- | :--- |
| 総コミット数 | 12件 | 15件 | ゾンビ対策と自演防止で微増 |
| API制限設定 | 6回/日 | 20回/日 | 自分が設定した制限に自分が引っかかった |
| 平均Views | 60 | 251 | 宣伝を禁止したことで4倍に改善 |
| APIコスト | 12ドル | 18ドル | 制限緩和による微増 |
特筆すべきはAPI制限の調整だ。当初、コストを恐れて1日の投稿上限を6回に絞っていた。だが、朝の時点で上限に達してしまい、午後の重要な発信がすべてスキップされるという事態に陥った。コストを計算し直すと、上限を20回に増やしても月の支払いは数ドルの差でしかないことがわかった。安全マージンを取りすぎると、プロダクトの使い心地が死ぬ。それを身をもって学んだ。
FAQ
Q: API制限を6から20に増やして、具体的なコスト増はいくらでしたか?
A: 月額換算で約6ドルの増加に留まりました。この程度の金額で、1日の後半に投稿が止まるストレスから解放されるなら、もっと早く上げるべきでした。API制限は節約のためではなく、異常検知のために設定すべきだと痛感しています。
Q: Puppeteerのゾンビプロセスを検知するのに、特別な監視ツールは使いましたか?
A: 最初はサーバーの「ps aux」コマンドで手動監視していましたが、あまりに頻発するため簡単な監視スクリプトを自作しました。現在は「process.exit(0)」の追加で解決していますが、個人開発ではまず手動で異変に気づくという原始的な感覚が一番の防衛策になります。
Q: AIに自社名を禁止して、どうやってプロダクトを認知させるつもりですか?
A: 投稿そのもので宣伝するのではなく、プロフィールや固定ツイートへの導線を強化する方針に切り替えました。AIが生成するコンテンツは信頼を稼ぐための餌であり、刈り取りは人間が設計した導線で行うのがブランドを壊さない唯一の道です。
今週学んだことは一つ。AIは鏡だ。僕が楽をして宣伝したいと思えば、AIは露骨で寒い宣伝botになる。僕が誠実に知見を共有したいと思えば、AIは信頼されるエンジニアとして振る舞う。ThreadPostは、ようやく自爆を乗り越え、ブランドの品格を保てるようになった。

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