

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# モノレポビルド設定の構成
<a name="monorepo-configuration"></a>

複数のプロジェクトやマイクロサービスを単一のリポジトリに格納することをモノレポと呼びます。Amplify ホスティングを使用すると、複数のビルド構成やブランチ構成を作成しなくても、モノレポにアプリケーションをデプロイできます。

Amplify は、一般的なモノレポのアプリだけでなく、npm ワークスペース、pnpm ワークスペース、Yarn ワークスペース、Nx、および Turborepo を使用して作成されたモノレポのアプリもサポートします。アプリをデプロイすると、Amplify は使用しているモノレポビルドツールを自動的に検出します。Amplify は、npmワークスペース、Yarnワークスペース、またはNxのアプリにビルド設定を自動的に適用します。Turborepo と pnpm アプリには、追加設定が必要です。詳細については、「[Turborepo アプリと pnpm モノレポアプリの設定](#turborepo-pnpm-monorepo-configuration)」を参照してください。

モノレポのビルド設定は Amplify コンソールに保存することも、`amplify.yml` ファイルをダウンロードしてリポジトリのルートに追加することもできます。Amplify は、リポジトリで `amplify.yml` ファイルを見つけない限り、コンソールに保存された設定をすべてのブランチに適用します。`amplify.yml` ファイルが存在する場合、その設定は Amplify コンソールに保存されているビルド設定よりも優先されます。

## モノレポビルド仕様 YAML 構文のリファレンス
<a name="monorepo-yml-syntax"></a>

モノレポビルド仕様の YAML 構文は、単一のアプリケーションを含むリポジトリの YAML 構文とは異なります。モノレポでは、各プロジェクトをアプリケーションのリストで宣言します。モノレポビルド仕様で宣言するアプリケーションごとに、以下の追加 `appRoot` キーを指定する必要があります。

**appRoot**  
アプリケーションが起動するリポジトリ内のルート。キーは必ず存在する必要があり、環境変数 `AMPLIFY_MONOREPO_APP_ROOT` と同じ値となります。この環境変数を設定する手順については、[AMPLIFY\$1MONOREPO\$1APP\$1ROOT 環境変数の設定](#setting-monorepo-environment-variable) を参照してください。

以下のモノレポビルド仕様の例は、同じリポジトリで複数の Amplify アプリケーションを宣言する方法を示しています。2 つのアプリ (`react-app` と `angular-app`) は `applications` リストで宣言されます。各アプリの `appRoot` キーは、そのアプリケーションがリポジトリの `apps` ルートフォルダーにあることを示しています。

この `buildpath` 属性は、モノレポプロジェクトルートからアプリを実行してビルドするように `/` に設定されます。`baseDirectory` 属性は `buildpath` の相対パスです。

### モノレポビルド仕様 YAML 構文
<a name="monorepo-build-yaml-syntax"></a>

```
version: 1
applications:
  - appRoot: apps/react-app
    env:
      variables:
        key: value
    backend:
      phases:
        preBuild:
          commands:
            - *enter command*
        build:
          commands:
            - *enter command*
        postBuild:
            commands:
            - *enter command*
    frontend:
      buildPath: / # Run install and build from the monorepo project root
      phases:
        preBuild:
          commands:
            - *enter command*
            - *enter command*
        build:
          commands:
            - *enter command*
      artifacts:
        files:
            - location
            - location
        discard-paths: yes
        baseDirectory: location
      cache:
        paths:
            - path
            - path
    test:
      phases:
        preTest:
          commands:
            - *enter command*
        test:
          commands:
            - *enter command*
        postTest:
          commands:
            - *enter command*
      artifacts:
        files:
            - location
            - location
        configFilePath: *location*
        baseDirectory: *location*
  - appRoot: apps/angular-app
    env:
      variables:
        key: value
    backend:
      phases:
        preBuild:
          commands:
            - *enter command*
        build:
          commands:
            - *enter command*
        postBuild:
            commands:
            - *enter command*
    frontend:
      phases:
        preBuild:
          commands:
            - *enter command*
            - *enter command*
        build:
          commands:
            - *enter command*
      artifacts:
        files:
            - location
            - location
        discard-paths: yes
        baseDirectory: location
      cache:
        paths:
            - path
            - path
    test:
      phases:
        preTest:
          commands:
            - *enter command*
        test:
          commands:
            - *enter command*
        postTest:
          commands:
            - *enter command*
      artifacts:
        files:
            - location
            - location
        configFilePath: *location*
        baseDirectory: *location*
```

次のビルド仕様例を使用するアプリは、プロジェクトルートの下にビルドされ、ビルドアーティファクトは `/packages/nextjs-app/.next` に配置されます。

```
applications:
  - frontend:
      buildPath: '/'  # run install and build from monorepo project root
      phases:
        preBuild:
          commands:
            - npm install
        build:
          commands:
            - npm run build --workspace=nextjs-app
      artifacts:
        baseDirectory: packages/nextjs-app/.next
        files:
          - '**/*'
      cache:
        paths:
          - node_modules/**/*
    appRoot: packages/nextjs-app
```

## AMPLIFY\$1MONOREPO\$1APP\$1ROOT 環境変数の設定
<a name="setting-monorepo-environment-variable"></a>

モノレポに保存されたアプリをデプロイする場合、アプリの環境変数 `AMPLIFY_MONOREPO_APP_ROOT` は、リポジトリのルートを基準にしたアプリルートのパスと同じ値でなければなりません。たとえば、`ExampleMonorepo` という名前のモノレポに、`app1`、`app2` を含む `apps` という名前のルートフォルダがあり、`app3` は次のようなディレクトリ構造を持つとします。

```
ExampleMonorepo
  apps
    app1
    app2
    app3
```

この例では、`app1` の環境変数 `AMPLIFY_MONOREPO_APP_ROOT` の値は `apps/app1` です。

Amplify コンソールを使用してモノレポアプリをデプロイすると、コンソールはアプリのルートへのパスに指定した値を使用して環境変数 `AMPLIFY_MONOREPO_APP_ROOT` を自動的に設定します。ただし、モノレポアプリが既に Amplify に存在するか、 を使用してデプロイされている場合は AWS CloudFormation、Amplify コンソールの`AMPLIFY_MONOREPO_APP_ROOT`環境変数セクションで**環境変数**を手動で設定する必要があります。

### デプロイ時に AMPLIFY\$1MONOREPO\$1APP\$1ROOT 環境変数を自動的に設定する
<a name="setting-monorepo-environmnet-variable-automatically"></a>

以下の手順は、Amplify コンソールでモノレポアプリをデプロイする方法を示しています。Amplify は、コンソールで指定したアプリのルートフォルダーを使用して環境変数 `AMPLIFY_MONOREPO_APP_ROOT` を自動的に設定します。

**Amplify コンソールでモノレポアプリをデプロイするには**

1. にサインイン AWS マネジメントコンソール し、[Amplify コンソール](https://console.aws.amazon.com/amplify/)を開きます。

1. 右上隅の **[アプリの新規作成]** を選択します。

1. **[Amplify で構築を開始する]** ページで、お使いの Git プロバイダーを選択し、**[次へ]** を選択します。

1. **[リポジトリブランチを追加]** ページで、次の操作を行います。

   1. リストからリポジトリの名前を選択します。

   1. 使用するブランチの名前を選択します。

   1. **[My アプリがモノレポです]** を選択する

   1. モノレポにアプリへのパスを入力します (例:**apps/app1**)。

   1. [**次へ**] を選択します。

1. **[アプリ設定]** ページでは、デフォルト設定を使用するか、アプリのビルド設定をカスタマイズできます。**[環境変数]** セクションで、Amplify はステップ 4d で指定したパスに `AMPLIFY_MONOREPO_APP_ROOT` を設定します。

1. [**次へ**] を選択します。

1. [**確認**]ページ で、[**保存してデプロイ**]を選択します。

### 既存のアプリケーションの AMPLIFY\$1MONOREPO\$1APP\$1ROOT 環境変数を設定する
<a name="setting-monorepo-environment-variable-manually"></a>

以下の手順を使用して、Amplify にすでにデプロイされているアプリ、または CloudFormation を使用して作成されたアプリの環境変数 `AMPLIFY_MONOREPO_APP_ROOT` を手動で設定します。

**既存のアプリケーションの AMPLIFY\$1MONOREPO\$1APP\$1ROOT 環境変数を設定するには**

1. にサインイン AWS マネジメントコンソール し、[Amplify コンソール](https://console.aws.amazon.com/amplify/)を開きます。

1. 環境変数を設定するアプリの名前を選択します。

1. ナビゲーションペインで、**[ホスティング]**、**[環境変数]** の順で選択します。

1. 「**環境変数**」ページで、[**変数の管理**] を選択します。

1. **[変数の管理]**セクションで、次の操作を行います。

   1. [**新規追加**] を選択します。

   1. [**変数**] にはキー `AMPLIFY_MONOREPO_APP_ROOT` を入力します。

   1. [**値**] には、アプリへのパスを入力します (例:**apps/app1**)。

   1. [**ブランチ**] の場合、Amplify はデフォルトで環境変数をすべてのブランチに適用します。

1. [**保存**] を選択します。

## Turborepo アプリと pnpm モノレポアプリの設定
<a name="turborepo-pnpm-monorepo-configuration"></a>

Turborepo と pnpm ワークスペースのモノレポビルドツールは `.npmrc` ファイルから構成情報を取得します。これらのツールのいずれかで作成したモノレポアプリをデプロイする場合、プロジェクトのルートディレクトリに `.npmrc` ファイルを置く必要があります。

この `.npmrc` ファイルで、ノードパッケージをインストールするためのリンカーを `hoisted` に設定します。以下の行をファイルにコピーできます。

```
node-linker=hoisted
```

`.npmrc` ファイルと設定について詳しくは、「*pnpm ドキュメント*」の「[pnpm .npmrc](https://pnpm.io/next/npmrc)」を参照してください。

pnpm は Amplify のデフォルトビルドコンテナには含まれていません。pnpm ワークスペースと Turborepo アプリの場合、アプリのビルド設定の `preBuild` 段階で pnpm をインストールするコマンドを追加する必要があります。

次のビルド仕様からの抜粋例は、pnpm をインストールするコマンドを含む `preBuild` フェーズを示しています。

```
version: 1
applications:
  - frontend:
      phases:
        preBuild:
          commands:
            - npm install -g pnpm
```