環境変数の設定方法

January 26, 2017
執筆者
レビュー担当者

CP66owhMZeayfuKH2GO2bPS_oOhngyGdAI323rP9xVWDwm-iRQI7XDiucQ5b4ReImcq346dkAXfpNwxW-GWruOggvVYfkTo2CXPwBwwQUO9CNVcXVL74Zy3TzwYXUHGpUW3q7l8E-4

Este post também está disponível em Português.

コードと共有すべきではないものもあります。その多くはデバッグフラグやTwilioが提供しているAPIのアクセストークンなど、環境に依存する設定値です。環境変数はよい解決策であり、ほとんどのプログラミング言語で簡単に使用できます。

環境変数とは?

l4JA1COQqiZB6.gif

環境変数とは、その名に示唆されるとおり、環境を表すシステム内の変数です。最もよく知られている環境変数は、PATHでしょう。この変数には、実行可能ファイルを格納したフォルダへのパスが含まれます。このPATHを使用すれば、ターミナルに実行ファイルの完全なパスを記述することなく、実行ファイルの名前だけを記述できます。シェルはこの実行ファイルについてローカルディレクトリだけでなく、PATH変数で指定されたすべてのディレクトリをチェックします。

「組み込み」変数の他にも、自分で環境変数を定義できます。環境変数は環境に紐づけられるため、APIアクセストークンなどに最適です。開発マシンで特定の値に設定された変数を、if文や特別な構成ファイルがなくても、本番環境において別の値に設定することができます。

例えば、Twilioのヘルパーライブラリは、TWILIO_ACCOUNT_SIDTWILIO_AUTH_TOKENの2つの値がない状態でクライアントのインスタンスを作成した場合、これらの環境変数を探します。これにより、機密性の高い認証情報を誤ってGitHubなどの場所へプッシュしてしまう心配がなくなります。

macOSおよびLinuxディストリビューションで環境変数を設定

macOSやUNIX系OSで環境変数を設定するには、どのシェルを実行しているかを確認する必要があります。確認するにはターミナルで次のコマンドを実行します。

echo $SHELL

出力の最後に、どのシェルを実行しているかが表示されます。一般的なシェルは、この例で使用するbashシェルです。しかし、zshfishなど他のシェルでも手順は同じです。

環境変数の設定には、次のような形式のexportコマンドを使用する必要があります。

export KEY=value

これでは現在のセッションでしか設定されないため、このコマンドをセッション毎に実行されるファイルに追加する必要があります。ホームディレクトリにある.bashrcファイルを任意のコードエディタで開きます。ファイルのどこかに以下のコードを追加します。

export TWILIO_ACCOUNT_SID=<YOUR_ACCOUNT_SID>

Twilio Consoleから、実際のアカウントのSIDで<YOUR_ACCOUNT_SID>を置き換えます。ファイルを保存し、新しいターミナルインスタンスを開き、次を実行して動作するか否かをテストします。

echo $TWILIO_ACCOUNT_SID

保存した値が表示されるはずです。

terminal-env-variable.png

Windowsの環境変数

Windowsマシンを使用している場合は、環境変数を設定する方法がいくつかあります。最も一般的な方法は、PowerShell、CMD、またはグラフィカルユーザーインタフェース(GUI)を使用することです。

環境変数を格納できる場所は3つあります。

  • 現在のプロセス内: 現在のプロセスは、PowerShell、CMD、Bash など、実行中のシェルを指すことが一般的です。ただし、現在のプロセスは、自分のアプリケーションを含む他のアプリケーションでもある可能性もあります。現在のプロセスから起動された子プロセスは、そのプロセスの環境変数を継承します。プロセスが終了すると、環境変数は削除されます。つまり、新しいシェルを開くたびに環境変数を再構成する必要があります。
    macOSおよびLinuxディストリビューションでも、環境変数はこのように保存されます。
  • ユーザーレジストリ内: 環境変数は、そのユーザーが起動したすべてのプロセスで使用できます。また、他のユーザーは(昇格権限がなければ)こうした環境変数にアクセスできません。
  • マシンレジストリ内: 環境変数はすべてのユーザーとプロセスで使用でき、マシンの環境変数を設定するには、昇格権限が必要です。

