環境変数の設定方法
読む所要時間: 16 分
環境変数とは、その名に示唆されるとおり、環境を表すシステム内の変数です。最もよく知られている環境変数は、PATH
でしょう。この変数には、実行可能ファイルを格納したフォルダへのパスが含まれます。このPATH
を使用すれば、ターミナルに実行ファイルの完全なパスを記述することなく、実行ファイルの名前だけを記述できます。シェルはこの実行ファイルについてローカルディレクトリだけでなく、PATH
変数で指定されたすべてのディレクトリをチェックします。
「組み込み」変数の他にも、自分で環境変数を定義できます。環境変数は環境に紐づけられるため、APIアクセストークンなどに最適です。開発マシンで特定の値に設定された変数を、if
文や特別な構成ファイルがなくても、本番環境において別の値に設定することができます。
例えば、Twilioのヘルパーライブラリは、TWILIO_ACCOUNT_SID
とTWILIO_AUTH_TOKEN
の2つの値がない状態でクライアントのインスタンスを作成した場合、これらの環境変数を探します。これにより、機密性の高い認証情報を誤ってGitHubなどの場所へプッシュしてしまう心配がなくなります。
macOSおよびLinuxディストリビューションで環境変数を設定
macOSやUNIX系OSで環境変数を設定するには、どのシェルを実行しているかを確認する必要があります。確認するにはターミナルで次のコマンドを実行します。
出力の最後に、どのシェルを実行しているかが表示されます。一般的なシェルは、この例で使用するbash
シェルです。しかし、zsh
やfish
など他のシェルでも手順は同じです。
環境変数の設定には、次のような形式のexportコマンドを使用する必要があります。
これでは現在のセッションでしか設定されないため、このコマンドをセッション毎に実行されるファイルに追加する必要があります。ホームディレクトリにある.bashrcファイルを任意のコードエディタで開きます。ファイルのどこかに以下のコードを追加します。
Twilio Consoleから、実際のアカウントのSIDで<YOUR_ACCOUNT_SID>
を置き換えます。ファイルを保存し、新しいターミナルインスタンスを開き、次を実行して動作するか否かをテストします。
保存した値が表示されるはずです。
Windowsの環境変数
Windowsマシンを使用している場合は、環境変数を設定する方法がいくつかあります。最も一般的な方法は、PowerShell、CMD、またはグラフィカルユーザーインタフェース(GUI)を使用することです。
環境変数を格納できる場所は3つあります。
- 現在のプロセス内: 現在のプロセスは、PowerShell、CMD、Bash など、実行中のシェルを指すことが一般的です。ただし、現在のプロセスは、自分のアプリケーションを含む他のアプリケーションでもある可能性もあります。現在のプロセスから起動された子プロセスは、そのプロセスの環境変数を継承します。プロセスが終了すると、環境変数は削除されます。つまり、新しいシェルを開くたびに環境変数を再構成する必要があります。
macOSおよびLinuxディストリビューションでも、環境変数はこのように保存されます。 - ユーザーレジストリ内: 環境変数は、そのユーザーが起動したすべてのプロセスで使用できます。また、他のユーザーは(昇格権限がなければ)こうした環境変数にアクセスできません。
- マシンレジストリ内: 環境変数はすべてのユーザーとプロセスで使用でき、マシンの環境変数を設定するには、昇格権限が必要です。
環境変数を格納すべき場所
シェルからアプリケーションを実行していて、環境変数を保持したくない場合は、現在のプロセスの環境変数を設定します。環境変数を保存しておきたい場合は、ユーザーレジストリに保存します。特定のユーザーや自分の環境変数だけでなく、すべてのユーザーの環境変数を構成する場合は、マシンレジストリに保存します。
PowerShellを使用して環境変数を設定
PowerShellはPowerShell Coreを介してmacOSおよびLinuxディストリビューションでもサポートされていますが、Windows PowerShellはWindowsにプリインストールされており、Windowsプラットフォーム向けに推奨されているシェルです。環境変数を構成するための次のcmdletは、Windows、macOS、Linuxで動作します。
PowerShellで環境変数を設定するための最も一般的で簡単な方法は、次のように$Env
変数を使用することです。
$Env
の後にコロン、環境変数名、等号、使用したい値を追加します。これにより、現在のプロセスの環境変数が設定され、このシェルから起動したすべての子プロセスに継承されます。
次の2つの方法も結果は同じですが、あまり一般的ではありません。
シェルインスタンス間で環境変数を保持するには、cmdletをプロファイルスクリプトに保存するか、Windowsでは次のようにユーザーレジストリまたはマシンレジストリに保存します。
macOSとLinuxではユーザー環境変数やマシン環境変数の概念がなく、プロセス環境変数しか存在しないため、上記の2つのコマンドを実行してもno-opとなり、動作しません。詳細については、PowerShell 環境変数に関するMicrosoftのドキュメントを参照してください。
CMDから環境変数を設定
cmd.exeやコマンドプロンプトとして知られるcmdは、Windowsのすべてのインストールに付属しています。PowerShellを使用することをお勧めしますが、それができない場合のために、ここではcmdやバッチファイルから環境変数を設定する方法を紹介します。
環境変数を設定するには、次のようにset
コマンドを使用します。
このコマンドは現在のプロセスの環境変数を設定し、子プロセスは環境変数を継承します。ただし、cmdを閉じると環境変数は失われます。
プロセス間で環境変数を保持するには、setx
コマンドを使用して、ユーザーレジストリまたはマシンレジストリに環境変数を保存します。
これらのコマンドにはさらに多くの機能があります。詳しくはsetコマンドやsetxコマンドのドキュメントを参照してください。
グラフィカルユーザーインターフェイス(GUI)を使用して環境変数を設定
GUIを使用したWindows内の環境変数の設定は、何層もの設定ダイアログの中に隠されています。各インターフェースを開くには、まずWindowsの実行プロンプトを開く必要があります。これはキーボード上のWindows
キーとR
キーを同時に押して行います。次に、入力フィールドにsysdm.cpl
と入力し、Enter
または[OK]を押します。
新しく開いたウィンドウで[詳細設定]タブをクリックし、続いてウィンドウ右下隅にある[環境変数]ボタンをクリックします。
このウィンドウには2つの異なるセクションがあります。1つは、ユーザーに固有の環境変数のリストです。つまり、他のユーザーは利用できません。もう1つのセクションには、すべてのユーザーで共有されるシステム全体の変数が含まれています。
ユーザー固有の変数を作成するには、ユーザー固有セクションの下にある[新規]ボタンをクリックします。プロンプトでは、変数の名前と値を指定できます。新しい変数をTWILIO_ACCOUNT_SID
という名前で作成し、コンソールからTwilioアカウントのSIDをコピーします。プロンプトで[OK]を押してこの変数を作成し、続いて環境変数ウィンドウで[OK]を押します。これで完了です。
動作を確認するために、コマンドプロンプトを開きます。Windows
キー+R
キーを押して、cmd.exe
と入力します。すでにコマンドプロンプトが開かれている場合、変更が確実に反映されるように再起動します。コマンドプロンプト内で次のコマンドを実行します。
これで、環境変数に保存した値が表示されるはずです。
.envファイルを使用
単一のプロジェクトのためだけに環境変数を設定するケースもあります。そのような場合に最適なソリューションが、.envファイルです。環境変数を指定するプロジェクト内のファイルであり、後でそれぞれのプログラミング言語のライブラリを使用してこのファイルを読み込むことにより、これらの変数を動的に定義します。
これらのファイルを読み込むためのライブラリは、ほとんどのプログラミング言語に用意されています。いくつかご紹介しましょう。
- Ruby
- Node.js
- Python
- C#、F#、VB.NET(dotnet-envまたはdotenv.net)
- Java(チュートリアル)
- PHP
プロジェクトフォルダ内(通常はルート)に.envファイルを作成し、その中にキー値のペアを配置します。次のようになります。
これで、それぞれのライブラリを使用すれば、環境変数を使用できるようになります。たとえばNode.jsの場合、それぞれのコードは次のようになります。
クラウドプロバイダー
ローカルの開発マシンやVMに環境変数を設定することは、作業の半分に過ぎません。アプリケーションをHeroku、Azure、AWSなどのクラウド環境でホスティングしたり、Dockerコンテナでラップしたりしていた場合はどうすればよいでしょうか?幸運なことに、これらのプロバイダーはすべて、環境変数を定義する方法をサポートしています。
このリストの中にお使いのクラウドホストがなくても、環境変数の設定方法がないというわけではありません。詳細については、各クラウドホストのドキュメントを確認してください。
まとめ
これで完了です。環境変数を設定できることは、コードから環境に基づく設定値をすべて取り除き、より柔軟で安全なコードを作成できることを意味します。
ただし、これらの値はプレーンテキストで保存されることに注意してください。非常に機密性の高い値を保存する場合は、Vaultのような機密ストレージソリューションを検討すべきです。
ご質問がある場合や、構築中のものを私に見せたい場合は、お気軽にdkundel@twilio.comまでメールを送信していただくか、Twitter@dkundelまでご連絡ください。何を構築されるか、とても楽しみです。