Skip to main content

環境変数と一時ファイルを永続化する

codespace を開くたびに同じ値に設定されるように、カスタム環境変数を構成できます。 また、codespace が停止しても一時ファイルが削除されないようにすることもできます。

永続的な環境変数を設定する

変数を使用できるようにする 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 ディレクトリに保存しないでください。

参考資料