CLAUDE LABEN
BILLING — 6/15発効の課金変更から2日目。Agent SDK・headless・GitHub Actions・他社エージェントは別枠の月次クレジット($20/$100/$200・full APIレート・繰越なし)へ移行済みで、初日の実コスト実測が運用見直しの起点になりますREGULATED — TCSとAnthropicが提携し、銀行・航空など規制業界へClaudeを導入。DXCも既存システムへの統合を進め、エンタープライズ採用が一段と広がっていますRETIRED — Sonnet 4とOpus 4が6/15にAPIから引退。旧世代を参照するスクリプトは最新世代(Opus 4.8など)へ切替済みか、ログで再確認する段階ですEXPORT — Claude Fable 5・Mythos 5は米政府の輸出管理指令による停止が継続中(6/12〜)。Anthropicは早期復旧を目指すと表明していますSAFE — 停止対象は新Mythosクラス2モデルのみで、Opus 4.8など他の全モデルは通常どおり稼働していますSUBAGENTS — Claude Codeはサブエージェントが自身のサブエージェントを生成可能(最大5階層)。多段委譲ワークフローの設計自由度が広がっていますBILLING — 6/15発効の課金変更から2日目。Agent SDK・headless・GitHub Actions・他社エージェントは別枠の月次クレジット($20/$100/$200・full APIレート・繰越なし)へ移行済みで、初日の実コスト実測が運用見直しの起点になりますREGULATED — TCSとAnthropicが提携し、銀行・航空など規制業界へClaudeを導入。DXCも既存システムへの統合を進め、エンタープライズ採用が一段と広がっていますRETIRED — Sonnet 4とOpus 4が6/15にAPIから引退。旧世代を参照するスクリプトは最新世代(Opus 4.8など)へ切替済みか、ログで再確認する段階ですEXPORT — Claude Fable 5・Mythos 5は米政府の輸出管理指令による停止が継続中(6/12〜)。Anthropicは早期復旧を目指すと表明していますSAFE — 停止対象は新Mythosクラス2モデルのみで、Opus 4.8など他の全モデルは通常どおり稼働していますSUBAGENTS — Claude Codeはサブエージェントが自身のサブエージェントを生成可能(最大5階層)。多段委譲ワークフローの設計自由度が広がっています
記事一覧/API & SDK
API & SDK/2026-06-17上級

多言語アプリの訳ブレを止める — Batch API と用語集キャッシュで Localizable.strings を一貫翻訳する設計

UI文字列を1本ずつ翻訳すると用語がブレます。Claude の Message Batches API と用語集のプロンプトキャッシュを組み合わせ、Localizable.strings を10言語以上へ一貫翻訳するパイプラインを、実測コストと落とし穴つきで設計します。

api-sdk10batch-api3prompt-caching7localizationios14

プレミアム記事

App Store の審査で一度リジェクトされて気づいたことがあります。私が個人開発で運営している iOS の壁紙アプリは10言語以上に対応しているのですが、設定画面では「壁紙」を Wallpaper と訳していたのに、ウィジェット追加のヒント文では Background と訳されていました。原因は単純で、文字列を追加するたびに「その1本だけ」を翻訳していたからです。1本ずつ訳すと、訳した時期も文脈も違うので、同じ概念に違う訳語が当たってしまいます。

この訳ブレは、翻訳の品質というより「翻訳の手続き」の問題です。人間の翻訳者を雇っても、用語集を渡さなければ同じことが起きます。そこで私が選んだのは、用語集とスタイルガイドを Claude にキャッシュさせたうえで、Localizable.strings の全エントリを Message Batches API で一括翻訳する設計でした。以下では、その設計と実装、数千文字列を流したときのコストの実測、そして書き戻し時にハマった落とし穴までを順に共有していきます。

1本ずつ翻訳するのをやめる理由

Localizable.strings は次のような単純な key-value のリストです。

"settings.wallpaper.title" = "壁紙の品質";
"widget.hint.background" = "ウィジェットに壁紙を設定";
"paywall.cta.primary" = "プレミアムを始める";

問題は、これらを別々のリクエストで翻訳すると、Claude(あるいは人間)が「壁紙」をある時は Wallpaper、ある時は Background と訳す自由を持ってしまうことです。UI の一貫性は、個々の訳の正しさの足し算では生まれません。「アプリ全体で wallpaper という語をどう統一するか」という制約を、翻訳の入力段階で固定する必要があります。

私はこの制約を3つの層で表現することにしました。第一に用語集(glossary)で「この原語にはこの訳語を必ず使う」を宣言します。第二にスタイルガイドで「ボタンは命令形、設定項目は名詞句」のようなトーンを指定します。第三にプレースホルダー保護のルール(%@%1$d は絶対に動かさない)を明示します。この3層は全文字列で共通なので、リクエストごとに送り直すのは無駄です。ここでプロンプトキャッシュが効いてきます。

