# プレビルドの構成

変更をリポジトリにプッシュするたびに自動的に codespace をプレビルドするようにプロジェクトを構成できます。

プレビルド構成は、リポジトリの特定のブランチと特定の開発コンテナー構成ファイルの組み合わせに対して設定できます。

通常、プレビルドが有効な親ブランチから作られたブランチはすべて、同じ開発コンテナー構成のプレビルドも取得します。 これは、親ブランチと同じ開発コンテナー構成を使う子ブランチのプレビルドがほとんどの場合同一であるためであり、これにより、開発者はこれらのブランチの codespace の作成時間を短縮できるというメリットも得られます。 「[開発コンテナーの概要](/ja/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/introduction-to-dev-containers)」を参照してください。

通常、ブランチにプレビルドを構成すると、複数のマシンの種類でプレビルドを使用できるようになります。 しかし、リポジトリが 32 GB を超える場合、提供されるストレージは 32 GB に制限されているため、2 コアと 4 コアのマシンの種類ではプレビルドを使用できません。

## 前提条件

事前ビルドは、 GitHub Actionsを使用して作成されます。 その結果、事前ビルドを構成するリポジトリに対して GitHub Actions を有効にする必要があります。 「[リポジトリのGitHub Actions設定の管理](/ja/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository)」を参照してください。

個人アカウントが所有しているリポジトリにプレビルドを設定できます。 プレビルドによってストレージ領域が消費されます。この場合、課金対象の料金が発生するか、個人用アカウントで所有しているリポジトリでは、毎月含まれているストレージの一部が使用されます。

