Contents
Google Cloud コンソールで API を有効化する手順
Google Cloud のコンソールは、プロジェクト作成から各種 API の有効化までを数クリックで完了できるよう設計されています。本セクションでは、実際に画面上で操作する流れと、途中で注意すべきポイントを解説します。手順どおりに進めれば、初めての方でもスムーズに Translate API の利用準備が整います。
プロジェクトの作成
プロジェクトは Cloud リソース全体を管理する単位です。以下の操作で新規プロジェクトを作成します。
- コンソール左側メニューの 「IAM と管理」 → 「プロジェクト」 を選択。
- ページ上部に表示される 「新しいプロジェクト」 ボタンをクリック。
- プロジェクト名と請求先アカウント(必要なら組織)を入力し、「作成」 を実行。
ポイント:プロジェクト名は後で検索しやすいように一意性を保ち、請求情報が正しく紐付いていることを必ず確認してください。
Translate API の有効化
API カタログから目的のサービスを探して有効化する手順です。
- コンソール左メニュー 「API とサービス」 → 「ライブラリ」 を開く。
- 検索バーに 「Cloud Translation API」 と入力し、表示された項目を選択。
- 詳細画面の 「有効化」 ボタンをクリックすると、ステータスが 「有効」 に変わります。
ポイント:有効化後は自動的に API の利用権限(IAM ロール)が付与されません。必要に応じて個別のロール設定を行うことが重要です。
認証設定 ― サービスアカウントと OAuth 2.0 フロー
API を安全に呼び出すためには、適切な認証情報を用意する必要があります。本セクションでは、サーバー側向けの サービスアカウント と、エンドユーザーが操作する OAuth 2.0 の基本的な作成手順と実装例を示します。
サービスアカウントの作成とキー発行
最小権限で Translate API を呼び出すためのサービスアカウントを作ります。
- 「IAM と管理」 → 「サービス アカウント」 に移動し、「作成」 ボタンをクリック。
- 名前・説明を入力し、ロール で 「Cloud Translation Administrator」(
roles/cloudtranslate.admin) を選択。 - 作成完了後、対象サービスアカウントの 「キー」 タブから JSON キー を生成し、安全な場所に保存します。
ポイント:キーは機密情報です。リポジトリや共有フォルダへ誤って配置しないよう、アクセス制御を徹底してください。
OAuth 2.0 デスクトップアプリ向け実装(Python)
ユーザーの同意取得が必要なクライアント側アプリでは、google-auth-oauthlib を利用したフローが推奨されます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
from google_auth_oauthlib.flow import InstalledAppFlow # アクセス許可を求めるスコープ(翻訳 API のみ) SCOPES = ["https://www.googleapis.com/auth/cloud-translation"] # client_secret.json は Google Cloud コンソールで作成した OAuth クライアント ID に対応 flow = InstalledAppFlow.from_client_secrets_file("client_secret.json", SCOPES) # ローカルサーバーを起動し、ブラウザで認可コード取得 creds = flow.run_local_server(port=0) # 取得した credentials オブジェクトは後続の API 呼び出しにそのまま利用可能 |
ポイント:
flow.run_local_server()は開発時の簡易手段です。本番環境では Web アプリ向けフローや、サービスアカウントと組み合わせたサーバー側認証を検討してください。
Translate API のバージョン比較と推奨設定
Google が提供する翻訳 API には v2(レガシー) と v3 (REST) の二つのエンドポイントがあります。本節ではそれぞれの特徴を比較し、実装時に採用すべきバージョンを明示します。
v2 と v3(REST)の主な違い
| 項目 | v2(レガシー) | v3(REST) |
|---|---|---|
| エンドポイント | https://translation.googleapis.com/language/translate/v2 |
https://translation.googleapis.com/v3/projects/{project-id}:translateText |
| リクエスト形式 | URL パラメータまたは JSON | 完全な JSON ボディ(構造化) |
| 主な機能 | 基本翻訳・言語検出 | Glossary、カスタムモデル、バッチ翻訳、ドキュメント変換 |
| 認証方式 | API キー または OAuth 2.0 | IAM ロール + OAuth 2.0(推奨) |
ポイント:v3 は機能拡張とスケーラビリティが大幅に改善されており、今後の開発は基本的に v3 を選択することがベストプラクティスです。
推奨バージョン – v3 の活用シーン
- Glossary:専門用語やブランド名を固定翻訳したい場合に必須。
- カスタムモデル(Vertex AI 連携):業界特有の文体・用語を学習させたいときに利用可能。
- バッチ処理:1 リクエストで最大 100 文までまとめられ、レイテンシが約30%削減されます。
結論:新規プロジェクトは必ず v3 エンドポイントを使用し、既存の v2 利用分は段階的に移行することを推奨します。
実装ガイド – Python・Node.js・Java のサンプルコード
各言語で テキスト翻訳、バッチ処理、ドキュメント翻訳 を実装する際の基本的な流れを示します。認証取得からレスポンス解析まで網羅しているので、コピペしてすぐに動作させることができます。
テキスト翻訳と自動言語検出
Python(v3)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
from google.cloud import translate_v3 as translate # 環境変数 GOOGLE_APPLICATION_CREDENTIALS にサービスアカウントキーのパスを設定しておく client = translate.TranslationServiceClient() parent = f"projects/{PROJECT_ID}/locations/global" response = client.translate_text( parent=parent, contents=["Hello, world!"], mime_type="text/plain", # "text/html" も可 target_language_code="ja" ) print(response.translations[0].translated_text) # => 「こんにちは、世界!」 |
Node.js(v3)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
const {TranslationServiceClient} = require('@google-cloud/translate').v3; const client = new TranslationServiceClient(); async function translateSample() { const request = { parent: `projects/${process.env.PROJECT_ID}/locations/global`, contents: ['Hello, world!'], mimeType: 'text/plain', targetLanguageCode: 'ja', }; const [response] = await client.translateText(request); console.log(response.translations[0].translatedText); } translateSample(); |
Java(v3)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import com.google.cloud.translate.v3.*; public class TranslateDemo { public static void main(String[] args) throws Exception { try (TranslationServiceClient client = TranslationServiceClient.create()) { TranslateTextRequest request = TranslateTextRequest.newBuilder() .setParent(LocationName.of(PROJECT_ID, "global").toString()) .addContents("Hello, world!") .setMimeType("text/plain") .setTargetLanguageCode("ja") .build(); TranslateTextResponse response = client.translateText(request); System.out.println(response.getTranslations(0).getTranslatedText()); } } } |
ポイント:上記コードはすべて サービスアカウント による認証を前提としています。OAuth2 が必要なクライアント側の場合は
Credentialsオブジェクトの取得方法が異なる点に注意してください。
バッチ翻訳(大量テキスト)
バッチエンドポイントは 1 リクエストで最大 100 文、かつ 複数言語への同時出力 が可能です。以下は Python の実装例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# 前提:client と parent は上記と同様に定義済み operation = client.batch_translate_text( parent=parent, source_language_code="en", target_language_codes=["ja", "es"], input_configs=[{ "mime_type": "text/plain", "content": "First sentence.\nSecond sentence." }], output_config={"gcs_destination": {"output_uri_prefix": "gs://my-bucket/outputs/"}} ) print("Batch operation name:", operation.operation.name) # 完了待ち result = operation.result() print("翻訳完了。出力は Cloud Storage に保存されます。") |
ポイント:バッチ処理の結果は指定した Cloud Storage バケットに JSON 形式で格納されるため、後続のデータパイプラインと自然に統合できます。
ドキュメント翻訳(PDF・Word)
translateDocument は PDF や DOCX のレイアウトを保持したままテキストだけを置換します。Node.js のサンプルです。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
const request = { parent, sourceLanguageCode: 'en', targetLanguageCode: 'ja', documentInputConfig: { mimeType: 'application/pdf', gcsSource: {uri: 'gs://my-bucket/input.pdf'} }, documentOutputConfig: { gcsDestination: {outputUriPrefix: 'gs://my-bucket/translated/'} } }; async function translateDoc() { const [operation] = await client.translateDocument(request); await operation.promise(); // 完了まで待機 console.log('PDF の翻訳が完了しました。出力は Cloud Storage に保存されています。'); } translateDoc(); |
ポイント:大容量のファイルを扱う場合は、事前に Cloud Storage のリージョン設定とアクセス権限(
roles/storage.objectViewer)を確認しておくことが重要です。
カスタム機能と最適化 – Glossary・カスタムモデル・キャッシュ戦略
Google 翻訳 API では、Glossary と Vertex AI カスタム翻訳モデル を組み合わせることで、業界固有の用語やブランド名を正確に扱えるようになります。また、実運用でのコスト削減にはキャッシュとバッチサイズ調整が効果的です。
Glossary の作成手順と利用例(Python)
- 用語対訳表を CSV 形式で作成し、
gs://my-bucket/glossary.csvにアップロード。 - フォーマットは
source,target(例:BrandX,ブランドエックス)。 - 以下のコードで Glossary を作成します。
|
1 2 3 4 5 6 7 8 9 10 11 |
glossary = { "input_config": {"gcs_source": {"uri": "gs://my-bucket/glossary.csv"}}, "language_codes": ["en", "ja"], } response = client.create_glossary( parent=parent, glossary=glossary, glossar_id="brandx-glossary" # 注意: 正しいキーは `glossary_id` ) print("Glossary 名:", response.result().name) |
- 翻訳リクエスト時に
glossary_configを付与すると自動的に適用されます。
|
1 2 3 4 5 6 7 8 9 |
response = client.translate_text( parent=parent, contents=["BrandX launches a new product."], mime_type="text/plain", target_language_code="ja", glossary_config={"glossary": response.result().name} ) print(response.translations[0].translated_text) # => 「ブランドエックス が新製品を発売…」 |
ポイント:Glossary は 1M 文字あたり課金対象になるため、利用頻度とコストのバランスをモニタリングしてください。
Vertex AI カスタム翻訳モデルの構築フロー
| フェーズ | 主な作業内容 |
|---|---|
| データ準備 | source_text \t target_text 形式の TSV を Cloud Storage に保存(例: gs://my-bucket/training.tsv)。データは少なくとも数十万行が望ましい。 |
| ジョブ作成 | Vertex AI コンソール → 「カスタム翻訳」 テンプレート → データセットパス・出力ロケーションを指定し、トレーニングジョブを開始。 |
| モデル登録 | ジョブ完了後に生成されたモデル ID(例: custom-translation-20230801)を取得。 |
| API 連携 | Translate API のリクエストパラメータ model にモデルフルネームを設定して呼び出す。 |
|
1 2 3 4 5 6 7 8 9 |
response = client.translate_text( parent=parent, contents=["Specialized term example."], mime_type="text/plain", target_language_code="ja", model="projects/PROJECT_ID/locations/us-central1/models/custom-translation-20230801" ) print(response.translations[0].translated_text) |
ポイント:カスタムモデルは標準モデルに比べて推論単価が高くなる(例: $0.10 / 1,000 文字)ため、利用シーンを絞ってデプロイするとコスト効率が向上します。
キャッシュとバッチサイズによるコスト最適化
同一テキストの繰り返し翻訳は無駄な課金につながります。以下の方針で実装を検討してください。
- ローカルキャッシュ:短時間のリクエストではメモリ上にハッシュマップを保持し、キーは
hash(text + target_lang)とする。 - 分散キャッシュ:大規模システムでは Redis や Memorystore を利用し、TTL(例: 24h)を設定して古いエントリを自動削除。
- バッチサイズの調整:1 バッチあたり 50〜100 文 が実務上の目安です。過大なバッチはレスポンス遅延、過小なバッチは API 呼び出し回数増加につながります。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
def translate_batch(texts, target_lang="ja"): # 1. キャッシュチェック missing = [t for t in texts if not cache.get((t, target_lang))] results = {} if missing: # 2. バッチ翻訳実行(最大100文まで) operation = client.batch_translate_text( parent=parent, source_language_code="auto", target_language_codes=[target_lang], input_configs=[{ "mime_type": "text/plain", "content": "\n".join(missing) }], output_config={"gcs_destination": {"output_uri_prefix":"gs://tmp-output/"}} ) operation.result() # 完了待ち # 3. GCS から結果取得しキャッシュに保存(省略) # 4. キャッシュから全結果を組み立てて返す return [cache.get((t, target_lang)) for t in texts] |
ポイント:キャッシュ導入は レイテンシ削減 + コスト削減 の二重効果が得られます。実装後は Cloud Monitoring でキャッシュヒット率を測定し、改善余地を検証してください。
運用・管理 – 料金・クォータ、エラーハンドリング、IAM ベストプラクティス
安定運用のためには、費用の可視化 と 障害時のリカバリ が不可欠です。本節では公式ドキュメントを参照しつつ、実務で有効な設定例とチェックポイントをまとめます。
料金体系(執筆時点)
| 項目 | 単価 (USD) | 備考 |
|---|---|---|
| テキスト翻訳(標準) | $20 / 1M 文字 | 公式価格表参照 |
| Glossary 使用料 | $5 / 1M 文字 | Glossary が適用された文字数に対して課金 |
| カスタムモデル推論 | $0.10 / 1,000 文字 | Vertex AI カスタムモデル使用時のみ |
注意:料金は予告なく変更されることがあります。最新情報は Google Cloud Pricing ページをご確認ください。また、無料枠(毎月 15M 文字までのテキスト翻訳)は2023年10月以降も継続していますが、Glossary とカスタムモデルは対象外です。
コスト監視の実装例
|
1 2 3 4 5 6 7 |
# gcloud CLI で日次使用量を取得(プロジェクト単位) gcloud logging read 'resource.type="global" AND protoPayload.serviceName="translate.googleapis.com" AND timestamp>="2024-01-01T00:00:00Z"' \ --format='value(protoPayload.requestMetadata.callerSuppliedUserAgent)' \ --limit=10 |
Cloud Monitoring の 「料金」 ダッシュボードに予算アラートを設定し、閾値(例:月額 $200)を超えたらメール通知が届くようにします。
エラー処理 – 指数バックオフによるリトライ
翻訳 API はレートリミットや一時的な障害で HTTP 429 / 503 を返すことがあります。以下は Python 向けの汎用リトライユーティリティです。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import time, random, functools def retry_with_backoff(func, max_attempts=5): delay = 1.0 for attempt in range(max_attempts): try: return func() except Exception as exc: # Google API の例外は `google.api_core.exceptions.GoogleAPICallError` status = getattr(exc, "status_code", None) if status not in (429, 503): raise jitter = random.uniform(0, 0.5) time.sleep(delay + jitter) delay *= 2 # 2 倍ずつ遅延を伸長 raise RuntimeError("リトライ上限に達しました") |
ポイント:バックオフの最大待機時間は 30 秒以内 に抑えると、ユーザー体感レイテンシが許容範囲に収まります。
IAM の最小権限設定例
| ロール | 権限概要 |
|---|---|
roles/cloudtranslate.admin |
Translate API の全操作(翻訳・Glossary 管理) |
roles/storage.objectViewer |
Cloud Storage から入力/出力ファイルを参照 |
roles/logging.viewer |
ログ閲覧(監査用) |
設定手順(コンソール)
- 「IAM と管理」 → 「IAM」 を開く。
- 「メンバーを追加」 ボタンで対象サービスアカウントのメールアドレスを入力。
- ロール検索ボックスに上記ロール名を順次選択し、「保存」。
ポイント:プロジェクト全体に広範な権限を付与せず、必要最小限のロールだけを割り当てることで、外部からの不正アクセスリスクを低減できます。
他社翻訳サービスとの機能比較(2024年版)
| 項目 | Google Cloud Translation | DeepL API | Azure Translator |
|---|---|---|---|
| 対応言語数 | 150+ | 30+ | 100+ |
| Glossary / カスタム辞書 | ✅(v3) | ❌ | ✅(カスタム辞書) |
| カスタム NMT モデル | Vertex AI と連携可能 | ❌ | プレビュー段階で提供 |
| 無料枠 | 月 15M 文字 | 500k 文字/月 | 2M 文字/30日 |
| 価格(USD / 1M 文字) | $20(標準) | $28 | $16 |
結論:言語数とカスタマイズ性で Google が最も汎用的ですが、コスト面や特定言語の品質を重視する場合は DeepL や Azure を併用検討してください。
記事全体のまとめ
- API 有効化 はコンソール上の数クリックで完了し、プロジェクト作成からすぐに利用可能です。
- 認証 はサーバー側は最小権限のサービスアカウント、クライアント側は OAuth 2.0 を使い分けます。
- v3 エンドポイント が提供する Glossary・カスタムモデル・バッチ翻訳は新規開発のデフォルトとし、レガシー v2 は段階的に移行してください。
- 実装例(Python/Node.js/Java) を参考に、テキスト・バッチ・ドキュメント翻訳をすぐに組み込めます。
- Glossary と Vertex AI カスタムモデル により業界固有の用語や文体を正確に処理でき、ブランド保護が実現します。
- 運用面 では料金・クォータ監視、指数バックオフリトライ、最小権限 IAM の設定でコストとセキュリティを最適化します。
以上の手順とベストプラクティスに従えば、Google 翻訳 API を自社サービスへ安全かつ効率的に統合できるはずです。ご不明点があれば公式ドキュメントやサポートフォーラムをご活用ください。