ANTIGRAVITY LABEN
記事一覧/アプリ開発
アプリ開発/2026-03-21中級

Antigravity × i18n — AI エージェントで多言語アプリを効率的に構築する方法

Antigravity338i18n3internationalizationnext-intlReact3多言語対応2

取り組みの背景

グローバル市場を目指すアプリ開発において、国際化(i18n)は避けて通れない課題です。翻訳ファイルの管理、ロケール切り替えの実装、日付・数値のフォーマット対応など、多くの作業が必要になります。Antigravity の AI エージェントを活用すれば、これらの i18n 作業を大幅に自動化し、品質の高い多言語アプリを短期間で構築できます。

i18n プロジェクトの初期セットアップ

Antigravity で多言語対応プロジェクトを始める際は、最初にプロジェクトの構成を AI エージェントに伝える点が肝心です。

next-intl の導入

Antigravity のチャットパネルで以下のようにプロンプトを入力します。

このNext.jsプロジェクトにnext-intlを導入してください。
対応言語は日本語(ja)と英語(en)で、デフォルトロケールはjaです。
App Routerの[locale]パターンで実装してください。

Antigravity のエージェントは、この指示から以下の作業を自動で実行します。

  1. next-intl パッケージのインストール
  2. src/i18n/routing.ts の作成(ロケール定義・ルーティング設定)
  3. src/i18n/request.ts の作成(リクエストごとのロケール解決)
  4. middleware.ts の作成(ロケールプレフィックスの自動付与)
  5. src/app/[locale]/layout.tsx の雛形生成

ディレクトリ構造

Antigravity が生成する典型的な i18n プロジェクト構造は以下の通りです。

src/
├── i18n/
│   ├── routing.ts          # ロケール定義
│   └── request.ts          # リクエスト設定
├── messages/
│   ├── ja.json             # 日本語メッセージ
│   └── en.json             # 英語メッセージ
├── app/
│   └── [locale]/
│       ├── layout.tsx
│       └── page.tsx
└── middleware.ts

翻訳ファイルの自動生成

i18n で最も手間がかかるのが翻訳ファイルの管理です。Antigravity は、ソースコードから翻訳キーを自動抽出し、翻訳ファイルを生成できます。

日本語から英語への翻訳生成

まず日本語のメッセージファイルを作成します。

{
  "navigation": {
    "home": "ホーム",
    "about": "私たちについて",
    "contact": "お問い合わせ",
    "pricing": "料金プラン"
  },
  "hero": {
    "title": "AI で、開発をもっとスマートに",
    "subtitle": "Antigravity が、あなたのコーディングを加速します",
    "cta": "無料で始める"
  },
  "features": {
    "heading": "主な機能",
    "ai_completion": "AI コード補完",
    "ai_completion_desc": "コンテキストを理解した高精度なコード補完で、タイピング量を削減します",
    "multi_agent": "マルチエージェント",
    "multi_agent_desc": "複数の AI エージェントが協調して、複雑なタスクを自動処理します"
  }
}

次に、Antigravity に英語版の生成を依頼します。

messages/ja.json を元に、自然な英語で messages/en.json を生成してください。
直訳ではなく、英語ネイティブが読んで自然に感じる表現にしてください。
マーケティングコピーのトーンは維持してください。

Antigravity のエージェントは翻訳の文脈を理解し、マーケティング文脈に適した英語を生成します。単純な機械翻訳と異なり、CTA(Call to Action)やブランドメッセージのニュアンスを保持した翻訳が可能です。

コンポーネントでの i18n 実装パターン

useTranslations フックの活用

"use client";
 
import { useTranslations } from "next-intl";
 
export function HeroSection() {
  const t = useTranslations("hero");
 
  return (
    <section className="hero">
      <h1>{t("title")}</h1>
      <p>{t("subtitle")}</p>
      <button>{t("cta")}</button>
    </section>
  );
}

Antigravity でコンポーネントを生成する際、以下のプロンプトを使うと i18n 対応のコードが最初から出力されます。

HeroSectionコンポーネントを作成してください。
テキストはすべてnext-intlのuseTranslationsフックから取得し、
ハードコードされた文字列は使わないでください。
翻訳キーはhero名前空間に配置してください。

動的な値の挿入

翻訳メッセージに動的な値を挿入する場合は、ICU メッセージフォーマットを使用します。

{
  "greeting": "{name}さん、こんにちは",
  "items_count": "{count, plural, =0 {アイテムはありません} one {# 件のアイテム} other {# 件のアイテム}}"
}
const t = useTranslations();
// → "田中さん、こんにちは"
t("greeting", { name: "田中" });
// → "3 件のアイテム"
t("items_count", { count: 3 });

日付・数値のロケール対応

Intl API との連携

Antigravity に「日付と通貨の表示をロケール対応してください」と指示すると、以下のようなユーティリティを生成します。

import { useLocale } from "next-intl";
 
export function useFormatters() {
  const locale = useLocale();
 
  const formatDate = (date: Date) =>
    new Intl.DateTimeFormat(locale, {
      year: "numeric",
      month: "long",
      day: "numeric",
    }).format(date);
 
  const formatCurrency = (amount: number, currency: string) =>
    new Intl.NumberFormat(locale, {
      style: "currency",
      currency,
    }).format(amount);
 
  return { formatDate, formatCurrency };
}

