環境変数の設定方法

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

environment variables - header

この記事はTwilio Developer AdvocateのDominik Kundelがこちらで執筆した記事を日本語化したものになります。

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

環境変数とは

dog - wondering

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

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

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

Windowsの環境変数

Windows内の環境変数の設定は、何層もの設定ダイアログの中に隠されています。ここでは、Windowsのほとんどの機能と同様に、グラフィカルユーザーインターフェース(GUI)を使用して環境変数を設定します。各インターフェースを開くには、まず「ファイル名を指定して実行」プロンプトを開く必要があります。このプロントは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

macOSおよびLinuxディストリビューション

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

echo $SHELL

コマンド実行すると、どのシェルを実行しているかが表示されます。一般的なシェルは、この例で使用するbashシェルです。しかし、zshfishなどほかのシェルでも手順は同じです。

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

export KEY=value

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

export TWILIO_ACCOUNT_SID=youraccountsid

Twilioコンソールから、Account SIDをコピーし、youraccountsidを置き換えます。編集したファイルを保存し、新しいターミナルインスタンスを開きます。このターミナルで次のコマンドを実行し、動作をテストします。

echo $TWILIO_ACCOUNT_SID

保存した値が表示されていれば成功です。

terminal-env-variable.png

.env.

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

.envファイルを読み込むためのライブラリは、多くのプログラミング言語で用意されています。いくつか紹介しましょう。

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

TWILIO_ACCOUNT_SID=youraccountsid

次にそれぞれのライブラリで環境変数を使用できます。Node.jsの場合は次のようになります。

require('dotenv').config(); 
console.log('環境変数TWILIO_ACCOUNT_SIDの値: ', process.env.TWILIO_ACCOUNT_SID);

環境変数をリポジトリにコミットしないように.envファイルを.gitignoreに必ず追加します

クラウドプロバイダー

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

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

まとめ

環境変数を用いて環境に依存する設定値をすべて取り除き、より柔軟で安全なコードを実装できます。

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

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

何を構築されるか、とても楽しみです!