永続的な環境変数を設定する
変数を使用できるようにする codespace、リポジトリ、またはユーザーに応じて、複数の方法で永続的なカスタム環境変数を設定できます。
以下に示すすべてのカスタム変数設定方法で、echo $VARNAME
のような構文を使って codespace 内のカスタム変数にアクセスできます。
1 つの codespace の場合
~/.bashrc
ファイルまたは Bash シェルを使っていない場合は同等の構成ファイルで、環境変数の値を設定できます。 たとえば、VARNAME=value
ステートメントを追加します。
変更をこのファイルに保存すると、次に codespace を開いたときに値が設定されます。または、source ~/.bashrc
などのコマンドを使ってすぐに設定できます。 codespace を停止して開始した場合、変数は設定されたままになります。 ただし、コンテナーをリビルドした場合、ホーム ディレクトリ内のファイルに対する変更はリセットされるため、~/.bashrc
ファイルで設定された変数はリビルドすると保持されません。 「一時ファイルが自動的に削除されないようにする」をご覧ください。
リポジトリのすべての codespace の場合
リポジトリ用に作成したすべての codespace に対して永続的なカスタム環境変数を設定する方法は 3 つあります。
- リポジトリの
devcontainer.json
構成ファイルを編集できます。 - カスタム Dockerfile を使用できます。
- 開発環境シークレットを使用できます。
リポジトリの devcontainer.json
構成ファイルを編集する
リポジトリの devcontainer.json
構成ファイルを編集し、remoteEnv
プロパティを使って環境変数の値を設定します。
{
"remoteEnv": {
"VARNAME": "value"
}
}
この方法は、プレーンテキストとしてリポジトリにコミットしても問題がない値にのみ使ってください。 アクセス トークンなどの機密性の高い値の場合は、開発環境シークレットを使います。
環境変数は、エディターのリモート サーバー プロセス内で設定され、ターミナルやデバッグ セッションなど、そのリモート サーバー プロセスのサブプロセスで使用できます。 ただし、コンテナー内でさらに広範囲に変数を使うことはできません。 この方法は、起動時に実行される他のバックグラウンド プロセス用に環境変数を設定する必要がない場合や、事前に作成されたイメージを使っていて、カスタム Dockerfile がない場合や必要ない場合に便利です。
この設定は、この変更をリポジトリにプッシュした後、コンテナーをリビルドするか、新しい codespace を作成すると有効になります。 codespace に構成の変更を適用する方法について詳しくは、「開発コンテナーの概要」をご覧ください。
カスタム Dockerfile を使用する
カスタム Dockerfile を使っている場合は、ENV VARNAME=value
を追加することにより、そこで環境変数を設定できます。
この方法は、Dockerfile が既にあり、コンテナー全体のレベルで変数を設定したい場合に便利です。
この設定は、この変更をリポジトリにプッシュした後、コンテナーをリビルドするか、新しい codespace を作成すると有効になります。 codespace に構成の変更を適用する方法について詳しくは、「開発コンテナーの概要」をご覧ください。
開発環境シークレットを使用する
GitHub Codespaces 用の開発環境シークレットを使って、リポジトリ用に作成された codespace のためのカスタム変数を設定できます。 詳しくは、「GitHub Codespaces のアカウント固有のシークレットの管理」を参照してください。
リポジトリにプレーンテキストとしてコミットしたくない環境変数の値の場合は、この方法を使う必要があります。
この設定は、このリポジトリ用の codespace を次に作成するとき、または既存の codespace を再起動したときに有効になります。
作成したすべての codespace の場合
作成したすべての codespace についてカスタマイズされた環境変数を設定したい場合は、dotfiles
リポジトリ内のファイルを使ってこれを設定できます。 たとえば、.bash_profile
ファイルに VARNAME=value
を追加します。 ドットファイルで設定した環境変数は個人用であり、他のユーザーには設定されません。 ドットファイルについて詳しくは、「アカウントの GitHub Codespaces をパーソナライズする」をご覧ください。
一時ファイルが自動的に削除されないようにする
codespace を作成すると、リポジトリが codespace 内の /workspaces
ディレクトリに複製されます。 これは、コンテナーにマウントされる永続的なディレクトリです。 ファイルの編集、追加、削除など、このディレクトリ内で行った変更は、codespace を停止して開始するとき、および codespace 内のコンテナーをリビルドするときに保持されます。
/workspaces
ディレクトリの外部では、codespace のビルドに使用される開発コンテナー イメージによって異なる Linux ディレクトリ構造が codespace に含まれています。 /workspaces
ディレクトリ外部で、ファイルを追加したりファイルに変更を加えたりすることができます。 たとえば、新しいプログラムをインストールしたり、~/.bashrc
のようなファイルにシェル構成を設定したりすることができます。 ルート以外のユーザーは、特定のディレクトリへの書き込みアクセス権を自動的に持っていない場合がありますが、ほとんどのイメージでは、これらのディレクトリへの sudo
コマンドを使ったルート アクセスが許可されます。
/workspaces
の外部では、/tmp
ディレクトリを除き、codespace 内のディレクトリはコンテナーのライフサイクルに関連付けられます。 つまり、codespace を停止して開始した場合、加えた変更は保持されますが、コンテナーをリビルドした場合は保持されません。 /workspaces
ディレクトリの外側にあるデータを保持するためのシンボリック リンクの作成について詳しくは、「codespace でのコンテナーのリビルド」をご覧ください。
/tmp
ディレクトリは例外です。コンテナー内にマウントされていても永続的ではないからです。 したがって、/tmp
ディレクトリのコンテンツはリビルド時に保持されますが、codespace が停止するたびにクリアされます。 たとえば、非アクティブな時間が経過した後に codespace セッションがタイムアウトすると、/tmp
ディレクトリがクリアされます。 詳しくは、「GitHub Codespaces のタイムアウト期間を設定する」を参照してください。
次に codespace を起動したときに使用できるようにしたい一時ファイルがある場合は、/tmp
ディレクトリに保存しないでください。