※この記事は、Claude Codeで1人開発しているSNS運用SaaS「ThreadPost」の開発日記です。
SNS運用を自動化しませんか?
ThreadPostなら、投稿作成・画像生成・スケジュール管理まで全てAIにお任せ。
JSONの壁を突破した方法
AIに100件の記事をまとめて投げたら、JSONが途中で切れて全データが消し飛んだ。深夜のPCモニターに向かって一人でキレた。「お前、数えてないだろ」。この泥沼の戦いを経て、ようやくJSONのパースエラーを0%に抑え込んだ。結論から言うと、バッチサイズを100から50へ調整し、reason文字数を60文字に制限したのが勝因だ。これでトークン制限を回避し、安定した出力を得られるようになった。

途切れる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に「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を試してみませんか?
投稿作成・画像生成・スケジュール管理まで、全てAIにお任せできます。
ThreadPostをもっと知る