使用例として、日本語ロケールでは 2026年3月21日¥1,500、英語ロケールでは March 21, 2026$15.00 のように自動的にフォーマットが切り替わります。

翻訳キーの一括更新ワークフロー

プロジェクトが成長するにつれて、翻訳ファイルの同期が課題になります。Antigravity を使った効率的な一括更新ワークフローを紹介します。

ステップ 1: 未翻訳キーの検出

messages/ja.json と messages/en.json を比較して、
ja.json にあって en.json にないキーを一覧で教えてください。
また、en.json にあって ja.json にないキーも教えてください。

ステップ 2: 不足キーの自動翻訳

以下の未翻訳キーについて、ja.json の値を元に
自然な英語訳を en.json に追加してください。
既存のキーは変更しないでください。

ステップ 3: 翻訳品質のレビュー

Antigravity のエージェントに翻訳品質のチェックを依頼することも可能です。

en.json の翻訳を確認して、以下の観点でレビューしてください。
- 不自然な英語表現はないか
- ブランドトーンが一貫しているか
- UIコンテキストに適した長さか(ボタンラベルが長すぎないか等)
問題があれば修正案を提示してください。

SEO のための多言語メタデータ

多言語サイトでは、各ロケールに適切なメタデータを設定することが SEO 上重要です。

generateMetadata での i18n 対応

import { getTranslations } from "next-intl/server";
 
export async function generateMetadata({
  params: { locale },
}: {
  params: { locale: string };
}) {
  const t = await getTranslations({ locale, namespace: "metadata" });
 
  return {
    title: t("title"),
    description: t("description"),
    alternates: {
      canonical: `https://example.com/${locale}`,
      languages: {
        ja: "https://example.com/ja",
        en: "https://example.com/en",
      },
    },
    openGraph: {
      title: t("title"),
      description: t("description"),
      locale: locale === "ja" ? "ja_JP" : "en_US",
    },
  };
}

hreflang タグの自動生成

Antigravity に「hreflang タグを自動生成するミドルウェアを作成してください」と指示すると、検索エンジンが各言語版を正しく認識するための設定を自動化してくれます。

実践的な Tips

翻訳キーの命名規則

Antigravity で一貫した翻訳キーを生成させるために、プロジェクトの Knowledge Items に命名規則を登録しておくことをおすすめします。

翻訳キーの命名規則:
- ページ名.セクション名.要素名 の形式を使う
  例: home.hero.title, about.team.heading
- ボタンテキストは action_ プレフィックスを付ける
  例: action_submit, action_cancel
- エラーメッセージは error_ プレフィックスを付ける
  例: error_required, error_invalid_email

3言語以上への拡張

新しい言語を追加する場合も、Antigravity がベースとなる翻訳ファイルから新しいロケールのファイルを生成してくれます。

messages/ja.json を元に、韓国語(ko)の翻訳ファイルを生成してください。
韓国のユーザーに自然に読める表現にしてください。
敬語レベルはja.jsonと同程度にしてください。

RTL(右から左)言語のサポート

アラビア語やヘブライ語などの RTL 言語に対応する場合は、Antigravity にレイアウトの反転処理も含めて指示できます。

アラビア語(ar)対応を追加してください。
RTLレイアウトのサポートを含め、
dir属性の自動切り替えとCSSの論理プロパティへの変換も行ってください。

まとめ

Antigravity の AI エージェントを活用することで、i18n の面倒な作業を大幅に自動化できます。翻訳ファイルの生成・同期、コンポーネントの i18n 対応、SEO メタデータの多言語化まで、一貫したワークフローで効率的に多言語アプリを構築できます。

特に、単なる機械翻訳ではなく、文脈やトーンを理解した高品質な翻訳を生成できる点が、Antigravity を使った i18n の大きな利点です。グローバル展開を視野に入れたプロジェクトでは、ぜひ Antigravity の AI パワーを i18n ワークフローに取り入れてみてください。

シェア

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

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

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

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

アプリ開発2026-07-15
エージェントが足した依存を、インストール前に検疫する — postinstall を既定で止めて通す設計
エージェントに任せた作業で依存が増えるとき、インストールの瞬間に走るライフサイクルスクリプトは誰も見ていません。既定を止め、検疫スコアで通す実装と運用をまとめます。
アプリ開発2026-07-14
AdMob を載せた画面のスクリーンショットテストを、広告の非決定性から守る
広告つきの画面はスクリーンショットテストが毎回赤くなり、やがて誰も差分を見なくなります。AdMob バナーの非決定性を封じ、レイアウトの崩れだけを検知に残す設計を、Compose の実装例と Antigravity での差分トリアージまで含めてまとめます。
アプリ開発2026-07-14
デプロイは成功なのに、ユーザーには古いビルドが出ていたとき — 出荷したコミットがエッジに届いたかを検証するゲートの運用メモ
デプロイが成功と表示されたのに本番が古いビルドを配り続けていたとき、出荷したコミットが実際にエッジへ届いたかをビルド印で検証するゲートの作り方を、運用ログの実測とともに整理します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →