設定と環境設定
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2020年03月09日(月)
Table of Contents
単一のアプリは、常に複数の環境 (最低でも開発用マシンと Heroku の本番環境など) で実行されます。オープンソースのアプリは、何百もの異なる環境にデプロイされる可能性があります。
すべての環境で同じコードが実行される場合もありますが、通常は環境固有の設定が使用されます。たとえば、アプリのステージング環境と本番環境とでは別の Amazon S3 バケットを使用することが多く、その場合はバケットごとに別の資格情報も必要になります。
アプリの環境固有の設定は、(アプリのソースコードではなく) 環境変数に保存する必要があります。各環境の設定を個別に変更でき、機密性の高い資格情報がバージョン管理に保存されるのを防ぐことができます。環境に設定を保存するについての詳細は、こちらを参照してください。
従来型のホストでは、またはローカルで作業するときは、多くの場合、.bashrc
ファイルで環境変数を設定します。Heroku では、環境設定を使用します。
環境設定を管理する
いずれかの方法で環境設定を設定または削除するたびに、アプリが再起動され、新しいリリースが作成されます。
環境設定の値は持続的です。デプロイしたりアプリを再起動したりしても変わりません。値を変更する必要がない限り、設定する必要があるのは 1 回のみです。
Heroku CLI を使用する
Heroku CLI の heroku config
コマンドを使用すると、アプリの環境設定を簡単に管理できます。
現在の環境設定の値を表示する
$ heroku config
GITHUB_USERNAME: joesmith
OTHER_VAR: production
$ heroku config:get GITHUB_USERNAME
joesmith
環境設定を設定する
$ heroku config:set GITHUB_USERNAME=joesmith
Adding config vars and restarting myapp... done, v12
GITHUB_USERNAME: joesmith
環境設定を削除する
$ heroku config:unset GITHUB_USERNAME
Unsetting GITHUB_USERNAME and restarting myapp... done, v13
Heroku Dashboard を使用する
Heroku Dashboard で、アプリの Settings
(設定) タブから環境設定を編集することもできます。
Platform API を使用する
Heroku Platform API で、シンプルな HTTPS REST クライアントと JSON データ構造を使用して、プログラムでアプリの環境設定を管理することができます。アプリの適切なアクセス許可を持つユーザーを表す、有効な Heroku アクセストークンが必要です。
コードから環境設定の値にアクセスする
環境設定は、アプリのコードでは環境変数として示されます。たとえば、Node.js では、process.env.DATABASE_URL
でアプリの DATABASE_URL
環境設定にアクセスできます。
例
次のコマンドを実行して、S3 アカウントキーの環境設定を追加します。
$ cd myapp
$ heroku config:set S3_KEY=8N029N81 S3_SECRET=9s83109d3+583493190
Setting config vars and restarting myapp... done, v14
S3_KEY: 8N029N81
S3_SECRET: 9s83109d3+583493190
追加した環境設定を実行時に読み込むコードを設定します。たとえば、Ruby では、ENV['KEY']
パターンを使用して環境変数にアクセスするため、次のようにイニシャライザを記述できます。
AWS::S3::Base.establish_connection!(
:access_key_id => ENV['S3_KEY'],
:secret_access_key => ENV['S3_SECRET']
)
Node.js では、process.env
を使用して環境変数にアクセスします。
const aws = require('aws-sdk');
let s3 = new aws.S3({
accessKeyId: process.env.S3_KEY,
secretAccessKey: process.env.S3_SECRET
});
Java では、次のように、System.getenv('key')
の呼び出しを通じて環境変数にアクセスします。
S3Handler = new S3Handler(System.getenv("S3_KEY"), System.getenv("S3_SECRET"))
Python では、boto ライブラリを使用します。
from boto.s3.connection import S3Connection
s3 = S3Connection(os.environ['S3_KEY'], os.environ['S3_SECRET'])
Heroku にデプロイした後、アプリで環境設定のキーセットを使用します。
環境設定のポリシー
- すべてのプログラミング言語からアクセスできるように、環境設定のキーには英数字とアンダースコア (
_
) のみ使用する必要があります。環境設定のキーにハイフンを含めることはできません。 - 環境設定のデータ (すべてのキーと値の組み合わせ) は、各アプリにつき 32 KB 以内にする必要があります。
- 環境設定のキーの先頭に二重のアンダースコア (
__
) を使用することはできません。 - Heroku プラットフォームで設定されている場合を除き、環境設定のキーの先頭に
HEROKU_
を使用することはできません。
アドオンと環境設定
アプリにアドオンをプロビジョニングすると、通常はそのアドオンの環境設定がアプリに追加されます。追加された環境設定の値は、随時、アドオンのプロバイダによって更新される可能性があります。
アドオンとアドオンによる環境設定の使用方法についての詳細は、「アドオンの値が変更される可能性」を参照してください。
ローカルの設定
アプリをローカルで実行するには、Heroku Local コマンドラインツールを使用します。
本番モードと開発モード
多くの言語やフレームワークで、開発モードがサポートされています。開発モードでは、通常、詳細なデバッグと、ソースファイルが変更された場合の動的なリロード(再読み込み)や再コンパイルを行うことができます。
たとえば、Ruby 環境では、RACK_ENV
環境設定を development
に設定すると、開発モードを有効にできます。
本番の Heroku アプリでは、このような環境設定を理解し、追跡することが重要です。開発モードは、通常、開発には適していますが、パフォーマンスが低下するため、本番環境には適していません。