Changes made to user and machine environment variables aren't available to processes that are already running. For the change to apply, restart your program or shell, or set the environment variable for both the process and the user or machine.

環境変数を格納すべき場所 

シェルからアプリケーションを実行していて、環境変数を保持したくない場合は、現在のプロセスの環境変数を設定します。環境変数を保存しておきたい場合は、ユーザーレジストリに保存します。特定のユーザーや自分の環境変数だけでなく、すべてのユーザーの環境変数を構成する場合は、マシンレジストリに保存します。

PowerShellを使用して環境変数を設定

PowerShellはPowerShell Coreを介してmacOSおよびLinuxディストリビューションでもサポートされていますが、Windows PowerShellはWindowsにプリインストールされており、Windowsプラットフォーム向けに推奨されているシェルです。環境変数を構成するための次のcmdletは、Windows、macOS、Linuxで動作します。

PowerShellで環境変数を設定するための最も一般的で簡単な方法は、次のように$Env変数を使用することです。

 

 

$Env:TWILIO_ACCOUNT_SID = '<YOUR_ACCOUNT_SID>'

$Envの後にコロン、環境変数名、等号、使用したい値を追加します。これにより、現在のプロセスの環境変数が設定され、このシェルから起動したすべての子プロセスに継承されます。

次の2つの方法も結果は同じですが、あまり一般的ではありません。

New-Item -Path Env:\TWILIO_ACCOUNT_SID -Value '<YOUR_ACCOUNT_SID>'
[Environment]::SetEnvironmentVariable('TWILIO_ACCOUNT_SID', '<YOUR_ACCOUNT_SID>')
[Environment]::SetEnvironmentVariable('TWILIO_ACCOUNT_SID', '<YOUR_ACCOUNT_SID>', 'Process')

シェルインスタンス間で環境変数を保持するには、cmdletをプロファイルスクリプトに保存するか、Windowsでは次のようにユーザーレジストリまたはマシンレジストリに保存します。

