# Enterprise Live Migrations を使用したリポジトリの移行

ダウンタイムを最小限に抑えて、 GitHub Enterprise Server から GHE.com に移行します。

> \[!TIP] このガイドに従うと、使用に関する詳細な情報については [、AUTOTITLE](/ja/enterprise-server@3.22/migrations/elm/elm-cli-reference) を参照できます。 エラーが発生した場合は、 [GitHub Enterprise Server から GHE.com へのライブ マイグレーションのトラブルシューティング](/ja/enterprise-server@3.22/migrations/elm/troubleshooting) を参照してください。

## 前提条件

環境と開発者が移行の準備ができていることを確認します。 「[GitHub Enterprise Server から GHE.com へのライブ マイグレーションの準備](/ja/enterprise-server@3.22/migrations/elm/prepare-for-your-migration)」を参照してください。

## 1. GitHub Enterprise Server を設定する

トークンを作成して移行を実行する前に、 GitHub Enterprise Server インスタンスに何らかの構成を設定する必要があります。 これらの構成値は、すべての ELM 移行に適用されます。
GitHub Enterprise Serverの開発者は、新しい構成を適用するときに短いダウンタイムが発生する可能性があります。

1. SSH 経由で GitHub Enterprise Server 管理シェルにアクセスします。 「[管理シェル (SSH) にアクセスする](/ja/enterprise-server@3.22/admin/administering-your-instance/administering-your-instance-from-the-command-line/accessing-the-administrative-shell-ssh)」を参照してください。
2. `ghe-config`を使用して、次の構成変数を設定します。

   例えば： `ghe-config app.elm-exporter.enabled true`

   | Variable                                             | これを \[...] に設定します。                                                                                                                                |
   | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
   | `app.elm-exporter.enabled`                           | `true`                                                                                                                                            |
   | `app.elm.internal-webhooks-enabled`                  | `true`                                                                                                                                            |
   | `app.elm-exporter.webhooks-loopback-address-enabled` | `true`                                                                                                                                            |
   | `secrets.elm-exporter.migration-target-url`          | 移行先企業の API URL (例: `https://api.octocorp.ghe.com`)。 URL の末尾に末尾のスラッシュを含 **めないでください** 。                                                             |
   | `secrets.elm-exporter.source-user`                   | オペレーターの GitHub Enterprise Server トークンに関連付けられているユーザー名。 これは GitHub Enterprise Serverのユーザー名にする必要があります。他のユーザーがこのトークンを作成する場合は、ここでの値をユーザー名に設定する必要があります。 |

`ghe-admin` ユーザーをお勧めします。 |

1. 構成を適用します。

   ```shell copy
   ghe-config-apply
   ```

2. SSH セッションを終了します。 残りのコマンドは、ローカル ターミナル セッションで実行します。

## 2. エンタープライズ アクセス権を持つオペレーター トークンを作成する

オペレーターは、 personal access token (classic)を使用して、移行元企業と移行先企業の両方に対して認証を行う必要があります。 トークンの作成手順については、 [個人用アクセス トークンを管理する](/ja/enterprise-server@3.22/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-personal-access-token-classic) を参照してください。

次の手順で必要になりますので、**両方のトークンをメモ**しておいてください。

1. \*\*
   GitHub Enterprise Server
   \*\*で、personal access token (classic)を作成し、必要なスコープを選択します。

   * `admin:enterprise`

   このトークンは、ELM CLIを構成するときに**ソース トークン**として使用します。

2. \*\*
   GHE.com
   \*\*で、personal access token (classic)を作成し、必要なスコープを選択します。

   * `admin:enterprise`
   * `admin:org`

   このトークンは、ELM CLIを構成するときに**ターゲット トークン**として使用します。

## 3. ELM コマンド ライン ツールを構成する

GitHub CLIの拡張機能を使用して、ローカル ターミナル セッションから移行を実行します。

