# gt-next: General Translation Next.js SDK: 移行
URL: https://generaltranslation.com/ja/docs/next/guides/migration.mdx
---
title: 移行
description: プロジェクトを gt-next に移行する方法を説明します
---
## 概要
このガイドでは、すでに i18n ライブラリを使用しているプロジェクトを gt-next へ移行する際に必要な手順を説明します。
あわせて、移行をできるだけスムーズに進めるためのヒントやポイントも紹介します。
## 前提条件
* 現在、別の i18n ライブラリを使用しているプロジェクト。
* `gt-next` ライブラリに関する基本的な知識。
## なぜ移行するのか?
プロジェクトを gt-next に移行したくなる理由はたくさんあります。
その一部を挙げると、次のとおりです。
* **JSON ファイルはもう不要:** 翻訳を JSON ファイルで管理する必要はもうありません。
すべてのコンテンツは、あるべき場所であるコード内にインラインで置けます。
* **自動翻訳:** CLI ツールを使って、高品質でコンテキストを考慮した翻訳を生成できます。
もう翻訳を待つ必要はありません。
* **開発中に試せる:** 翻訳のホットリロードにより、開発中でも簡単に翻訳を試せます。
## セットアップ
`gt-next` と `gt` CLI ツールをインストールします。
```bash
npm i gt-next gt
```
```bash
yarn add gt-next
yarn add --dev gt
```
```bash
bun add gt-next
bun add --dev gt
```
```bash
pnpm add gt-next
pnpm add --save-dev gt
```
プロジェクトのルートに、`defaultLocale` プロパティと `locales` 配列を含む `gt.config.json` ファイルを作成します。
```json title="gt.config.json" copy
{
"defaultLocale": "en",
"locales": ["en", "fr", "es"]
}
```
次に、アプリのルートレイアウトに `` コンポーネントを追加します。
```tsx title="app/layout.tsx" copy
import { GTProvider } from 'gt-next'
export default function RootLayout({ children }) {
return (
{children}
)
}
```
続いて、`next.config.js` ファイルに `withGTConfig` を追加します。
```js title="next.config.ts" copy
import { withGTConfig } from 'gt-next/config'
const nextConfig = {
// Your next.config.ts options
}
export default withGTConfig(nextConfig, {
// Your GT configuration
})
```
詳しい手順については、[クイックスタートガイド](/docs/next)を参照してください。
この時点で、選択肢は 3 つあります。
1. プロジェクト全体を `gt-next` に完全移行し、既存の i18n ライブラリを削除する。
2. プロジェクト全体を完全移行するが、既存の i18n ライブラリの辞書は引き続き使用する。
3. 当面は既存の i18n ライブラリを使い続け、プロジェクトの一部だけを `gt-next` に移行する。
各選択肢の詳細については、[移行戦略](#strategies) セクションを参照してください。
## 移行戦略 [#strategies]
### オプション 1: プロジェクト全体を完全に移行する
この方法が最もシンプルですが、その分、一度に最も多くのコード変更が必要になります。
プロジェクトのセットアップが完了したら、既存の i18n ライブラリを使っている箇所をすべて検索し、`gt-next` に置き換える必要があります。
アプリで `useTranslations` のような React フックを使っている場合は、コードベース内の `useTranslations` の使用箇所をすべて検索し、`useGT` に置き換えてください。
次に、すべての文字列キーを実際の文字列の値に置き換える必要があります。
たとえば、古いコードが次のようになっている場合:
```json title="dictionary.json"
{
"hello": {
"description": "Hello, world!"
}
}
```
```tsx
export default function MyComponent() {
const { t } = useTranslation()
return
{t('hello.description')}
}
```
次のように置き換える必要があります:
```tsx
export default function MyComponent() {
const gt = useGT()
return {gt('Hello, world!')}
}
// または
export default function MyComponent() {
return Hello, world!
}
```
既存の i18n ライブラリを使っている箇所すべてに対して、これを行ってください.
### オプション 2: プロジェクト全体を移行しつつ、既存の i18n ライブラリの辞書は引き続き使う
たとえば、プロジェクトを `gt-next` に移行したい一方で、既存の i18n ライブラリの辞書はそのまま使い続け、
新しいコンテンツに対してのみ GT のインライン機能を使いたいとします。
この場合は、オプション 1 と同じような方法を取れます。
既存の i18n ライブラリを使っている箇所 (`useTranslations` フックなど) をすべて見つけて、`gt-next` の `useTranslations` フックに置き換えてください。
`useTranslations` フックの動作は、他の i18n ライブラリの `useTranslations` フックと非常によく似ているため、同じように使えます。
```tsx
import { useTranslation } from 'react-i18next'
export default function MyComponent() {
const { t } = useTranslation()
return {t('hello.description')}
}
```
```tsx
import { useTranslations } from 'gt-next'
export default function MyComponent() {
const t = useTranslations()
return {t('hello.description')}
}
```
設定については、プロジェクトのルートまたは `src` ディレクトリに `dictionary.[js|ts|json]` ファイルを作成する必要があります。
古い辞書ファイルの内容を、この新しいファイルにコピーしてください。
`next.config.js` の初期化関数 `withGTConfig` は、プロジェクトのルートまたは `src` ディレクトリにある辞書ファイルを自動的に検出します。
詳しくは、[dictionaries](/docs/next/guides/dictionaries) ガイドを参照してください。
### オプション 3: 当面は既存の i18n ライブラリを使い続け、プロジェクトの一部だけを `gt-next` に移行する
このオプションは最も柔軟で、一度に加えるコード変更も最小限で済みます。
この場合は、オプション 2 と同様の方法を取りつつ、プロジェクトの一部だけを `gt-next` に移行できます。
たとえば、一部のコンポーネントでは既存の i18n ライブラリを使い続け、他のコンポーネントや新しいコンテンツに対してのみ `gt-next` を使用できます。
このオプションは推奨されません。プロジェクト内で 2 つの異なる i18n ライブラリを管理する必要があり、複雑になるうえ、バグの原因になる可能性もあるためです。
## 移行のヒント
### 1. できるだけ `useGT` フックまたは `` コンポーネントを使用する
できるだけ `useGT` フックまたは `` コンポーネントを使用することをおすすめします。
こうしておくと、今後のコンテンツ編集がしやすくなり、コードベースの可読性も大幅に向上します。
### 2. 既存のコンテンツには `useTranslations` フックを使う
`useTranslations` フックは、既存の辞書をそのまま活用できる便利な方法です。
移行をしやすくするための手段として提供していますが、新しいコンテンツでの使用は推奨していません。
### 3. AIを活用する
AIを使ってプロジェクトの移行を進める場合は、次の場所から `LLMs.txt` と `LLMs-full.txt` を利用できます。
* [LLMs.txt](/llms.txt)
* [LLMs-full.txt](/llms-full.txt)