Skip to content
Latchkey

環境変数とは何か? 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に注入します。

関連ガイド