Linux入門:コマンド操作のきほん

環境変数とは

生田 陸人
LuaGate エンジニア / 現役エンジニア
編集 LuaGate編集部

このレッスンで分かること

  • 環境変数は OS/シェルがプロセスに渡すキーバリュー設定です
  • export 付きは子プロセスに継承される、なしは親シェル内だけ
  • 最小例は export API_KEY=abcd1234、参照は $API_KEY

環境変数 とは

環境変数の意味と使い方を学びます。パスの設定などを理解しましょう。本レッスンでは、環境変数 の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。

なぜ重要か

アプリケーションの設定値、API キー、データベース接続文字列、デプロイ先のリージョン名。これらをコードに直書きするとセキュリティ事故やリリース事故のもとになります。代わりに使うのが環境変数で、OS や シェルが管理する「プロセスに渡すキー / バリューのセット」です。Docker、Cloud Run、GitHub Actions、Vercel、AWS Lambda、どこに行ってもアプリの挙動を切り替える最初のスイッチはほぼ環境変数になっています。

手元の Linux でも PATH HOME LANG といった環境変数が常に動いており、コマンドが見つかる仕組みやファイルがどこに保存されるかは全部この値に依存しています。本レッスンでは「環境変数とは何か」「シェル変数との違い」「どう継承されるか」を整理し、後続のレッスンで export.bashrc を扱う土台にします。

環境変数を一言でいうと「プロセスに手渡される設定メモ」です。API キーやデプロイ先をコードに書かず、ここに置いて挙動を切り替えます。

環境変数とシェル変数

シェルが扱う変数には大きく分けて 2 種類あります。

種別子プロセスに継承用途
シェル変数されない現在のシェル内だけで使う一時値
環境変数される起動した子プロセス全体で使う設定値

どちらも 名前=値 の形で定義しますが、export を付けて宣言したものだけが「環境変数」として子プロセスに引き渡されます。

ターミナル

# シェル変数 (子プロセスには見えない) GREETING=hello # 環境変数 (子プロセスにも見える) export API_KEY=abcd1234

図解 プロセスへの継承

diagram (will load when visible)

図の関係を箇条書きで整理すると、次の通りです。

  • 親シェル (PID 1000) は環境変数 API_KEY とシェル変数 TMP_VAR を持つ
  • 親シェルが子プロセス (PID 1234) を起動する
  • 環境変数 API_KEY は子プロセスにコピーされる (継承)
  • シェル変数 TMP_VAR は子プロセスに渡らない
  • 子プロセスは process.env.API_KEY などで値を読める

親シェルから nodepython を起動すると、export されている変数は子プロセスの環境にコピーされます。export していないシェル変数は子に渡らず、親のメモリ上にしか存在しません。この境界を意識すると .env ファイルや CI のシークレットの動きが読めるようになります。

代表的な環境変数

Linux のシェルでは最初から多数の環境変数が設定されています。代表例は次のとおりです。

ターミナル

echo $HOME # ユーザのホームディレクトリ echo $USER # 現在のユーザ名 echo $PATH # 実行可能ファイルの検索パス echo $SHELL # ログインシェル echo $LANG # ロケール (言語と文字コード) echo $PWD # 現在のディレクトリ

アプリケーション固有のものとしては、DATABASE_URL REDIS_URL NODE_ENV AWS_REGION OPENAI_API_KEY などが定番です。

値の参照と展開

シェルでは $名前 または ${名前} で値を展開します。文字列の中に埋め込むときは波カッコ付きの方が安全です。

ターミナル

NAME=alice echo "Hello, $NAME" echo "Hello, ${NAME}_san"

ダブルクオート内では展開され、シングルクオート内ではそのまま文字として扱われます。シェルでスクリプトを書くときの定番のハマりどころなので、後のシェルスクリプト章でも繰り返し出てきます。

環境変数の名前は慣習として大文字とアンダースコアでつけます。API_KEY のような書き方は、シェル変数や別名 (alias) との衝突を視覚的に避けるためのルールです。

どこで設定するか

環境変数の設定場所は使い分けが必要です。

  • 一時的に試す: そのシェルで export FOO=bar
  • 自分のシェル起動時に常に欲しい: ~/.bashrc ~/.zshrc
  • ログインのたびに必要 (cron など含む): ~/.bash_profile ~/.profile
  • アプリ単位で切り替えたい: .env ファイル + dotenv / docker / k8s manifest
  • 本番のシークレット: クラウドのシークレットマネージャ (Secret Manager, AWS Secrets Manager 等)

コードリポジトリに .env をコミットしないのは常識ですが、それ以上に重要なのは「機密情報をシェル履歴に残さない」ことです。本番キーを export OPENAI_API_KEY=... でうっかり打つと ~/.bash_history に平文で残ります。スクリプトで読み込ませる、read -s で隠す、シークレットマネージャから取り出すなどの工夫が必要です。

環境変数のライフサイクル

環境変数は「設定したシェルのプロセスが終わると消える」のが基本です。新しいターミナルを開いたり再ログインすると、.bashrc などの設定ファイルが再読み込みされて状態が作り直されます。逆に言うと、シェル設定ファイルに書いておけば毎回読み込まれて再現できるので、再現性のある環境構築の出発点になります。

この章のポイント

ここまでの要点 環境変数はプロセス間の設定メモ。export 付きが子に継承される。本番シークレットはシェル履歴とリポジトリに残さない。永続化は .bashrc などの設定ファイル。

まとめ

  • 環境変数は OS / シェルがプロセスに渡すキーバリュー設定で、アプリ挙動の最初のスイッチになる
  • export 付きの変数は子プロセスに継承され、付いていないシェル変数は親の中だけで完結する
  • PATH HOME LANG などは Linux 標準の環境変数で、コマンド検索やロケールに直接影響する
  • 設定場所は用途に応じて使い分け、本番のシークレットは履歴やリポジトリに残さないこと
  • シェルプロセスが終わると環境変数も消えるため、永続化には設定ファイルやマネージャを使う

次のレッスン

次は 環境変数の確認と設定 で、環境変数の意味と使い方を学びます を学びます。

事前確認 — 進む前に次の 3 つができることを確認しましょう。

  1. 環境変数とは の要点を自分の言葉で説明できる
  2. このレッスンの最小コード (または操作手順) を見ずに書ける
  3. 練習問題やクイズで間違えた箇所を読み直して理解した

理解度チェック (30 秒)

Q. 環境変数とは とは何か、1 文で説明してください。

この章のポイント

A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。

関連レッスン

参考リンク