※この記事は、Claude Codeで1人開発しているSNS運用SaaS「ThreadPost」の開発日記です。
「バグないです」とAIが画面の中で断言した。
僕はその言葉を信じて、本番環境の課金テストを走らせた。
同時に2回ボタンを押したら、ユーザーのクレジットがあっさりとマイナスに突入した。
SNS運用を自動化しませんか?
ThreadPostなら、投稿作成・画像生成・スケジュール管理まで全てAIにお任せ。
AIに課金システムを任せたら、レースコンディションで爆死した
今週の総コミットは15件だった。
新機能2件、バグ修正7件。残りはリファクタリングとドキュメントだ。

Claude Codeに「クレジット消費をアトミックにして」と指示した。
数秒でコードが返ってきて、「修正しました。これで安全です」と自信満々に言ってきた。
僕はその言葉を信じて、テストデータを流し込んだ。
同時に2回、クレジット消費のAPIを叩いた。
ユーザーの残高が、あっさりとマイナスになった。
トランザクションを張っただけで、レコードのロックを完全にかけていなかったのだ。
SELECTしてUPDATEを投げる間、ネットワークレイテンシの隙間に別のリクエストが割り込む。
これがレースコンディションだ。課金システムで起きると最悪のやつ。
「お前、ロックしてないだろ」と再指示を出して、何度かやり取りして、ようやくまともなコードが出てきた。
「fix: クレジットシステムのレースコンディションを修正(アトミックRPC化)」をコミットした。
12ファイル、362行追加・489行削除の大規模修正になった。
SELECTからUPDATEに繋ぐ脆弱なロジックを捨て、PostgresのRPC関数1つに全部集約した。
これでデータベース内で1ステートメントとして処理が完結する。
残高がマイナスになることは物理的に不可能になった。
しんたろー:
AIの「できました」は、エンジニアの「あと5分で終わる」と同じくらい信用してはいけない。マジで肝が冷えた。課金周りのバグって、ログ追わないと静かに壊れ続けるんだよな。時限爆弾。
自分の過去をAIに壊させる
ランディングページに載せる創業者ストーリーを書こうとした。
自分で書くと、無意識に話を盛ったり遠慮したりする。
そこでGeminiに複数のペルソナを憑依させて、僕の文章をレビューさせることにした。

