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

AIに「お前、数えてないだろ」と説教して3ヶ月。Claude CodeでようやくJSONの壁を突破した

AIに「お前、数えてないだろ」と説教して3ヶ月。Claude CodeでようやくJSONの壁を突破した
しんたろーしんたろー
8分で読めます
この記事の内容(目次)

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

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

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

無料で始める

JSONの壁を突破した方法

AIに100件の記事をまとめて投げたら、JSONが途中で切れて全データが消し飛んだ。深夜のPCモニターに向かって一人でキレた。「お前、数えてないだろ」。この泥沼の戦いを経て、ようやくJSONのパースエラーを0%に抑え込んだ。結論から言うと、バッチサイズを100から50へ調整し、reason文字数を60文字に制限したのが勝因だ。これでトークン制限を回避し、安定した出力を得られるようになった。

JSONの壁を越えるための泥沼の戦い
JSONの壁を越えるための泥沼の戦い

途切れるJSONと消えるデータ

AIにバッチ処理で100件ずつ記事を採点させれば、コストも時間も圧倒的に効率化できる。そう信じていた。しかし「Claude API JSON parsing error handling」というコミットを切るまでは地獄だった。AIは毎回違う形で壊れたデータを返してきた。JSONが途中で切れる。インデントがズレる。なぜかマークダウンのコードブロックで囲んでくる。画面に「お前、JSONって言ったよな?」と問いかける毎日だ。

LLMのJSON出力は確率的な生成物だ。特に長文バッチではトークン上限に達すると末尾が欠損する。僕はまず、バッチサイズを50に減らした。「バッチサイズを50に削減してHaiku出力トークン制限に対応」をコミットした。これでパースエラーは消えた。100件バッチだと19,777文字で16,384トークンの制限を超えていた。50件なら約6,500トークン。制限の40%に収まる。30分で実装した。ただしUIがボロボロになった。

しんたろーしんたろー:
176件で16,384トークン上限に到達しJSONが途切れる問題を解決した。これで安心だと思った。甘かった。

直ったので100に戻したらまた壊れた。根本的な解決にはなっていなかった。AIが出力する理由テキストの長さを削ることにした。「reason文字数を60文字に変更」をコミットした。これで100件バッチでも通るようになった。「enhance JSON parsing robustness for AI responses」で多段フォールバックも入れた。これでパースエラー率は0%になった。不完全な文字列やオブジェクトも修復できるようになった。

忖度するAIとアンカリングの罠

JSONが壊れなくなったと思ったら、今度は全員80点だった。AIは「80点」という無難な数字にアンカリングし、全記事が80点になる忖度採点を繰り広げていた。「お前それ採点じゃなくて承認だろ」。AIは隙あらば語りたがる。語らせないための制約が一番トークンを節約できる。「投稿スコアリングプロンプトを改善し全投稿が80点になる問題を解消」をコミットした。

LLMはFew-shotプロンプティングにおいて、例示された数値に強く引きずられる。僕は出力例から固定スコアを削除した。プレースホルダーに変更し、各項目に具体的な採点基準を記述した。オフトピック投稿の連動減点ルールも追加した。これでようやくスコアに0から100の分布が生まれた。1日で解決した。ただしコーヒーを5杯飲んだ。

しんたろーしんたろー:
旧プロンプトは出力例にA=85、B=70の固定値を埋めていた。Haikuがこれにアンカリングし、全投稿で同一スコアを返していた。AIの忖度を見抜くのに丸一日かかった。

「スコア計算を6項目均等に変更、関連性にもグレード・理由を追加」をコミットした。関連性、リポスト可能性、フック力、エンゲージメント予測、実用性、炎上リスク。6項目均等で計算するようにした。システムの最適化が進むと、パズルが組み上がるような快感がある。reason出力を60文字から10文字に短縮した。max_tokensを8192から512に削減した。これでコストも劇的に下がるはずだ。

ここまで読んだあなたに

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

無料で始める

落とし穴

AIに「100件のJSONを返せ」と指示した。AIが律儀に101件のリストを返し、配列のインデックスがズレて全データがゴミになった。「Haikuが余分なインデックスを返す問題に対応」をコミットした。AIに「数え方」を教えるために、わざわざ範囲外インデックスを除外するコードを書く羽目になった。AIは賢いフリをして平気で嘘をつく。信用してはいけない。

今日の数字

| 項目 | 数字 | 比較・備考 |

|------|------|----------|

| APIコスト | $122/週 | 先週の$244から50%削減(Batch API適用) |

| カテゴリ分類コスト | $0.49/週 | 先週の$59.78から約99%削減 |

| コミット数 | 42件 | 企業なら2週間の検証を1晩でやった |

| バグ修正 | 3件 | 最適化のみの1週間 |

しんたろーしんたろー:
42件中、新機能は0。全部バグ修正と最適化。地味だけど、これサボると来週死ぬやつだ。

よくある質問

Prompt Cachingの具体的な節約額は?

システムプロンプトのトークン消費を約70%削減できる見込みだ。ただしキャッシュ作成自体にコストがかかるため、3件以上の連続生成時のみ有効化している。1件だけの処理でキャッシュを使うと逆に高くつく。

GeminiとClaudeの使い分け基準は?

JSONの構造化出力と大量のバッチ処理には、低レイテンシで安価なGemini 2.5 Flashをプライマリに置いた。複雑な推論や高度な文脈理解が必要なコメント生成にはClaudeのSonnet 4.6を使っている。Claudeはフォールバックとして配置し、品質担保の保険にしている。

Inngestによる並列制御の意図は?

APIのレート制限を回避するためだ。ユーザーごとに5並列までという制限を設け、リクエストの同時多発によるシステムダウンを防いでいる。GCPプロジェクトごとに独立したクォータがあるため、APIキーのラウンドロビンと組み合わせている。

完璧なJSONは存在しない

AIの出力に絶対はない。泥臭い調整の積み重ねだけが、システムを安定させる。

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

ThreadPost — SNS投稿をAIが自動化

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

無料で始める

この記事をシェア

XはてブLINE
しんたろー

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

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

人気の記事