1. ローカル コンピューターに [GitHub CLI](https://cli.github.com/) をインストールします。 バージョン 2.0 以降を使用している必要があります。

2. ELM 拡張機能をインストールします。

   ```shell copy
   gh extension install github/gh-elm
   ```

3. インストール ウィザードを起動して拡張機能を構成します。

   ```shell copy
   gh elm configure
   ```

4. インストール ウィザードの指示に従って、ソースと宛先の API URL (例: `https://api.SUBDOMAIN.ghe.com`) と前の手順で作成したトークンを指定します。

これらの値は、任意の `gh elm` コマンドで CLI フラグとして指定することもできます。これは、構成よりも優先されます。 たとえば、 `--target-url https://api.SUBDOMAIN.ghe.com`と指定します。

このセットアップ プロセスでは、オペレーティング システムの構成ディレクトリ ( `gh-elm/config.json`) のプラットフォーム固有の構成ファイルに URL が格納されます。 アクセス トークンは、コンピューターのシークレット ストレージに安全に格納されます。

## 4. ライブ マイグレーション シークレットを構成する

エンタープライズ アクセス権を持つオペレーター トークンに加えて、ソース組織とターゲット組織の personal access token (classic) を作成する必要があります。 移行する組織ごとに、これらの手順を繰り返す必要があります。

### アクセス トークンを作成する

ELM は、移行元と移行先の両方の personal access token (classic) で認証する必要があります。 トークンの作成手順については、 [個人用アクセス トークンを管理する](/ja/enterprise-server@3.22/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-personal-access-token-classic) を参照してください。

**これらのトークンは、次の**手順で必要になりますので、必ずメモしておいてください。

1. personal access token (classic) で次のスコープを持つ GitHub Enterprise Server を作成します。

   * `repo`
   * `admin:org`
   * `admin:repo_hook`
   * `admin:org_hook`

   これがソース トークンです。

2. 次のスコープを使用して、personal access token (classic) 上に GHE.com を作成します。

   * `repo`
   * `workflow`
   * `admin:org`
   * `admin:repo_hook`
   * `admin:enterprise`

   これがターゲット トークンです。

   > \[!IMPORTANT]
   > GHE.comでターゲット組織にシングル サインオンが適用される場合は、SSO のGHE.com トークンを承認する必要があります。

### 組織の ELM シークレットを構成する

`gh elm config` コマンドを使用して、ソースとターゲットのアクセス トークンを設定します。

1. ソース トークンを設定します。

   ```shell copy
   gh elm config set-source-pat EXISTING-GHES-ORG
   ```

   要求されたら、ソース トークンをターミナルに貼り付けます。

2. ターゲット トークンを設定します。

   ```shell copy
   gh elm config set-target-pat EXISTING-GHES-ORG
   ```

   メッセージが表示されたら、ターゲット トークンをターミナルに貼り付けます。

トークンは、 `gh elm config org-tokens EXISTING-GHES-ORG`を使用して対話形式で設定することも、 `https://GHES_HOSTNAME/organizations/EXISTING-GHES-ORG/settings/secrets/elm-exporter/`の組織設定で設定することもできます。

## 5. マイグレーションを作成する

ソース リポジトリとターゲット リポジトリの詳細を指定して、新しい移行を作成します。

> \[!NOTE]
> `target-org`は新規でも既存でもかまいません。 ターゲット組織がまだ存在しない場合は、移行中に作成されます。 ただし、移行元組織の設定は移行されません。

```shell copy
gh elm migration create \
  --source-org EXISTING-GHES-ORG \
  --source-repo EXISTING-GHES-REPO \
  --target-org GHEC-ORG \
  --target-repo NEW-GHEC-REPO
```

例えば次が挙げられます。

```shell
gh elm migration create \
  --source-org my-ghes-org \
  --source-repo my-ghes-repo \
  --target-org my-dr-org \
  --target-repo my-dr-repo
```

省略可能なフラグ:

* `--start`: 移行をすぐに開始する準備ができた場合。
* `--target-visibility`: 移行されたリポジトリは、既定で **内部** 可視性を使用して作成されますが、 `private`を指定できます。

### 移行 ID を保存する

次のような応答が表示されます。

```json
{
  "migrationId": "2b5c9eae-b5da-4306-ab04-2a29cc2b7cb9",
  "expiresAt": "2026-02-11T21:49:33.619162159Z"
}
```

次のコマンドに必要な `migrationId` を変数としてエクスポートします。 例えば次が挙げられます。

```shell
export MIGRATION_ID='2b5c9eae-b5da-4306-ab04-2a29cc2b7cb9'
```

## 6. 移行を開始する

まだ移行を開始していない場合は、先ほど保存した移行 ID を使用して移行を開始します。

```shell copy
gh elm migration start --migration-id $MIGRATION_ID
```

これにより、バックフィルとライブ更新プロセスが起動します。
ELM は現在、ソース リポジトリからデータを収集し、サポートされている Webhook イベントをリッスンしています。

## 7. 移行を監視する

移行が開始されると、 GHE.comに新しいリポジトリが表示されます。 移行中は、開発者がソース リポジトリで作業を続ける際に、リポジトリにデータの初期読み込みが入力され、更新プログラムが受信されます。

`watch` コマンドを使用して、移行の進行状況を対話形式で監視できます。

```shell
gh elm migration watch $MIGRATION_ID
```

これにより、移行状態 API がポーリングされ、現在の進行状況を反映した自己更新テキスト UI が表示されます。

### `migration status` を使用したプログラムによるモニタリング

自動化に適した移行状態が必要な場合は、 `status` コマンドを使用します。

```shell copy
gh elm migration status --migration-id $MIGRATION_ID
```

応答で最も重要なインジケーターは、 **combinedState** オブジェクトの状態です。 状態が `COMBINED_STATUS_READY_FOR_CUTOVER`に達すると、次の手順に進む準備が整います。 ただし、個々のリソースの移行に失敗した場合は、 `displayMessage` でアラートが表示されます。調査が必要な場合があります。

例えば次が挙げられます。

```json
  "combinedState":  {
    "status":  "COMBINED_STATUS_READY_FOR_CUTOVER",
    "displayMessage":  "Ready for cutover (1 resources failed)",
    "repositories":  [
      {
        "repositoryNwo":  "new-test-org/my-new-repo",
        "phase":  "REPOSITORY_PHASE_READY_FOR_CUTOVER",
        "displayStatus":  "Ready for cutover (1 failed)"
      }
    ],
    "readyForCutover":  true,
    "cutoverBlockers":  []
  },
```

ヒント:

* 複数の移行を実行している場合は、すべての移行の状態を `gh elm migration list`で確認できます。 このコマンドは、既定で進行中の移行を示しますが、 `--status`でフィルター処理することもできます。
* 注意が必要なエラー状態が発生した場合は、 [GitHub Enterprise Server から GHE.com へのライブ マイグレーションのトラブルシューティング](/ja/enterprise-server@3.22/migrations/elm/troubleshooting#statuses-and-recommended-actions) を参照してください。

## 8. 移行を完了する

カットオーバーに向けて移行準備ができたら、移行を完了できます。 カットオーバー プロセスによってソース リポジトリがアーカイブされ、リポジトリ管理者がアーカイブを解除しない限り **、完全に読み取り専用** になります。

```shell copy
gh elm migration cutover --migration-id $MIGRATION_ID
```

引き続き移行を監視します。 応答の上部に `MIGRATION_STATUS_COMPLETED` の状態が表示されると、移行は完了しますが、 GitHub Enterprise Serverからユーザーにアクセス権を付与するためのフォローアップ タスクがいくつかあります。

## 次のステップ

ユーザーに新しいリポジトリへのアクセス権を付与し、ユーザー アカウントを使用してアクティビティを調整します。 「[GitHub Enterprise Server から GHE.com へのライブ マイグレーションの完了](/ja/enterprise-server@3.22/migrations/elm/complete-your-migration)」を参照してください。