用語集とスタイルガイドをキャッシュ可能な system プロンプトにする

プロンプトキャッシュは、system ブロックに cache_control を付けると、その前方部分をキャッシュしてくれる仕組みです。用語集は数百行になることもありますが、一度キャッシュすれば後続のリクエストではキャッシュ読み出し価格(通常の入力トークンより大幅に安い)で再利用できます。翻訳対象が数千文字列あっても、用語集は一度だけ実コストで読まれ、あとは割引価格で繰り返し参照されます。

# glossary.py — 用語集とスタイルガイドをキャッシュ可能な system ブロックとして構築する
import anthropic
 
client = anthropic.Anthropic()  # 環境変数 ANTHROPIC_API_KEY を読む
 
# 用語集: 原語 -> 各言語の確定訳。アプリ全体で必ずこの訳を使わせる
GLOSSARY = {
    "壁紙": {"en": "Wallpaper", "fr": "Fond d'écran", "de": "Hintergrundbild"},
    "プレミアム": {"en": "Premium", "fr": "Premium", "de": "Premium"},
    "広告を非表示": {"en": "Remove Ads", "fr": "Supprimer les pubs", "de": "Werbung entfernen"},
}
 
STYLE_GUIDE = """\
- ボタン・CTA は命令形で短く(例: Remove Ads, Start Premium)。
- 設定項目のタイトルは名詞句(例: Wallpaper Quality)。
- 敬語の度合いは言語の慣習に合わせる。過度に丁寧にしない。
- %@ %1$@ %d %1$d などのフォーマット指定子は順序も含めて絶対に変更しない。
- 改行 \\n とタブ \\t はそのまま保持する。
"""
 
def build_cached_system(target_lang: str) -> list:
    glossary_lines = "\n".join(
        f'  "{src}" => "{langs.get(target_lang, "")}"'
        for src, langs in GLOSSARY.items()
        if langs.get(target_lang)
    )
    instructions = (
        f"あなたはアプリUIの翻訳者です。原語(日本語)を {target_lang} に翻訳します。\n\n"
        f"## 用語集(必ずこの訳語を使う)\n{glossary_lines}\n\n"
        f"## スタイルガイド\n{STYLE_GUIDE}"
    )
    # cache_control を付けたブロックの前方がキャッシュ対象になる
    return [{
        "type": "text",
        "text": instructions,
        "cache_control": {"type": "ephemeral"},
    }]

ここでのポイントは、用語集とスタイルガイドを「翻訳対象の文字列とは分離した、変化しない前置き」として置くことです。可変部分(実際に訳す文字列)を system ではなく messages 側に置くことで、system がキャッシュヒットし続けます。逆に、文字列ごとに system を書き換えてしまうとキャッシュは毎回ミスします。私はこの分離を最初に守れず、キャッシュヒット率がゼロのまま「キャッシュが効かない」と悩んだ時期がありました。

なお Message Batches とプロンプトキャッシュの料金設計は変化が早い領域です。私自身、運用コストの考え方はBatch API の非同期コスト設計プロンプトキャッシュで月額を抑える実践を土台に組み立てています。

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

この記事の続きを読む

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

この記事で得られること
訳語がアプリ画面ごとにブレて困っていた人が、用語集をキャッシュして全文字列に同じ訳語を強制する仕組みを今日から組める
Message Batches API の50%割引とプロンプトキャッシュを重ねて、数千文字列の翻訳コストを実測でどこまで下げられるか判断できる
%@ や複数形変種、改行コードを壊さずに翻訳結果を Localizable.strings へ安全に書き戻すバリデーション付きパイプラインを手に入れられる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

API & SDK2026-05-15
Claude API Messages Batches API でコストを半額にする — 個人開発者が学んだ非同期処理設計
Claude API の Messages Batches API を使って API コストを最大50%削減する非同期設計パターン。個人開発で実際に運用して気づいた設計判断・コスト試算・本番環境でのエラー処理まで実装コードとともに解説します。
API & SDK2026-03-26
Claude API コスト最適化プロダクションガイド — Batch API・Prompt Caching・Adaptive Thinking を組み合わせて最大90%削減する実装パターン
Claude APIの利用コストを最大90%削減する実践的な実装パターンを解説。Batch API、Prompt Caching、Adaptive Thinkingの組み合わせ戦略から、本番環境での監視・予算管理まで網羅した上級者向けガイド。
API & SDK2026-06-13
6/15 の claude-sonnet-4・claude-opus-4 引退に備えて、本番のモデルIDを棚卸しする
6月15日に claude-sonnet-4 と claude-opus-4 が API から引退します。直書きされたモデルIDを引退前に洗い出し、出力パリティを検証し、別名レイヤーとフォールバックで安全に切り替えるまでの実装手順をまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →