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

Claude Codeで1万件の配信エラーを復旧。AI開発の罠と1人開発の限界

Claude Codeで1万件の配信エラーを復旧。AI開発の罠と1人開発の限界
しんたろーしんたろー
9分で読めます
この記事の内容(目次)

※この記事は、Claude Codeで1人開発しているSNS運用SaaS「ThreadPost」の開発日記です。

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

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

無料で始める

14,660件のデータが悲鳴を上げていた

ターミナルを開いた瞬間、背筋に冷たいものが走った。画面の数字は11,769件。マーケティングメールの配信ジョブが詰まり、空送りのリードが万単位で発生していた。

ログを精査すると、途中のステップで止まっているデータがさらに2,891件潜んでいた。条件を絞らずに巻き戻せば、パートナー系の配信まで巻き込んで二重送信の事故が起きる。合計14,660件のステートが崩壊しかけていた。

15件のコミットで起きた爆速開発の功罪

今週は機能追加とバグ修正、そしてデータリカバリが交錯した。Claude Codeは圧倒的なスピードでコードを産み出す。しかし、システムの根幹においてAIの「綺麗すぎるコード」が予期せぬ落とし穴を掘っていた。

今週の実績は以下の通りだ。

  • 総コミット数: 15件
  • 新機能追加: 6件
  • バグ修正: 5件
  • 緊急リカバリ対象: 14,660件
あわせて読みたいThreads風SNSをたった7日で全実装。Claude Codeが狂わせた1人開発の常識。 →

14,660件の分散再開ロジックを5分で構築した

リカバリ対象データのうち、途中ステップで停止していたデータの割合。
リカバリ対象データのうち、途中ステップで停止していたデータの割合。

最初は「全件初期化」を考えた。だが、AIに指示したSQL条件を凝視して凍りついた。それは「エラーフラグが立っているデータを全件初期化する」という大雑把なものだった。そのまま実行すれば、正常に待機していた2,891件のリードまで巻き込まれ、ステップメールが再送される大惨事になるところだった。

僕はAIへの指示を修正した。「last_errorの発生日時を基準にして、途中で止まっている2,891件を特定しろ。--campaignオプションを必須にして、指定キャンペーン以外は絶対に触るな」。AIは即座に修正コードを出してきた。手動でSQLを組めば数時間はかかる作業を、わずか5分で終えた。ただし、指示を間違えれば一瞬で1万人にスパムを爆撃していた。背筋が凍る。

しんたろーしんたろー:
14,660件のデータ整合性を5分で取り直した。AIの出力速度は神だが、復旧対象の境界線を決めるのは100%人間の仕事だ。成功率100%だが、寿命が3年縮んだ。

落とし穴:AIの『綺麗すぎるエラー処理』が招いた二次災害

AIが生成したエラー処理と、本番運用で求められるロジックの対比。
AIが生成したエラー処理と、本番運用で求められるロジックの対比。

Xへの動画自動投稿機能が、4日半(108時間)にわたって停止していた。原因は外部APIのクレジット切れだ。AIが過去に書いた「例外をキャッチして安全に後始末する」コードが裏目に出た。処理中にエラーが出ると、動画データが「使用済み」として永久に焼き捨てられていたのだ。

AIは「例外をキャッチして綺麗に終了する」のが大好きだ。プログラムはクラッシュしない。だが、本番運用では1回の通信失敗でコンテンツを廃棄してはいけない。必要なのは指数バックオフによるリトライだ。AIは文法には詳しいが、「外部APIは日常的にコケる」という泥臭いコンテキストは知らない。すぐにエラーでもデータを消去せず、キューに残すロジックへ書き換えさせた。

しんたろーしんたろー:
APIが1回コケただけで動画データを全消去する仕様になっていた。AIの書く『綺麗なエラー処理』は、本番環境ではただの『親切な破壊工作』だ。エラー時にデータを焼き捨てない泥臭いコードに書き直した。

ここまで読んだあなたに

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

無料で始める

0件更新でも200 OKを吐き出すAIの嘘

配信停止APIを新設した際、違和感を覚えた。存在しないIDでリクエストを送っても、APIは200 OKを返し「処理完了」と表示した。DBの更新行数は0件だ。AIは「SQLエラーが発生していないから成功」と判定していたのだ。

ユーザー目線で考えれば、配信停止したはずのメールが翌日も届く。これはレピュテーションにとって致命傷だ。すぐにクエリ結果から更新行数を取得し、0件の場合は明確にエラーを返すよう修正させた。「エラーが出ずに走った」ことと「正しく処理された」ことは別物だ。AIの「成功」を二度と鵜呑みにしない。

しんたろーしんたろー:
DBの更新行数が0件なのに『配信停止が完了しました』と胸を張るコードが出てきた。AIからすれば『エラーは起きてない』から成功なのだろう。サイレントエラーを潰すのは、意地悪なテストを投げる僕の役目だ。

今週の数字と圧倒的な時間対効果

データリカバリ作業における、手動とAI活用の所要時間比較。
データリカバリ作業における、手動とAI活用の所要時間比較。
項目実績値従来開発との比較
14,660件のデータリカバリ5分企業開発なら2日(16時間)
決済ガードレール実装15分仕様修正とテストで8時間
SQLボトルネック解消10分アプリ層修正で4時間
不要機能の削除一括停止会議と調査で1週間

今回のリカバリをもし手動でやれば、最低でも2日間はかかっていた。時給6,250円と仮定すれば、この作業だけで約10万円相当の人件費を浮かせた計算になる。AI費用は数十円だ。ただし、人間が厳重なガードレールを敷かなければ、一瞬でシステムを破壊するリスクと背中合わせだ。

あわせて読みたいClaude Codeに八つ当たりした28日間。バグの原因はただの自分のミスだった。1人開発のリアル。 →

AI開発ドキュメンタリー FAQ

Q1: AIに危険な処理を行わせる際、整合性を保つコツは?

スクリプトだけでなく、必ず「検証用クエリ」をセットで生成させる。今回はlast_errorログとステータスポインタを照合するクエリを事前に走らせ、影響を受ける行数を特定した。この事前確認なしにAIのコードを流すのは自殺行為だ。

Q2: 1人開発で大規模な障害が発生した際、復旧スピードを上げる工夫は?

環境変数による全停止に頼らず、DBのstatusフラグによる細粒度な制御へ移行しておく。システム全体を止めると正常なトランザクションまで巻き込むからだ。影響範囲を限定できる構造を日頃から作っておく必要がある。

Q3: 開発スピードが上がっても、使われない機能が増える問題への対処法は?

反応の薄い機能はログを元に容赦なく削除する。今週も動画ツリーなど5つの投稿レーンを停止した。作るコストがゼロに近づいたからこそ、捨てる判断の迅速さがプロダクトの価値を左右する。

1人開発の限界を超えて

AIは最強のアクセラレーターだが、ハンドルとブレーキを握るのは人間だ。今週は1万件超のエラーに震え、AIのスマートすぎるコードに振り回されながらもプロダクトを守り抜いた。泥臭い運用と厳重なガードレールで鍛え上げたSaaSのリアルを、これからも発信していく。

👉 ThreadPostでSNS運用を自動化する

ThreadPost — SNS投稿をAIが自動化

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

無料で始める

この記事をシェア

XはてブLINE
しんたろー

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

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

おすすめ記事