{"meta":{"title":"環境変数と一時ファイルを永続化する","intro":"codespace を開くたびに同じ値に設定されるように、カスタム環境変数を構成できます。 また、codespace が停止しても一時ファイルが削除されないようにすることもできます。","product":"Codespaces","breadcrumbs":[{"href":"/ja/codespaces","title":"Codespaces"},{"href":"/ja/codespaces/developing-in-a-codespace","title":"codespace で開発する"},{"href":"/ja/codespaces/developing-in-a-codespace/persisting-environment-variables-and-temporary-files","title":"変数とファイルを永続化する"}],"documentType":"article"},"body":"# 環境変数と一時ファイルを永続化する\n\ncodespace を開くたびに同じ値に設定されるように、カスタム環境変数を構成できます。 また、codespace が停止しても一時ファイルが削除されないようにすることもできます。\n\n## 永続的な環境変数を設定する\n\n使用するコードスペース、リポジトリ、またはユーザーに応じて、永続的なカスタム環境変数を設定するさまざまな方法を選択できます。\n\n以下に示すすべてのカスタム変数設定方法で、`echo $VARNAME` のような構文を使って codespace 内のカスタム変数にアクセスできます。\n\n### 1 つの codespace\n\n`~/.bashrc` ファイルまたは Bash シェルを使っていない場合は同等の構成ファイルで、環境変数の値を設定できます。 たとえば、`VARNAME=value` ステートメントを追加します。\n\n変更をこのファイルに保存すると、次に codespace を開いたときに値が設定されます。または、`source ~/.bashrc` などのコマンドを使ってすぐに設定できます。 codespace を停止して開始した場合、変数は設定されたままになります。 ただし、コンテナーをリビルドした場合、ホーム ディレクトリ内のファイルに対する変更はリセットされるため、`~/.bashrc` ファイルで設定された変数はリビルドすると保持されません。 詳しくは、「[一時ファイルが自動的に削除されないようにする](#preventing-temporary-files-from-being-automatically-deleted)」をご覧ください。\n\n### リポジトリのすべての codespace\n\nリポジトリ用に作成したすべての codespace に対して永続的なカスタム環境変数を設定する方法は 3 つあります。\n\n* リポジトリの `devcontainer.json` 構成ファイルを編集できます。\n* カスタム Dockerfile を使用できます。\n* 開発環境シークレットを使用できます。\n\n#### リポジトリの `devcontainer.json` 構成ファイルを編集する\n\nリポジトリの `devcontainer.json` 構成ファイルを編集し、`remoteEnv` プロパティを使って環境変数の値を設定します。\n\n```json\n{\n  \"remoteEnv\": {\n    \"VARNAME\": \"value\"\n  }\n}\n```\n\nこの方法は、プレーンテキストとしてリポジトリにコミットしても問題がない値にのみ使ってください。 アクセス トークンなどの機密性の高い値の場合は、開発環境シークレットを使います。\n\n環境変数は、エディターのリモート サーバー プロセス内で設定され、ターミナルやデバッグ セッションなど、そのリモート サーバー プロセスのサブプロセスで使用できます。 ただし、コンテナー内でさらに広範囲に変数を使うことはできません。 この方法は、起動時に実行される他のバックグラウンド プロセス用に環境変数を設定する必要がない場合や、事前に作成されたイメージを使っていて、カスタム Dockerfile がない場合や必要ない場合に便利です。\n\nこの設定は、この変更をリポジトリにプッシュした後、コンテナーをリビルドするか、新しい codespace を作成すると有効になります。 codespace への構成の変更の適用について詳しくは、「[開発コンテナーの概要](/ja/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/introduction-to-dev-containers)」をご覧ください。\n\n#### カスタム Dockerfile を使用する\n\nカスタム Dockerfile を使っている場合は、`ENV VARNAME=value` を追加することにより、そこで環境変数を設定できます。\n\nこの方法は、Dockerfile が既にあり、コンテナー全体のレベルで変数を設定したい場合に便利です。\n\nこの設定は、この変更をリポジトリにプッシュした後、コンテナーをリビルドするか、新しい codespace を作成すると有効になります。 codespace への構成の変更の適用について詳しくは、「[開発コンテナーの概要](/ja/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/introduction-to-dev-containers)」をご覧ください。\n\n#### 開発環境シークレットを使用する\n\nGitHub Codespaces用の開発環境シークレットを使用して、リポジトリ用に作成されたコードスペースのカスタム変数を設定できます。 詳しくは、「[GitHub Codespaces のアカウント固有のシークレットの管理](/ja/codespaces/managing-your-codespaces/managing-your-account-specific-secrets-for-github-codespaces)」をご覧ください。\n\nリポジトリにプレーンテキストとしてコミットしたくない環境変数の値の場合は、この方法を使う必要があります。\n\nこの設定は、このリポジトリ用の codespace を次に作成するとき、または既存の codespace を再起動したときに有効になります。\n\n### 作成したすべての Codespaces に対して\n\n作成したすべての codespace についてカスタマイズされた環境変数を設定したい場合は、`dotfiles` リポジトリ内のファイルを使ってこれを設定できます。 たとえば、`VARNAME=value` ファイルに `.bash_profile` を追加します。 ドットファイルで設定した環境変数は個人用であり、他のユーザーには設定されません。 ドットファイルについて詳しくは、「[アカウントGitHub Codespaces のカスタマイズ](/ja/codespaces/setting-your-user-preferences/personalizing-github-codespaces-for-your-account#dotfiles)」をご覧ください。\n\n## 一時ファイルが自動的に削除されないようにする\n\ncodespace を作成すると、リポジトリが codespace 内の `/workspaces` ディレクトリに複製されます。 これは、コンテナーにマウントされる永続的なディレクトリです。 ファイルの編集、追加、削除など、このディレクトリ内で行った変更は、codespace を停止して開始するとき、および codespace 内のコンテナーをリビルドするときに保持されます。\n\n`/workspaces` ディレクトリの外部では、codespace のビルドに使用される開発コンテナー イメージによって異なる Linux ディレクトリ構造が codespace に含まれています。 `/workspaces` ディレクトリ外部で、ファイルを追加したりファイルに変更を加えたりすることができます。 たとえば、新しいプログラムをインストールしたり、`~/.bashrc` のようなファイルにシェル構成を設定したりすることができます。 ルート以外のユーザーは、特定のディレクトリへの書き込みアクセス権を自動的に持っていない場合がありますが、ほとんどのイメージでは、これらのディレクトリへの `sudo` コマンドを使ったルート アクセスが許可されます。\n\n`/workspaces` の外部では、`/tmp` ディレクトリを除き、codespace 内のディレクトリはコンテナーのライフサイクルに関連付けられます。 つまり、codespace を停止して開始した場合、加えた変更は保持されますが、コンテナーをリビルドした場合は保持されません。\n`/workspaces` ディレクトリの外部でデータを保持するためのシンボリック リンクの作成については、[codespace でのコンテナーのリビルド](/ja/codespaces/developing-in-a-codespace/rebuilding-the-container-in-a-codespace#persisting-data-over-a-rebuild) を参照してください。\n\n`/tmp` ディレクトリは例外です。コンテナー内にマウントされていても永続的ではないからです。 したがって、`/tmp` ディレクトリのコンテンツはリビルド時に保持されますが、codespace が停止するたびにクリアされます。 たとえば、非アクティブな時間が経過した後に codespace セッションがタイムアウトすると、`/tmp` ディレクトリがクリアされます。 詳しくは、「[GitHub Codespaces のタイムアウト期間の設定](/ja/codespaces/setting-your-user-preferences/setting-your-timeout-period-for-github-codespaces)」をご覧ください。\n\n次に codespace を起動したときに使用できるようにしたい一時ファイルがある場合は、`/tmp` ディレクトリに保存しないでください。\n\n## 参考資料\n\n* [codespace でのシェルの変更](/ja/codespaces/customizing-your-codespace/changing-the-shell-in-a-codespace)"}