---
title: プロダクション環境を壊さずにGeminiでNext.jsサイトを翻訳する
description: >-
  Gemini Batch
  APIを活用してトークンコストを半額に抑えながらMDXコンテンツを機械翻訳し、保存前にすべてのレスポンスを検証して、実際に変更された部分にのみコストをかける方法を解説します。
publishedAt: '2026-07-08'
updatedAt: '2026-07-08'
noindex: false
canonicalPath: /ja/blog/translate-nextjs-site-gemini-batch-api
---
機械翻訳のコストは劇的に下がり、コーヒー1杯以下の価格でサイト全体を10言語に翻訳できるようになりました。課題はもはやAIモデルそのものではありません。翻訳が必要な箇所を正確に把握し、本番環境に反映される前にモデルのエラーを検知し、たった1つの誤字を修正しただけで500ページ全体を再翻訳するような無駄なコストを防ぐなど、周辺の仕組みづくりにあります。

この記事では、このサイト(全ページを10のロケールに翻訳済み)を例に、Scribeがこれらの課題をどのように解決しているのかを解説します。

## 変更された部分のみを翻訳する

翻訳対象となる各ドキュメントは、翻訳対象コンテンツ(マークされたフロントマターのフィールドとMDX本文)のハッシュ値を保持します。保存された各翻訳データも、生成元となったハッシュ値を記憶しています。翻訳の実行リストは、ハッシュが一致しない、または翻訳が存在しない(ドキュメント、ロケール)のペアを抽出するだけで完成します。

これにより、次の2つの大きなメリットが得られます。

* 1つのファイルで誤字を修正した場合、すべてのロケールにおいて該当する1つのドキュメントのみが古い状態(stale)として判定されます。
* `scribe translate`を2回連続で実行しても、2回目は何も実行されません。

コストを発生させる前に、`scribe translate --dry-run`を実行することで、実行リストと推定トークン数、アイテムごとの推定コストを確認できます。たとえば、変更履歴で同日リリースをまとめた際、実行前に18個の保留アイテムがあり、推定コストが0.07ドルであることが確認できました。

## Batch APIで半額に

デフォルトでは、翻訳はGemini Batch APIを介して実行されます。これにより、入力および出力トークンが通常のインタラクティブ料金の50%で請求されます。すべてのリクエストは事前に計画および送信され、まとめてポーリングされます。ジョブは送信された瞬間にSQLiteストアに永続化されるため、ポーリング中に終了し、後で再び`scribe translate`を実行して途中から再開することも可能です。

また、英語のコンテンツがすべてのターゲットロケールで同一のプレフィックスを形成するようにプロンプトが構造化されています。1つのページを9つの言語に翻訳する場合、Geminiの暗黙的なコンテキストキャッシングにより、繰り返される入力トークンが割引されます。ロケール固有の指示はプロンプトの最後に配置されるため、共有プレフィックスが途切れることはありません。

## デプロイ後ではなく、保存前に検証する

AIモデルは、無効なMDX、存在しないフィールドの捏造、文字列の切り捨てなど、破損したデータを返すことがまれにあります。これを防ぐためのルールは非常にシンプルです。それは、検証されていないデータは絶対にストアに保存しないということです。

すべてのレスポンスはMDXとして解析され、ドキュメントのZodスキーマに対して再チェックされます。検証に失敗したレスポンスはサイト全体ではなく、そのアイテムのみを失敗させます。実行の最後に、失敗したアイテムは一度だけ再試行され、検証エラーがモデルにフィードバックされることで、その大半が修正されます。2回失敗したものは報告され、未翻訳のまま残ります。その間、ビルドされたサイトは対象ロケールに対して英語のコンテンツを提供し続けます。

## 直訳とトランスクリエーションの違い

直訳はマニュアルのように読みにくくなりがちです。Scribeに組み込まれているプロンプトは、タスクをトランスクリエーション(意訳や文化的な適応を含む翻訳)として位置づけています。モデルは、対象市場向けのローカライズ版を制作するネイティブのコピーライターとして文章を作成します。元の構文をそのままなぞるのではなく、各文の意図を伝え、言葉遊びや慣用句を文字通りに訳すのではなく自然に再現し、ネイティブのタイポグラフィの規則を適用します。

設定ファイルの`translate.context`(サイトの概要や英語のままにしておくブランド用語)や`translate.rules`(ハウススタイルの制約)を使用して、さらに細かく制御することもできます。すべてのオプションについては、[翻訳ガイド](/docs/translation)をご覧ください。

## 実際の運用コスト

このサイトには、ランディングページ、ドキュメントセクション、変更履歴、そして新しく追加されたブログがあり、9つの非英語ロケールに翻訳されています。ゼロからの完全な再翻訳には数ドルかかりますが、通常の編集に伴う差分翻訳は数セントで済みます。多言語サイトにおいて本当にコストがかかるのはトークンではなく、連携や管理の手間でした。ハッシュベースの鮮度管理により、その管理の手間を排除できます。

まずは[スタートガイド](/docs/getting-started)をご覧いただき、[CLIリファレンス](/docs/cli)を開きながら最初の翻訳を実行してみてください。
