環境変数
環境変数は、アプリケーションの実行外部からアプリケーションに情報を与えるのに便利です。一般的には、データベース接続の詳細情報やAPIキーなどを設定するのに使われます。
環境変数の特殊文字
環境変数のキーには、a-z、0-9、アンダースコア(_
)のみ使用可能です。環境変数の値は、括弧、カンマ、二重引用符を除いて文字通り適用されます。
括弧
括弧は、デプロイ時に使用できるタイミングによっては、ビルドやロールアウトの処理を失敗させる原因になります。環境変数では使用できません。
カンマ
エスケープされていないカンマは区切り記号として解釈され、環境変数では使用できません。
- 例)
write_stock,read_orders
はロールアウト処理の失敗につながります。 - 文字列の中にカンマを残すには、次のようにバックスラッシュ (
\
) でエスケープしてください:write_stock\,read_orders
。すると、実際にはwrite_stock,read_orders
として適用されます。
二重引用符
エスケープされていない二重引用符は無視されるか、ロールアウト処理の失敗を引き起こします。
- 例えば、
"my_example_variable"
はmy_example_variable
として適用されます。 - 変数を二重引用符で囲むには、次のようにバックスラッシュ(
\
)で二重引用符をエスケープしてください:\"my_example_var\"
。すると、実際には"my_example_var"
として適用されます。 - 二重引用符が文字列の中にあると(例:
my_exampl"e_text
)、ロールアウト処理は失敗します。 - 文字列の中で二重引用符を使うには、バックスラッシュ(
\
)でエスケープしてください:my_examp\"le_var
。すると、実際にはmy_examp\"le_var
として適用されます。
Base64エンコードされた変数
環境変数がBase64エンコードされていて、問題が発生する場合(ブラウザの500エラー、ビルドエラー、ランタイムエラーなど)、変数の値をシングルクォートで囲んでみてください。
環境変数の追加
環境変数は、アプリケーションを追加する際の「アプリケーションの詳細情報」ステップ、またはデプロイ後のアプリケーションの「設定」ページで追加できます。
アプリケーションの詳細
アプリケーションの追加時に環境変数を設定するには、「環境変数」セクションを展開し、キーと値のペアを入力し、ランタイムまたはビルドプロセス中に変数を使用可能にするかどうかを選択します。
デプロイ後
デプロイ後に環境変数を追加するには、アプリケーションの「設定」ページに移動し、「環境変数」セクションまでスクロールして、「環境変数を追加」をクリックします。「環境変数の追加」ポップアップでキーと値のペアを入力し、ランタイムおよびビルドプロセス中に変数を使用可能にするかどうかを選択します。「変更を再デプロイ」をクリックするとアプリケーションが再デプロイされます。
環境変数の編集
「設定」ページで変数名(キー)や値を編集することができます。変数を編集するには、「編集」(鉛筆) アイコンをクリックして変更を加え「変更を再デプロイ」をクリックします。するとアプリケーションが再デプロイされます。
内部接続を設定し、変数追加のボックスにチェックを入れると、変数名(キー)が自動で作成されます。アプリケーションによっては、別の環境変数が求められる場合があります。例えば、Laravelでデータベースを使用するには、database.phpファイルにはMyKinstaで自動で作成される変数名とは異なる変数名を使用することになります。アプリケーションで定義された変数名を使用するには、必要に応じて各変数を編集し、database.phpファイルで定義されているものと一致するようにキーを変更します。
環境変数の使用
環境変数をどのように使用するかは、アプリケーション次第です。例えばNodeでは、API_KEY
という名前の変数にアクセスするには、process.env.API_KEY
を使用します。 PHP では、getenv('API_KEY')
を使用することができます。
内部接続とビルドプロセス
内部接続はランタイムでのみ利用可能です。ビルドプロセスでは利用不可となっています。
ビルド処理中にアプリケーションが内部接続を使用してデータベースに接続しようとすると、 データベースが実行されていないという旨のエラーが発生し、ビルドに失敗します。これは、内部接続がビルド中に使用されるのではなく、ランタイムでのみ使用されるためです。
これを回避する方法はいくつかあります。
選択肢1. データベースに接続するロジックを、アプリケーションのビルドコマンドからstartコマンドに移す:例えば、prisma migrate
のようなコマンドがビルドプロセスにあり、そのコマンドをstartコマンドに移動すると、アプリケーションは実行時にのみデータベースにアクセスし、ビルドは成功します。
選択肢2. データベース接続に必要な環境変数を個別に追加し、1つはビルドプロセスで使用し、もう1つはランタイムでのみ使用する:キーは同じでもよく(例:DB_CONNECTION_URL
)、一方がビルドプロセス中にのみ利用可能で、もう一方がランタイムでのみ利用可能であれば問題ありません。データベースの外部接続情報(「データベース」>(データベース名)>「情報」>「外部接続」)を使用してください。
Kinstaが設定する環境変数
Kinstaは、ウェブサーバーにより使用されるポートにPORT
を採用しています。アプリケーションがウェブサーバーとやり取りするには、この環境変数を使用する必要があります。例えば、Node.jsでは、次のようにサーバーを起動します。
app.listen(process.env.PORT, () => {
console.log("Weather server is up and running")
})
Kinstaによって設定されない環境変数
デフォルトでは、NODE_ENV
環境変数はNode.jsアプリケーションのproduction
に設定されていません。この環境変数は手動で追加する必要があります。
環境変数の言語例
環境変数をどのように使用するかは、アプリケーション次第です。次の表は、API_KEYという名前の環境変数をさまざまな言語で呼び出す方法を示しています。
言語 | コード |
---|---|
Ruby | ENV["API_KEY"] |
Node.js | process.env.API_KEY; |
Python | os.environ.get('API_KEY') |
Java | System.getenv("API_KEY"); |
Scala | System.getenv("API_KEY"); |
PHP | getenv('API_KEY'); |
Go | os.Getenv("API_KEY") |