環境変数は「プログラムに渡すメモ書き」
環境変数(かんきょうへんすう)というのは、パソコンやサーバーの中で「名前」と「値」をペアで覚えさせておける置き場所のことです。プログラムを起動すると、そのプログラムはこの置き場所を覗きに行って、書かれている値を読み取って動きを変えます。
たとえばホテルのフロントに「301号室のお客様は朝食なし」「302号室は禁煙希望」といったメモが置いてあるとします。スタッフが変わっても、メモを見れば対応が変わる。環境変数もこれと同じで、プログラム本体のコードを書き換えなくても、外側に置いたメモを差し替えるだけで挙動を変えられます。
形としては非常に単純で、こんな見た目をしています。
NAME=value
左が変数名、右が値。それだけです。慣習として変数名は大文字とアンダースコアで書かれることが多く、API_KEY や HOME のような名前をよく見かけます。
なぜコードに直接書かないのか
「設定なんてプログラムの中に書いてしまえばいいのでは」と最初は思いますよね。私も昔そうしていました。でも、これをやると困ることが2つあります。
ひとつは、環境ごとに値を変えたいとき。自分のパソコンで試すときと、本番のサーバーで動かすときでは、接続先のデータベースもURLも違うことがよくあります。コードに直接書いてあると、環境を移すたびにコードを書き換えることになります。
もうひとつは、秘密の情報を扱うとき。APIキーやパスワードをコードの中に書いてしまうと、そのコードを共有した瞬間に秘密も一緒に漏れます。環境変数として外に出しておけば、コードは安心して人に渡せます。
コードに直接書く
手軽だが、環境を変えるたびに書き換えが必要。秘密情報も一緒に共有されてしまう。
環境変数で渡す
コードは共通のまま、外側の値だけ差し替えられる。秘密情報をコードから切り離せる。
実際にどう設定するのか
使い方はいくつかあって、目的によって使い分けます。
そのコマンドだけに渡す
コマンドの前に NAME=value と書くと、そのコマンドの実行中だけ有効になります。
API_KEY=abc123 mycommand
ちょっと試したいときに便利です。実行が終われば消えるので、後片付けも要りません。
ターミナルのセッション全体に渡す
macOSやLinuxのターミナルでは export を使います。
export API_KEY=abc123
こうすると、その後そのターミナルで起動したプログラムはすべてこの値を読めます。ただしターミナルを閉じると消えるので、毎回使いたい場合はシェルの設定ファイル(.bashrc や .zshrc など)に書いておく、というのが定番のやり方です。
ファイルにまとめて書いておく
プロジェクトごとに使う値が多い場合、.env のような名前のファイルに一覧で書いておき、ツールに読み込ませる方式もよく使われます。この場合、そのファイルをバージョン管理に含めないよう注意が必要です。せっかくコードから切り離したのに、ファイルごと共有してしまっては意味がありません。
初心者がつまずきやすいところ
「設定したはずなのに効かない」というトラブルは本当によくあります。原因のほとんどは、設定したタイミングと、プログラムを起動したタイミングがずれていることです。
環境変数は、プログラムを起動する瞬間に渡されます。すでに動いているプログラムに後から export しても、そのプログラムには届きません。設定を変えたら、対象のアプリやターミナルを起動し直す。これだけで解決することが大半です。
もうひとつは、書き方のちょっとしたミス。= の前後にスペースを入れてしまう、値にスペースが含まれるのにクォートで囲っていない、といったケースです。
GREETING="hello world"
スペースを含む値は、このようにクォートで囲みます。
Claude Codeとの関わり
Claude Codeのようなコマンドラインツールも、設定の一部を環境変数から受け取れるようになっています。APIキーの指定や、動作のオプション切り替えといった用途です。どの変数名が使えるかは公式のドキュメントを確認するのが確実ですが、「設定を外から渡す仕組みがある」という考え方さえ掴んでいれば、ドキュメントを読むときの理解がぐっと速くなります。
環境変数は、地味ですが、ツールを使いこなすうえで避けて通れない基礎です。最初に一度きちんと理解しておくと、後々いろいろな場面で効いてきます。
このページは役に立ちましたか?