◉CLAUDE LABEN
●2.1.302 — fork サブエージェントが claude -p・Agent SDK・デスクトップで既定オンになりました。無効化は CLAUDE_CODE_FORK_SUBAGENT=0(10/16)●2.1.301 — 使用量上限に達した無人実行の再試行を、待ち続けず自動で止めるようになりました(10/15)。最新は 2.1.304(10/19)●SONNET 4.5 — Claude API での提供終了は 11/30、残り40日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました●2.1.302 — fork サブエージェントが claude -p・Agent SDK・デスクトップで既定オンになりました。無効化は CLAUDE_CODE_FORK_SUBAGENT=0(10/16)●2.1.301 — 使用量上限に達した無人実行の再試行を、待ち続けず自動で止めるようになりました(10/15)。最新は 2.1.304(10/19)●SONNET 4.5 — Claude API での提供終了は 11/30、残り40日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました
記事一覧/API & SDK
⬡ API & SDK/2026-09-06中級

訳文は自然なのに、実行時に落ちる翻訳がありました

多言語アプリの文言を Claude API で訳したとき、意味は正しいのに書式指定子だけが壊れることがあります。重大度で分けた受け入れ検査と、壊れた行だけを訳し直す修復ループを実装と実測でまとめました。

Claude API130ローカライズ3多言語対応3品質ゲート7個人開発130

✦ プレミアム記事

段階公開を 5% で回していた壁紙アプリに、特定の言語の端末からだけクラッシュ報告が上がってきた夜がありました。直前に触ったのはアプリ内文言の差し替えだけで、コードには手を入れておりません。

訳文を上から順に読み返しました。どれも自然で、意味も合っています。読んでいる限り、どこにも異常が見当たりませんでした。

原因が見えたのは、訳文を「文章」として読むのをやめ、記号だけを縦に並べたときでした。原文の %1$@ が、訳文では %@ になっていたのです。

訳の良し悪しを見ている限り、書式指定子の壊れは一生見つかりません。 語彙の問題ではなく、構文の問題だからです。

落ちていたのは意味ではなく、引数の受け渡しでした

書式指定子は、実行時に値を差し込む穴です。iOS の String(format:) も Android の String.format も、この穴の個数と型を頼りに引数を割り当てます。

翻訳モデルは文を訳します。穴は文の一部として扱われるので、語順を組み替える過程で位置番号が落ちたり、プラットフォームの流儀に合わせて書き換えられたりします。悪意も不注意もなく、ただ「自然な訳文」を作った結果として起きます。

まず、引数が足りない/型が合わないときに何が起きるかを手元で確かめました。Python の % 書式で確認した実際の出力です。

"%s / %s" に1つだけ渡す: TypeError: not enough arguments for format string
"%d" に文字列を渡す:      TypeError: %d format: a real number is required, not str
"%(n)s" に空の辞書:       KeyError: 'n'
"%s" に2つ渡す:           成功 -> 'a'   ← 例外にならない

最後の行が大事でした。穴が余ると落ち、穴が足りないと落ちません。 Android の String.format も同じ非対称で、供給されない引数を参照すると MissingFormatArgumentException、型が合わなければ IllegalFormatConversionException を投げますが、引数を使い残しても例外は出ません。

つまり「指定子が消えた」と「指定子が増えた」は、まったく別の事故です。前者は情報が黙って欠けるだけ、後者は端末が落ちます。同じ「不一致」として一律に扱うと、止めるべきものを止められず、止めなくてよいものでリリースが止まります。

壊れ方を並べると、六つに収まりました

手元で拾えた壊れ方を分類してみたところ、次の六つに収まりました。

壊れ方原文訳文結果
位置番号の消失%1$@ 件を %2$d 秒で%@ items in %d seconds順序が言語依存になる
流儀の取り違え%1$@%1$siOS 側で不正
指定子の欠落%1$@ を %2$@ にMoved %1$@情報が消える
指定子の増加%1$@ を保存Saved %1$@ to %2$@実行時に落ちる
字形の破損%1$@%1$@ / % 1$@指定子として読まれない
エスケープの喪失%1$d%%%1$d%裸の % が残る

字形の破損は、日本語話者が中間に入る運用だと特に出やすいと感じています。全角の % は目視でまず見分けがつかず、本番運用に出てから端末のクラッシュとして返ってくるのがいちばん痛い落とし穴でした。

回避の順番も、この分類のおかげではっきりしました。落ちる四つを機械で止め、落ちない二つは人に返します。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦訳文を読んでも気づけない書式指定子の壊れを、配信前に機械で止められるようになる
✦指定子の欠落と増加を同じ扱いにせず、落ちる壊れ方と黙って情報が消える壊れ方を分けて判断できるようになる
✦壊れた行だけを伏字つきで訳し直す修復ループを、既存の翻訳パイプラインに足せるようになる
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

⬡ API & SDK2026-09-17
画像は20枚ずつ送っています — 21枚目から全画像に別の上限がかかると知った日
素材フォルダの62枚を一度に送ったら invalid_request_error で落ちました。容量ではなく枚数が原因です。視覚トークンを28pxのパッチで数え直し、枚数・寸法・ペイロードの3つの上限を同時に見てバッチを組むまでの記録です。
⬡ API & SDK2026-05-15
壁紙アプリの一括カテゴリ分類を Claude Vision API で自動化した話 — 実運用で見えた精度と限界
個人開発の壁紙アプリで画像のカテゴリ分類をClaude Vision APIに任せた実体験の記録です。SonnetとHaikuのモデル選択、75枚の手動検証で確かめた分類精度、実運用で踏んだ落とし穴、途中で落ちても再開できるバッチ設計、そして実際にかかったコストの感覚まで正直に書きました。
⬡ API & SDK2026-05-14
Claude API でアプリ内 AI チャットを実装して踏んだ6つの罠 — 本番投入までの設計記録
Claude APIをアプリ内チャットに組み込んで本番で直面した6つの設計ミスを、個人開発での実運用経験から解説。コンテキスト設計、ストリーミング、セッション管理、コスト監視の実装パターンを動くコード付きで紹介します。