「厳しい読者」「共感しやすい読者」「事実確認をする編集者」など、6つの人格を設定した。
同じ文章を4周連続で読み込ませて、徹底的に粗探しをさせた。
1周目で「この描写、本当ですか?」という冷酷な指摘が飛んできた。
妻の体調不良のシーンだった。
僕は「ソファで倒れ込んだ」と書いていたが、実際のメモには「夜早めにベッドへ寝に行った」とあった。
記憶をドラマチックに書き換えていたのを、AIに完全に見抜かれた。
「refactor: 創業者ストーリー第5章の妻描写を事実に基づき修正」をコミットした。
偽造していた「信じてるから」というセリフを削除した。
代わりに「まだ寝ないの?」という実際のエピソードに置き換えた。
4周の多重レビューを終えた後、文章の密度は変わっていた。
当初20行もあった冗長な状況説明が、3行に凝縮された。
第三者視点のポエムのような解説パラグラフも、一人称の短い言葉に置き換わった。
「refactor: 創業者ストーリーをGeminiマルチペルソナレビュー4周で収束」をプッシュした。
12行追加して、49行削除した。
自分で何度読み直しても気づかなかったズレを、AIは全部削ぎ落としてくれた。ちょっと悔しい。
しんたろー:
自分の記憶よりAIのログの方が正確だった。悔しい。でも事実ベースに直したら、文章の説得力が上がった。自分の人生をAIに添削されるのは、正直かなり気持ち悪い体験だった。たぶん。
英語アカウントに絡む暴走AI
SNS運用を自動化するスクリプトを動かしていた。
ある日タイムラインを見たら、見知らぬ英語アカウントにAIが流暢な日本語でリプライを飛ばしていた。
「TLをスキャンしてリプライせよ」と指示しただけで、日本語限定とは言っていなかった。
さらにヤバい事実が発覚した。
AIが「それいいじゃん」みたいなタメ口でリプライを投稿していたのだ。
「fix: リプライ・引用フックを敬語ベースに統一」を慌ててコミットした。
カジュアルなトーンを丁寧語ベースに変更し、タメ口禁止ルールを追加した。
「fix: TLスキャンで日本語ツイートのみリプライ対象に」も追加した。
これだけでは足りなかった。
収集前にDBに入ってしまった英語ツイートへの誤爆を防ぐ必要がある。
「fix: リプライ投稿時にも日本語チェック追加(二重フィルタ)」を入れた。
投稿直前にも日本語文字が3文字以上含まれているか確認する処理だ。
さらに、意味不明なツイートや専門外の話題にも無理やり絡もうとしていた。
わかったふりで適当なことを書くやつ。
「fix: 意味不明・専門外ツイートへの無理なリプ/引用をSKIP対象に」を実装した。
AIが生成した投稿に「参考になれば幸いです」が混ざる問題も起きた。
SNSでこれをやると、上から目線に見えて誰もフォローしてくれない。
「fix: リプライから上から目線の評価表現を排除」で、NGワードを追加した。
最初は広めに禁止ワードを設定した。
すると制限が強すぎて、AIの文章がスカスカの無味乾燥なものになった。
「fix: NG語を上から目線の評価表現のみに絞る」で調整し直した。
「筋がいい」という言葉は「腑に落ちます」に自動置換するようにした。
最終的に、言語判定とトーン制約の三重フィルタを構築した。
機能を作ることより、AIの「性格」と「空気感」をチューニングする方が圧倒的に時間がかかった。
しんたろー:
英語に日本語で絡みに行くヤバいアカウントになりかけてた。即座にスクリプト止めた。自動化の恐怖を味わった。プロンプトに人間のルールを一つ一つ書き下ろす泥臭い作業、これが本番だ。
ここまで読んだあなたに
今なら無料で全機能をお試しいただけます。設定後は完全放置でプロ品質の投稿を毎日生成。
落とし穴:「できました」の後に本当のバグが始まる
今週、5回連続で同じパターンにやられた。
AIが「修正しました」と返してくる。コードを見ると確かに変わっている。でも動かすと壊れている。
クレジットのレースコンディションもそうだった。
トランザクションは張ってあった。見た目は正しかった。でもロックがなかった。
「SELECT FOR UPDATE」の1行が抜けているだけで、高負荷時に必ず競合する。
AIはコードの見た目を整えるのは得意だ。
でも「同時に2つのリクエストが来たとき何が起きるか」という空間的な想像は、指示しないと考えない。
今週は何パターンも同時リクエストを投げて、クレジットがズレないか全部目で確認した。
AIが書いたコードはドラフトだ。動作確認と最終的な責任は、全部僕が被るしかない。たぶんずっとそうだ。
今日の数字
| 項目 | 今週の数字 | 比較対象 |
|------|------------|----------|
| 総コミット | 15件 | 先週は22件 |
| 新機能 | 2件 | バグ修正は7件 |
| バグ修正 | 7件 | 新機能の3.5倍 |
| 最大修正 | 362行追加・489行削除 | 12ファイル同時変更 |
| 実装時間 | 約6時間 | 企業チームなら2〜3週間 |
今週のコミット比率は、バグ修正7件に対して新機能2件だ。
企業なら要件定義から実装・テストまで2〜3週間かかる規模の改修を、6時間で終わらせた。
ただし、そのうち2時間はAIの「できました」を信じて爆死した後の修正に費やした。
「perf: ダッシュボードをSuspense分割で即時表示化」もコミットした。
19個あった重いクエリを、即時表示の7個と遅延読み込みの12個に分割した。
全クエリを待機するウォーターフォールが解消されて、表示が体感で変わった。
「refactor: 角度システムを撤去しDB素材ローテーションに変更」で、AI生成素材の重複問題にも手を入れた。
直近10記事の使用素材をDBから取得し、プロンプトから除外する仕組みだ。
重複は減ったが、まだたまに似たような言い回しが出てくる。ロジックにまだ穴がある気がして、ずっと気になっている。
よくある質問
Q: レースコンディションはどうやって再現・検証したのか?
ターミナルからcurlコマンドで、同じAPIエンドポイントに同時に複数リクエストを投げた。
非アトミックな処理だと、1回目の消費処理が終わる前に2回目が残高を読み取ってしまう。
結果として1回分の残高しか減っていないのに2回分の処理が通る状態が確認できた。
Q: AIのコード品質チェックはどこまで人間がやるべきか?
今週の経験だと、「見た目が正しいコード」と「並行処理で壊れないコード」は別物だった。
AIは単一リクエストの動作確認は得意だが、同時リクエストのシナリオは指示しないと考えない。
課金・在庫・ポイントなど「残高が変わる処理」は、必ず同時リクエストテストを自分でやる。
Q: 1人開発でAIに任せていい範囲と、任せてはいけない範囲は?
コードのドラフト生成・リファクタリング・ドキュメント作成は任せていい。
課金ロジック・認証・並行処理の最終確認は、必ず人間が手動テストする。
今週の爆死はその境界線を甘く見た結果だった。
泥臭いチューニングの日々
AIの凄さと嘘に振り回されながら、ひたすらコードを直し続けた一週間だった。
来週は爆死しないようにしたい。たぶん。

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