# GitHub Codespaces prebuilds について

GitHub Codespaces プレビルドは、大規模または複雑なリポジトリの新しい codespace の作成を高速化するのに役立ちます。

## 概要

プレビルドでは、リポジトリ、ブランチ、`devcontainer.json` 構成ファイルの特定の組み合わせに対して、codespace の主要コンポーネントが組み立てられます。 これにより、新しい codespace をすばやく作成できます。 特に複雑なリポジトリや大規模なリポジトリの場合は、プレビルドを使うことで新しい codespace をより迅速に作成できます。

リポジトリの codespace の作成に現在 2 分以上かかる場合、プレビルドを使用すると改善することがあります。 これは、プレビルドを使用する場合、プロジェクト用の codespace を作成する前に、ソース コード、エディター拡張機能、プロジェクトの依存関係、コマンド、構成が既にダウンロード、インストール、適用されているためです。

既定では、リポジトリに変更をプッシュするたびに、GitHub Codespaces は GitHub Actions を使って、プレビルドを自動的に更新します。

リポジトリの特定のブランチ、特定の開発コンテナー構成ファイル、自分のリージョンでプレビルドを使用できる場合、codespace を作成するときに、コンピューターの種類オプションの一覧に、<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-zap" aria-label="zap" role="img"><path d="M9.504.43a1.516 1.516 0 0 1 2.437 1.713L10.415 5.5h2.123c1.57 0 2.346 1.909 1.22 3.004l-7.34 7.142a1.249 1.249 0 0 1-.871.354h-.302a1.25 1.25 0 0 1-1.157-1.723L5.633 10.5H3.462c-1.57 0-2.346-1.909-1.22-3.004L9.503.429Zm1.047 1.074L3.286 8.571A.25.25 0 0 0 3.462 9H6.75a.75.75 0 0 1 .694 1.034l-1.713 4.188 6.982-6.793A.25.25 0 0 0 12.538 7H9.25a.75.75 0 0 1-.683-1.06l2.008-4.418.003-.006a.036.036 0 0 0-.004-.009l-.006-.006-.008-.001c-.003 0-.006.002-.009.004Z"></path></svg> \[Prebuild ready] というラベルが表示されます。 プレビルドがまだ作成中の場合、<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-history" aria-label="history" role="img"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg> \[Prebuild in progress] というラベルが表示されます。 詳しくは、「[リポジトリの codespace を作成する](/ja/codespaces/developing-in-a-codespace/creating-a-codespace-for-a-repository#creating-a-codespace-for-a-repository)」をご覧ください。

![使用可能なマシンの種類の一覧 (2、4、8、16、32 コア) のスクリーンショット。すべてに \[プレビルド対応\] というラベルが付いています。](/assets/images/help/codespaces/choose-custom-machine-type.png)

"Your codespaces" ページでテンプレートから codespace を作成するとき、GitHub では、自動的にプレビルドを使用して作成時間を短縮できます。 テンプレートについて詳しくは、「[テンプレートから codespace を作成する](/ja/codespaces/developing-in-a-codespace/creating-a-codespace-from-a-template)」を参照してください。

> \[!NOTE]
> 作成された各プレビルドではストレージ領域が消費され、それによって、課金対象の料金が発生するか、または個人用 GitHub アカウントが所有するリポジトリの場合は、含まれる月間ストレージの一部が使用されます。 詳しくは、「[GitHub Codespaces の課金](/ja/billing/concepts/product-billing/github-codespaces)」をご覧ください。

## プレビルドのプロセス

プレビルドを作成するには、プレビルドの構成を設定します。 構成を保存すると、GitHub Actions ワークフローが実行され、必要な各ビルド (プレビルドごとに 1 つのワークフロー) が作成されます。 ワークフローは、構成のプレビルドを更新する必要がある場合にも実行されます。 これは、スケジュールされた間隔、プレビルドが有効なリポジトリへのプッシュ時、または開発コンテナーの構成を変更するときに発生する可能性があります。 詳しくは、「[プレビルドの構成](/ja/codespaces/prebuilding-your-codespaces/configuring-prebuilds#configuring-prebuilds)」をご覧ください。

プレビルドの構成ワークフローが実行されると、GitHub により一時的な codespace が作成され、`onCreateCommand` ファイル内の任意の `updateContentCommand` および `devcontainer.json` コマンドまでの設定操作が実行されます。 プレビルドの作成時に `postCreateCommand` コマンドは実行されません。 これらのコマンドについて詳しくは、VS Code ドキュメントの「[`devcontainer.json` リファレンス](https://code.visualstudio.com/docs/remote/devcontainerjson-reference#_devcontainerjson-properties)」を参照してください。 生成されたコンテナーのスナップショットが取得され、格納されます。

その他の GitHub Actions ワークフローと同様に、プレビルド構成ワークフローを実行すると、アカウントに含まれている GitHub Actions 分が残っている場合、それが使用されます。あるいは、GitHub Actions 分に対して料金が発生します。 codespace プレビルドのストレージは、アクティブな codespace または停止した codespace のストレージと同じ方法で課金されます。 詳しくは、「[GitHub Codespaces の課金](/ja/billing/managing-billing-for-your-products/managing-billing-for-github-codespaces/about-billing-for-github-codespaces)」をご覧ください。

プレビルドから codespace を作成すると、GitHub によりストレージから既存のコンテナー スナップショットがダウンロードされ、それを新しい仮想マシンにデプロイし、開発コンテナー構成で指定された残りのコマンドを完了します。 リポジトリの複製など、多くの操作が既に実行されているため、プレビルドから codespace を作成する方が、プレビルドなしで作成するよりも大幅に速くなる可能性があります。 これは、リポジトリが大きい場合や `onCreateCommand` コマンドの実行に時間がかかる場合に当てはまります。

## プレビルドが有効なブランチへの変更をプッシュする際について

既定では、プレビルドの構成があるブランチにプッシュするたびに、GitHub で管理される GitHub Actions ワークフローが実行され、プレビルドが更新されます。 関連するリポジトリの開発コンテナー構成に影響を与える変更が行われたのでない限り、プレビルド ワークフローには、特定のプレビルド構成に対して一度に 1 つのワークフロー実行というコンカレンシー制限があります。 詳しくは、「[開発コンテナーの概要](/ja/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/introduction-to-dev-containers)」をご覧ください。 実行が既に進行中の場合は、現在の実行が完了した後、最後にキューに登録されたワークフロー実行が次に実行されます。

プッシュのたびにプレビルドが更新されるように設定すると、リポジトリへのプッシュが非常に多い場合、プレビルドは少なくとも、プレビルド ワークフローの実行に必要なだけ更新されます。 つまり、ワークフローの実行が完了するまでに通常 1 時間かかるとすると、実行が成功する場合は約 1 時間ごと、ブランチの開発コンテナー構成を変更するプッシュがあった場合はさらに頻繁に、リポジトリに対してプレビルドが作成されます。

たとえば、プレビルド構成が施されたブランチに対し、プッシュを5回続けて行うとします。 この状況では、次のようになります。

* 1 番目のプッシュに対するワークフローの実行が開始され、プレビルドが更新されます。

* 残りの 4 つのプッシュが開発コンテナーの構成に影響しない場合、これらに対するワークフロー実行は "保留中" 状態でキューに入れられます。

  残りの 4 つのプッシュのいずれかが開発コンテナーの構成を変更する場合は、サービスはそれをスキップせず、プレビルド作成ワークフローを直ちに実行して、成功した場合はそれに応じてプレビルドを更新します。

* 最初の実行が完了すると、プッシュ 2、3、4 に対するワークフローの実行は取り消されて、最後にキューに入れられたワークフロー (プッシュ 5 に対する) が実行され、プレビルドが更新されます。