環境変数とは何か? shellにおける設定
環境変数は、プロセスに格納され、そのプロセスが起動するプログラムに継承される名前付きの値であり、設定をハードコードせずに渡すために使われます。
環境変数は、shellとそれが実行するプログラムが小さな設定の断片、つまり物の在り処、どのモードで実行するか、どの認証情報を使うかを共有する方法です。子プロセスは親の環境のコピーを継承します。これはまさにCIが設定とsecretをbuild stepに渡す方法です。
環境変数とは何か
それはプロセスに付随するキーと値のペアです。そのプロセスが子を起動すると、子はコピーを受け取ります。古典的な例はPATHですが、アプリケーションはNODE_ENVやCIなど、独自のものを多く読み取ります。
設定と読み取り
Bashではexport NAME=valueで設定し、$NAMEまたは"${NAME}"で読み取ります。exportがないと、変数はshell変数のままで、子プログラムには渡されません。
一般的な用途
- 設定: feature flag、logレベル、ターゲット環境。
- 発見: PATH、HOME、類似の場所。
- secret: 実行時に注入されるAPI tokenや認証情報。
- CIシグナル: 多くのツールがチェックする
CI=true変数。
環境変数対shell変数
素のshell変数は現在のshellの中だけに存在します。環境変数 (exportしたもの) は子プロセスに継承されます。この区別は、ある場所で設定した値が、起動したプログラムから時に見えない理由を説明します。
CIでの環境変数
CIプラットフォームは、設定とsecretのために環境変数を注入します。GitHub Actionsでは、step単位の値をインラインで設定するか、$GITHUB_ENVファイルに書き込んで後続のstepと値を共有します。各stepが独自のshellで実行されるからです。
secretと管理型ランナー
Latchkeyのランナーでは、secretはマスクされた環境変数として配信されるので、jobでは利用可能ですがlogからは伏せられます。secretを保持する変数は慎重に扱い、echoしないようにしてください。
重要なポイント
- 環境変数は、プロセスが子に受け渡す名前付きの値です。
- 子プログラムから見えるようにするには、変数を
exportする必要があります。 - CIは環境変数を使って設定とsecretをbuild stepに注入します。
関連ガイド
What Is the PATH Variable? Where the Shell Finds ProgramsPATH is the environment variable telling the shell which directories to search for executables. Learn how PAT…
What Is a Process Environment? Inherited SettingsA process environment is the set of variables a program inherits from its parent. Learn how the environment i…
What Is the GITHUB_ENV File in GitHub Actions?GITHUB_ENV is a file a step writes to in order to set environment variables that persist for the remaining st…