> \[!NOTE]
> フォークされたリポジトリの事前ビルドを作成した場合、それらの事前ビルドのストレージ コストは、使用可能な間は、毎月含まれるストレージから減算されます。 含まれているすべてのストレージを使用し、請求を設定している場合は、パーソナル アカウントに請求されます。 これは、フォーク用に作成した Codespaces が、親リポジトリを所有する組織によって支払われる場合でも当てはまります。[「AUTOTITLE」を](/ja/billing/concepts/product-billing/github-codespaces#how-costs-are-assigned-to-a-billable-account)参照してください。

組織が所有するリポジトリの場合は、組織が GitHub Team または GitHub Enterprise プランを使用している場合は、事前ビルドを設定できます。 さらに、支払い方法を追加し、組織アカウントまたはその親企業の GitHub Codespaces の使用制限を設定する必要があります。 「[従量制課金製品の支出を管理するための予算を設定する](/ja/billing/how-tos/set-up-budgets#managing-budgets-for-your-organization-or-enterprise)」と「[GitHubのプラン](/ja/get-started/learning-about-github/githubs-plans)」を参照してください。

## プレビルドの構成

1. GitHub で、リポジトリのメイン ページに移動します。

2. リポジトリ名の下にある **<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-gear" aria-label="gear" role="img"><path d="M8 0a8.2 8.2 0 0 1 .701.031C9.444.095 9.99.645 10.16 1.29l.288 1.107c.018.066.079.158.212.224.231.114.454.243.668.386.123.082.233.09.299.071l1.103-.303c.644-.176 1.392.021 1.82.63.27.385.506.792.704 1.218.315.675.111 1.422-.364 1.891l-.814.806c-.049.048-.098.147-.088.294.016.257.016.515 0 .772-.01.147.038.246.088.294l.814.806c.475.469.679 1.216.364 1.891a7.977 7.977 0 0 1-.704 1.217c-.428.61-1.176.807-1.82.63l-1.102-.302c-.067-.019-.177-.011-.3.071a5.909 5.909 0 0 1-.668.386c-.133.066-.194.158-.211.224l-.29 1.106c-.168.646-.715 1.196-1.458 1.26a8.006 8.006 0 0 1-1.402 0c-.743-.064-1.289-.614-1.458-1.26l-.289-1.106c-.018-.066-.079-.158-.212-.224a5.738 5.738 0 0 1-.668-.386c-.123-.082-.233-.09-.299-.071l-1.103.303c-.644.176-1.392-.021-1.82-.63a8.12 8.12 0 0 1-.704-1.218c-.315-.675-.111-1.422.363-1.891l.815-.806c.05-.048.098-.147.088-.294a6.214 6.214 0 0 1 0-.772c.01-.147-.038-.246-.088-.294l-.815-.806C.635 6.045.431 5.298.746 4.623a7.92 7.92 0 0 1 .704-1.217c.428-.61 1.176-.807 1.82-.63l1.102.302c.067.019.177.011.3-.071.214-.143.437-.272.668-.386.133-.066.194-.158.211-.224l.29-1.106C6.009.645 6.556.095 7.299.03 7.53.01 7.764 0 8 0Zm-.571 1.525c-.036.003-.108.036-.137.146l-.289 1.105c-.147.561-.549.967-.998 1.189-.173.086-.34.183-.5.29-.417.278-.97.423-1.529.27l-1.103-.303c-.109-.03-.175.016-.195.045-.22.312-.412.644-.573.99-.014.031-.021.11.059.19l.815.806c.411.406.562.957.53 1.456a4.709 4.709 0 0 0 0 .582c.032.499-.119 1.05-.53 1.456l-.815.806c-.081.08-.073.159-.059.19.162.346.353.677.573.989.02.03.085.076.195.046l1.102-.303c.56-.153 1.113-.008 1.53.27.161.107.328.204.501.29.447.222.85.629.997 1.189l.289 1.105c.029.109.101.143.137.146a6.6 6.6 0 0 0 1.142 0c.036-.003.108-.036.137-.146l.289-1.105c.147-.561.549-.967.998-1.189.173-.086.34-.183.5-.29.417-.278.97-.423 1.529-.27l1.103.303c.109.029.175-.016.195-.045.22-.313.411-.644.573-.99.014-.031.021-.11-.059-.19l-.815-.806c-.411-.406-.562-.957-.53-1.456a4.709 4.709 0 0 0 0-.582c-.032-.499.119-1.05.53-1.456l.815-.806c.081-.08.073-.159.059-.19a6.464 6.464 0 0 0-.573-.989c-.02-.03-.085-.076-.195-.046l-1.102.303c-.56.153-1.113.008-1.53-.27a4.44 4.44 0 0 0-.501-.29c-.447-.222-.85-.629-.997-1.189l-.289-1.105c-.029-.11-.101-.143-.137-.146a6.6 6.6 0 0 0-1.142 0ZM11 8a3 3 0 1 1-6 0 3 3 0 0 1 6 0ZM9.5 8a1.5 1.5 0 1 0-3.001.001A1.5 1.5 0 0 0 9.5 8Z"></path></svg> \[Settings]** をクリックします。 \[設定] タブが表示されない場合は、 **\[<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-kebab-horizontal" aria-label="More" role="img"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg>]** ドロップダウン メニューを選び、 **\[設定]** をクリックします。

   ![タブを示すリポジトリ ヘッダーのスクリーンショット。 \[設定\] タブが濃いオレンジ色の枠線で強調表示されています。](/assets/images/help/repository/repo-actions-settings.png)

3. サイドバーの \[Code, planning, and automation]\(コード、計画、自動化) の下で、 \[ **<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-codespaces" aria-label="codespaces" role="img"><path d="M0 11.25c0-.966.784-1.75 1.75-1.75h12.5c.966 0 1.75.784 1.75 1.75v3A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm2-9.5C2 .784 2.784 0 3.75 0h8.5C13.216 0 14 .784 14 1.75v5a1.75 1.75 0 0 1-1.75 1.75h-8.5A1.75 1.75 0 0 1 2 6.75Zm1.75-.25a.25.25 0 0 0-.25.25v5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5a.25.25 0 0 0-.25-.25Zm-2 9.5a.25.25 0 0 0-.25.25v3c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-3a.25.25 0 0 0-.25-.25Z"></path><path d="M7 12.75a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path></svg>Codespaces**] をクリックします。

4. ページの \[プレビルド構成] セクションで、 **\[プレビルドの設定]** をクリックします。

   ![\[Codespaces\] 設定ページの \[プレビルド構成\] セクションのスクリーンショット。\[プレビルドの設定\] ボタンが表示されています。](/assets/images/help/codespaces/prebuilds-set-up.png)

5. プレビルドを設定するブランチを選びます。

   ![プレビルドの \[構成\] 設定のスクリーンショット。ドロップダウン メニューには選択対象のブランチが一覧表示されています。 "main" ブランチが現在選択されています。](/assets/images/help/codespaces/prebuilds-choose-branch.png)

   > \[!NOTE]
   > 通常、プレビルドが有効なベース ブランチから作られたブランチもすべて、同じ開発コンテナー構成に対するプレビルドを取得します。 たとえば、リポジトリの既定のブランチで開発コンテナー構成ファイルのプレビルドを有効にすると、ほとんどの場合、既定のブランチに基づくブランチも同じ開発コンテナー構成のプレビルドを取得するようになります。

6. 必要に応じて、表示される **\[構成ファイル]** ドロップダウン メニューで、ご自分のプレビルドに使う `devcontainer.json` 構成ファイルを選びます。 「[開発コンテナーの概要](/ja/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/introduction-to-dev-containers#devcontainerjson)」を参照してください。

   ![構成ファイルのドロップダウン メニューのスクリーンショット。 4 つの構成ファイルが一覧表示されており、".devcontainer/devcontainer.json" が現在選択されています。](/assets/images/help/codespaces/prebuilds-choose-configfile.png)

7. プレビルドの更新を自動的にトリガーする方法を選びます。

   * **すべてのプッシュ** (既定の設定) - この設定では、特定のブランチに対して行われるすべてのプッシュで、プレビルドの構成が更新されます。 これにより、プレビルドから生成された codespace には、最近追加または更新された依存関係を含む最新の codespace 構成が常に含まれます。

   * **構成変更時** - この設定では、次のいずれかのファイルが変更されるたびにプレビルドが更新されます。

     * `.devcontainer/devcontainer.json`

       > \[!NOTE]
       > プレビルドの更新は、`devcontainer.json` のサブディレクトリ内の `.devcontainer` ファイルに対する変更ではトリガーされません。

     * `build.dockerfile` ファイルの `.devcontainer/devcontainer.json` プロパティで参照される Dockerfile。

     この設定により、プレビルドから codespace が生成されるときに、リポジトリの開発コンテナー構成ファイルに対する変更が確実に使用されます。 プレビルドを更新する GitHub Actions ワークフローの実行頻度は低くなります。そのため、このオプションの使用時間は GitHub Actions 分も少なくなります。 ただし、このオプションでは、codespace に常に最近追加または更新された依存関係が含まれるという保証はないため、codespace の作成後に手動で追加または更新する必要がある場合があります。

   * **スケジュール済み** - この設定では、ユーザーが定義したカスタム スケジュールに基づいてプレビルドを更新できます。 これにより、 GitHub Actions 分の消費を減らすことができますが、このオプションでは、最新の開発コンテナー構成の変更を使用しないコードスペースを作成できます。

   ![\[プレビルド トリガー\] 設定のスクリーンショット。 \[スケジュール済み\] オプションが選択されており、"毎日" の "午後 1 時" と "午後 3 時 30 分" に設定されています。](/assets/images/help/codespaces/prebuilds-triggers.png)

8. 必要に応じて、 **\[特定のリージョンでのみ使用できるプレビルドを減らす]** を選び、指定したリージョンにのみプレビルドを作成します。 プレビルドを使用できるようにするリージョンを選びます。

   既定では、使用可能なすべてのリージョンにプレビルドが作成され、プレビルドごとにストレージ料金が発生します。

   ![\[リージョンの可用性\] 設定のスクリーンショット。 \[特定のリージョンでのみ使用できるプレビルドを減らす\] が選択されており、2 つのリージョンが選択されています。](/assets/images/help/codespaces/prebuilds-regions.png)

   > \[!NOTE]
   >
   > * 各リージョンのプレビルドでは、個々のストレージ料金が発生します。 そのため、使用されることがわかっているリージョンに対してのみプレビルドを有効にする必要があります。
   > * 開発者は、 GitHub Codespacesの既定のリージョンを設定できます。これにより、より少ないリージョンで事前ビルドを有効にすることができます。 「[GitHub Codespaces の既定のリージョンの設定](/ja/codespaces/setting-your-user-preferences/setting-your-default-region-for-github-codespaces)」を参照してください。

9. 必要に応じて、 **\[テンプレートの履歴]** で、保持するプレビルドのバージョンを設定します。 1 から 5 の任意の数を入力できます。 保存されるバージョンの既定の数は 2 です。つまり、最新のプレビルドと前のバージョンのみが保存されます。

   ![\[テンプレートの履歴\] 設定のスクリーンショット。 2 つのバージョンに設定されています。](/assets/images/help/codespaces/prebuilds-template-history-setting.png)

   プレビルドのトリガー設定によっては、プッシュごと、または開発コンテナー構成の変更ごとに、プレビルドが変更される可能性があります。 以前のバージョンのプレビルドを保持すると、現在のプレビルドとは異なる開発コンテナー構成を使用して、以前のコミットからプレビルドを作成できます。 この設定を使用すると、保持されているバージョンの数を、ニーズに適したレベルに設定できます。

   保存するビルド前のバージョンの数を 1 に設定した場合、 GitHub Codespaces はプレビルドの最新バージョンのみを保存し、テンプレートが更新されるたびに古いバージョンを削除します。 つまり、以前の開発コンテナー構成に戻った場合、プレビルドの codespace は取得されません。

   保持されている各プレビルド バージョンには、ストレージ コストが関連付けられています。 たとえば、4 つのリージョンでプレビルドを生成し、2 つのバージョンを保持している場合、最大 8 つのプレビルドのストレージに対して課金されます。 「[GitHub Codespaces の課金](/ja/billing/concepts/product-billing/github-codespaces#pricing)」を参照してください。

10. 必要に応じて、この構成でプレビルド ワークフローの実行が失敗したときに通知するユーザーまたはチームを追加します。 ユーザー名、チーム名、またはフル ネームの入力を開始し、表示されたら名前をクリックしてリストに追加できます。 追加したユーザーまたはチームは、プレビルド エラーが発生したときに電子メールを受信します。詳しい調査に役立つワークフロー実行ログへのリンクが含まれています。

    ![\[失敗通知\] 設定のスクリーンショット。 "octocat-team" という名前のチームが追加されました。](/assets/images/help/codespaces/prebuilds-failure-notification-setting.png)

    > \[!NOTE]
    > ユーザーは、個人設定で Actions ワークフローの失敗通知を有効にしている場合のみ、プレビルドの失敗通知を受け取ります。 「[ワークフロー実行の通知](/ja/actions/concepts/workflows-and-actions/notifications-for-workflow-runs)」を参照してください。

11. 必要に応じて、ページの下部にある **\[詳細オプションの表示]** をクリックします。

    ![プレビルド構成ページの下部のスクリーンショット。 \[詳細オプションの表示\] リンクが濃いオレンジ色の枠線で強調表示されています。](/assets/images/help/codespaces/show-advanced-options.png)

    \[詳細オプション] セクションで、 **\[プレビルドの最適化を無効にする]** を選んだ場合、最新のプレビルド ワークフローが失敗したか、現在実行中の場合は、プレビルドなしで codespace が作成されます。 「[プレビルドのトラブルシューティング](/ja/codespaces/troubleshooting/troubleshooting-prebuilds#preventing-out-of-date-prebuilds-being-used)」を参照してください。

12. **Create** をクリックしてください。

    リポジトリの開発コンテナー構成で他のリポジトリにアクセスするためのアクセス許可が指定されている場合は、認可ページが表示されます。 `devcontainer.json` ファイルでこれを指定する方法の詳細については、「[codespace 内の他のリポジトリへのアクセスの管理](/ja/codespaces/managing-your-codespaces/managing-repository-access-for-your-codespaces)」を参照してください。

    <svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-chevron-down" aria-label="The expand down icon" role="img"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg> をクリックして、要求されたアクセス許可の詳細を表示します。

    ![プレビルド構成の承認ページのスクリーンショット。 この要求では、3 つのアクセス許可が指定されています。](/assets/images/help/codespaces/prebuild-authorization-page.png)

    **\[認可して続行する]** をクリックし、プレビルドを作成するためにこれらのアクセス許可を付与します。 または、 **\[認可せずに続行する]** をクリックすることもできますが、その場合は、結果のプレビルドから作られる codespace が正しく機能しない可能性があります。

    > \[!NOTE]
    > このプレビルドを使って codespace を作成するユーザーも、これらのアクセス許可を付与するように求められます。

ビルド前の構成を作成すると、リポジトリ設定の GitHub Codespaces ページに一覧表示されます。
GitHub Actions ワークフローがキューに登録され、選択したブランチと開発コンテナーの構成ファイルに基づいて、指定したリージョンに事前ビルドを作成するために実行されます。

![プレビルド構成の一覧のスクリーンショット。 "現在実行中" という 1 つのプレビルドが表示されています。 その右側に \[出力の表示\] ボタンがあります。](/assets/images/help/codespaces/prebuild-configs-list.png)

プレビルド構成の編集と削除に関する詳細については、「[事前ビルドの管理](/ja/codespaces/prebuilding-your-codespaces/managing-prebuilds)」を参照してください。

## 環境変数の設定

開発環境を作成するために必要な環境変数に事前ビルド プロセスがアクセスできるようにするには、これらを Codespaces リポジトリ シークレットまたは Codespaces 組織のシークレットとして設定できます。 この方法で作ったシークレットは、このリポジトリから codespace を作るすべてのユーザーがアクセスできます。 「[リポジトリまたは Organization の開発環境シークレットの管理](/ja/codespaces/managing-codespaces-for-your-organization/managing-development-environment-secrets-for-your-repository-or-organization#adding-secrets-for-a-repository)」を参照してください。

環境の構築中は、プレビルドでユーザー レベルのシークレットを使うことはできません。これは、codespace が作られるまで利用できないためです。

## プレビルドに含める時間のかかるタスクの構成

`onCreateCommand` で `updateContentCommand` および `devcontainer.json` コマンドを使用して、プレビルド作成の一部として時間のかかるプロセスを含めることができます。
Visual Studio Codeドキュメントdevcontainer.json [ 参照してください](https://code.visualstudio.com/docs/remote/devcontainerjson-reference#_lifecycle-scripts)。

`onCreateCommand` はプレビルドが作成されるときに 1 回だけ実行されますが、`updateContentCommand` はテンプレートの作成時とそれ以降の更新時に実行されます。 インクリメンタル ビルドは `updateContentCommand` に含める必要があります。これらはプロジェクトのソースを表し、プレビルドの更新ごとに含める必要があるためです。

## 参考資料

* [プレビルドで他のリポジトリにアクセスできるようにする](/ja/codespaces/prebuilding-your-codespaces/allowing-a-prebuild-to-access-other-repositories)
* [プレビルドのトラブルシューティング](/ja/codespaces/troubleshooting/troubleshooting-prebuilds)