Environment]::SetEnvironmentVariable('TWILIO_ACCOUNT_SID'

Setting environment variables in the user and/or machine registry will not immediately update the environment variables for processes that are currently running. To see the effects of the update environment variables, you'll need to restart those processes, such as your PowerShell shell.

macOSとLinuxではユーザー環境変数やマシン環境変数の概念がなく、プロセス環境変数しか存在しないため、上記の2つのコマンドを実行してもno-opとなり、動作しません。詳細については、PowerShell 環境変数に関するMicrosoftのドキュメントを参照してください。

CMDから環境変数を設定

cmd.exeやコマンドプロンプトとして知られるcmdは、Windowsのすべてのインストールに付属しています。PowerShellを使用することをお勧めしますが、それができない場合のために、ここではcmdやバッチファイルから環境変数を設定する方法を紹介します。

環境変数を設定するには、次のようにsetコマンドを使用します。

set TWILIO_ACCOUNT_SID=<YOUR_ACCOUNT_SID>

このコマンドは現在のプロセスの環境変数を設定し、子プロセスは環境変数を継承します。ただし、cmdを閉じると環境変数は失われます。 

プロセス間で環境変数を保持するには、setxコマンドを使用して、ユーザーレジストリまたはマシンレジストリに環境変数を保存します。

# sets environment variable in the user registry
setx TWILIO_ACCOUNT_SID <YOUR_ACCOUNT_SID>

# sets environment variable in the machine registry
setx TWILIO_ACCOUNT_SID <YOUR_ACCOUNT_SID> /m

Setting environment variables in the user and/or machine registry will not immediately update the environment variables for processes that are currently running. To see the effects of the update environment variables, you'll need to restart those processes, like your PowerShell shell.

これらのコマンドにはさらに多くの機能があります。詳しくはsetコマンドsetxコマンドのドキュメントを参照してください。

グラフィカルユーザーインターフェイス(GUI)を使用して環境変数を設定

GUIを使用したWindows内の環境変数の設定は、何層もの設定ダイアログの中に隠されています。各インターフェースを開くには、まずWindowsの実行プロンプトを開く必要があります。これはキーボード上のWindowsキーとRキーを同時に押して行います。次に、入力フィールドにsysdm.cplと入力し、Enterまたは[OK]を押します。

run-dialog.png

新しく開いたウィンドウで[詳細設定]タブをクリックし、続いてウィンドウ右下隅にある[環境変数]ボタンをクリックします。

windows-advanced-dialog.png
windows-env-dialog.png

このウィンドウには2つの異なるセクションがあります。1つは、ユーザーに固有の環境変数のリストです。つまり、他のユーザーは利用できません。もう1つのセクションには、すべてのユーザーで共有されるシステム全体の変数が含まれています。

ユーザー固有の変数を作成するには、ユーザー固有セクションの下にある[新規]ボタンをクリックします。プロンプトでは、変数の名前と値を指定できます。新しい変数をTWILIO_ACCOUNT_SIDという名前で作成し、コンソールからTwilioアカウントのSIDをコピーします。プロンプトで[OK]を押してこの変数を作成し、続いて環境変数ウィンドウで[OK]を押します。これで完了です。

new-dialog.png

動作を確認するために、コマンドプロンプトを開きます。Windowsキー+Rキーを押して、cmd.exeと入力します。すでにコマンドプロンプトが開かれている場合、変更が確実に反映されるように再起動します。コマンドプロンプト内で次のコマンドを実行します。

echo %TWILIO_ACCOUNT_SID%

これで、環境変数に保存した値が表示されるはずです。

windows-cmd-dialog.png

.envファイルを使用

単一のプロジェクトのためだけに環境変数を設定するケースもあります。そのような場合に最適なソリューションが、.envファイルです。環境変数を指定するプロジェクト内のファイルであり、後でそれぞれのプログラミング言語のライブラリを使用してこのファイルを読み込むことにより、これらの変数を動的に定義します。

これらのファイルを読み込むためのライブラリは、ほとんどのプログラミング言語に用意されています。いくつかご紹介しましょう。

プロジェクトフォルダ内(通常はルート)に.envファイルを作成し、その中にキー値のペアを配置します。次のようになります。

TWILIO_ACCOUNT_SID=<YOUR_ACCOUNT_SID>

これで、それぞれのライブラリを使用すれば、環境変数を使用できるようになります。たとえばNode.jsの場合、それぞれのコードは次のようになります。

require('dotenv').config();
console.log('Your environment variable TWILIO_ACCOUNT_SID has the value: ', process.env.TWILIO_ACCOUNT_SID);

Since you most likely don’t want to commit your environment variables to a repository, make sure to add the .env file to your .gitignore to avoid accidentally pushing it.

クラウドプロバイダー

ローカルの開発マシンやVMに環境変数を設定することは、作業の半分に過ぎません。アプリケーションをHeroku、Azure、AWSなどのクラウド環境でホスティングしたり、Dockerコンテナでラップしたりしていた場合はどうすればよいでしょうか?幸運なことに、これらのプロバイダーはすべて、環境変数を定義する方法をサポートしています。

このリストの中にお使いのクラウドホストがなくても、環境変数の設定方法がないというわけではありません。詳細については、各クラウドホストのドキュメントを確認してください。

まとめ

これで完了です。環境変数を設定できることは、コードから環境に基づく設定値をすべて取り除き、より柔軟で安全なコードを作成できることを意味します。

ただし、これらの値はプレーンテキストで保存されることに注意してください。非常に機密性の高い値を保存する場合は、Vaultのような機密ストレージソリューションを検討すべきです。

ご質問がある場合や、構築中のものを私に見せたい場合は、お気軽にdkundel@twilio.comまでメールを送信していただくか、Twitter@dkundelまでご連絡ください。何を構築されるか、とても楽しみです。