環境変数は、アプリケーションに対してその外から情報を与えるのに便利です。一般的には、データベース接続の詳細情報やAPIキーのようなものを設定するために使用されます。

アプリケーションの環境変数
アプリケーションの環境変数

環境変数の追加

環境変数は、アプリケーションを追加する際の「アプリケーションの詳細情報」、またはデプロイ後の「設定」画面で追加することができます。

環境変数に含まれる特殊文字

環境変数は、カンマ、括弧、二重引用符を除いて、表記通りに適用されます。

カンマは区切り文字として認識されるため、環境変数では使用できません。また、デプロイ中に使用可能になるタイミングにもよりますが、ビルドまたはロールアウト処理に失敗する可能性があるため、括弧も使用することはできません。

エスケープされていない二重引用符は無視されるか、ロールアウト処理に失敗します。

  • 例えば、"my_example_variable"は、my_example_variableになります。
  • 二重引用符が文字列の中にある場合(例: my_exampl"e_text)、ロールアウト処理に失敗します。
  • 変数の周囲を二重引用符で囲むには、バックスラッシュ(\)でエスケープしてください。"my_example_var"は、"my_example_var"のまま適用されます。
  • 文字列の中の二重引用符もエスケープすることで、ロールアウト処理を完了させることができます。my_examp"le_varは、my_examp"le_varのまま適用されます。

Base64エンコードされた変数

環境変数がBase64エンコードされており、問題(ブラウザの500番台エラー、ビルドエラー、ランタイムエラーなど)が発生する場合は、変数の値をシングルクォーテーション(’)で囲んでみてください。

「アプリケーションの詳細情報」での追加

アプリケーションの追加時に環境変数を追加するには、「環境変数」の項目を開き、キーと値のペアを入力し、ランタイムやビルドプロセスで利用するかどうかを選択します。

アプリケーションの詳細情報を設定
アプリケーションの詳細情報を設定

デプロイメント後の追加

デプロイ後に環境変数を追加するには、アプリケーションの「設定」画面に移動し、「環境変数」セクションまでスクロールして、「環境変数を追加」をクリックします。「環境変数の追加」ウィンドウで、キーと値のペアを入力し、必要に応じて「ランタイムで利用可」と「ビルドプロセスで利用可」を選択してください。

環境変数のキーと値のペアを追加
環境変数のキーと値のペアを追加

環境変数の編集

設定」画面では、変数名(キー)や値を変更することができます。編集(鉛筆)アイコンをクリックして変更を加えたら、「変更を保存」をクリックします。

内部接続を作成し、「環境変数の追加」を選択すると、変数名(キー)が自動生成されます。アプリケーションによっては、異なる環境変数が必要になることがあります。例えば、Laravelでデータベースを使用する場合、database.phpファイルは自動生成される変数とは異なる変数を含みます。アプリケーションで定義された変数を使用するには、必要に応じて変数を編集し、database.phpファイルで定義されているものと一致するようにキーを変更してください。

環境変数の使い方

環境変数の使用方法はアプリケーションによって異なります。例えば、Node.jsでAPI_KEYという変数にアクセスするには、process.env.API_KEY、PHPでは、getenv('API_KEY')を使用します。

内部接続とビルドプロセス

内部接続はランタイム時に利用可能ですが、ビルドプロセス中に利用することはできません

この理由から、ビルドプロセス中にアプリケーションが内部接続でデータベースに接続しようすると、データベースが実行できないことを伝えるエラーが発生し、ビルドに失敗します。

これを回避するいくつかの方法があります。

方法1. データベースに接続するロジックをアプリケーションのビルドコマンドからstartコマンドに移動する。例)ビルドプロセスにprisma migrateのようなコマンドがあり、そのコマンドをstartコマンドに移動させると、アプリケーションは実行時にのみデータベースにアクセスするようになり、ビルドに成功します。

方法2. データベース接続に必要な環境変数を個別に追加し、1つはビルドプロセスで、もう1つはランタイムでのみ使用できるようにする。一方がビルドプロセス中にのみ、他方がランタイム時にのみ利用可能である限りは、同じキー(例: DB_CONNECTION_URL)でも問題ありません。ビルドプロセスで使用する変数の値は、データベースの外部接続の情報(MyKinstaで「データベース」>(データベース名)>「補足」>「外部接続」)を使用します。

自動設定される環境変数

Kinstaでは、常にウェブサーバーが使用するポートとして、PORT環境変数が設定されます。アプリケーションをウェブサーバーと相互作用させるには、この環境変数を使用してください。例えば、Node.jsでは、以下のようにサーバーを起動します。

app.listen(process.env.PORT, () => {
console.log("Weather server is up and running")
})

自動設定されない環境変数

Node.jsアプリケーションには、NODE_ENV環境変数がデフィルトで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")

関連ドキュメント