変数の管理
RailwayのパブリックGraphQL APIを介して変数を管理する方法を学びます。
著者: AIイノベーションズ 阿部隼也(X / Twitter)変数の使用
変数は、Railwayのサービス全体で構成とシークレットを管理する方法を提供します。
定義されると、次のシナリオで環境変数としてアプリケーションで利用できるようになります。
- 各サービスデプロイメントのビルドプロセス。
- 実行中のサービスデプロイメント。
railway run <COMMAND>
によって呼び出されるコマンドrailway shell
によるローカルシェル
Railwayには、プラットフォームの動作を制御できる構成変数の概念もあります。
変数を追加、更新、または削除すると、ステージングされた変更のセットが作成され、適用するにはレビューしてデプロイする必要があります。
サービス変数
個々のサービスにスコープされた変数は、サービスの「変数」タブに移動して定義できます。
サービス変数の定義
サービスの変数タブから、New Variable
をクリックしてフォームフィールドに変数を入力するか、RAW Editor
を使用して .env
またはjson形式のファイルの内容を貼り付けます。
共有変数
共有変数は、同じプロジェクト内の複数のサービス間で変数の重複を減らすのに役立ちます。
共有変数の定義
プロジェクト設定 -> 共有変数ページから、環境を選択し、変数名と値を入力して、Add
をクリックします。
共有変数の使用
共有変数を使用するには、プロジェクト設定 -> 共有変数メニューから共有ボタンをクリックし、共有するサービスを選択するか、サービス自体の変数タブにアクセスして「共有変数」をクリックします。
サービスに共有変数を追加すると、サービスに参照変数が作成されます。
参照変数
参照変数は、他のサービス、共有変数、または同じサービスの変数でさえも参照して定義される変数です。
参照変数を使用する場合、Railway提供の変数にもアクセスできます。
参照変数を定義するときは、Railwayのテンプレート構文が使用されます。
共有変数の参照
共有変数を参照するには、次の構文を使用します。
${{ shared.VARIABLE_KEY }}
例
- プロジェクトに
API_KEY
という名前の共有変数が定義されており、APIキーをサービスで利用できるようにする必要があります。サービスの変数タブに移動し、次の値を持つ変数を追加します。API_KEY=${{shared.API_KEY}}
別のサービスの変数を参照する
別のサービスの変数を参照するには、次の構文を使用します。
${{SERVICE_NAME.VAR}}
例
- データベースサービスに
DATABASE_URL
という変数が設定されており、データベースへの接続文字列が含まれています。データベースサービス名は Clickhouse です。 - この接続文字列をプロジェクトの別のサービスで利用できるようにする必要があります。接続文字列が必要なサービスの変数に移動し、次の値を持つ変数を追加します。
DATABASE_URL=${{ Clickhouse.DATABASE_URL }}
- フロントエンドサービスはバックエンドにリクエストを送信する必要があります。フロントエンドコードでバックエンドURLをハードコーディングしたくありません。フロントエンドサービス設定に移動し、バックエンドURLのRailway提供変数を追加します。
API_URL=https://${{ backend.RAILWAY_PUBLIC_DOMAIN }}
同じサービスの変数を参照する
同じサービスの変数を参照するには、次の構文を使用します。
${{ VARIABLE_NAME }}
例
- サービスにAPIエンドポイントを構築するために必要な変数(
BASE_URL
とAUTH_PATH
)が既に定義されており、それらを組み合わせて単一の変数を作成したいとします。サービス変数に移動し、同じサービスの他の変数を参照する新しい変数を追加します。AUTH_ENDPOINT=https://${{ BASE_URL }}/${{ AUTH_PATH }}
オートコンプリートドロップダウン
Railwayダッシュボードは、参照変数の作成に役立つように、名前と値の両方のフィールドにオートコンプリートドロップダウンを提供します。
シールされた変数
Railwayは、セキュリティを強化するために変数値のシール機能を提供します。変数がシールされると、その値はビルドとデプロイメントに提供されますが、UIには表示されず、APIを介して取得することもできません。
変数のシール
既存の変数をシールするには、変数の右側にある3つの点のメニューをクリックし、「シール」オプションを選択します。
シールされた変数の更新
シールされた変数は、通常の変数と同様に3つの点のメニューの編集オプションをクリックすることで更新できますが、Raw Editorを介して更新することはできません。
注意事項
シールされた変数はセキュリティ第一の機能であり、いくつかの制約があります。
- シールされた変数はシール解除できません。
- シールされた変数値は、CLIを介して
railway variables
またはrailway run
を使用しても提供されません。 - PR環境の作成時にシールされた変数はコピーされません。
- 環境の複製時にシールされた変数はコピーされません。
- サービスの複製時にシールされた変数はコピーされません。
- 環境の変更を同期する際、シールされた変数は差分の一部として表示されません。
- シールされた変数は外部統合と同期されません。
Railway提供の変数
Railwayは、開発業務を支援するために多くの変数を提供しています。一般的に使用される変数には、次のものがあります。
RAILWAY_PUBLIC_DOMAIN
RAILWAY_PRIVATE_DOMAIN
RAILWAY_TCP_PROXY_PORT
完全なリストについては、変数リファレンスページを確認してください。
複数行の変数
変数は複数行にまたがることができます。変数値入力フィールドで Control + Enter
(Macでは Cmd + Enter
)を押して改行を追加するか、Raw Editorで改行を入力するだけです。
サービスでの変数の使用
変数は、ランタイム時に環境変数として利用できます。アプリケーションで使用するには、言語に適したインターフェイスを使用して環境変数を取得するだけです。
たとえば、nodeアプリでは -
process.env.VARIABLE_NAME;
ローカル開発
Railway CLIを使用すると、Railwayプロジェクトで構成された環境変数を使用してローカルでコードを実行できます。
- Railway CLIがインストールされ、プロジェクトにリンクされていることを確認します
- ターミナルで、
railway run <run command>
を実行します -> 例:railway run npm run dev
CLIの使用に関する詳細については、CLIガイドを確認してください。
Dockerfileでの変数の使用
Dockerfileで変数を使用する方法については、Dockerfileガイドを参照してください。
Herokuから変数をインポートする
サービス変数ページのコマンドパレットを使用して、既存のHerokuアプリから変数をインポートできます。Herokuアカウントを接続した後、Herokuアプリのいずれかを選択すると、構成変数が現在のサービスと環境に追加されます。
Dopplerを使用したシークレット管理
Dopplerの友人たちは、DopplerのシークレットをRailwayのプロジェクトに簡単に同期できる統合を維持しています。
Doppler Docs統合で、DopplerをRailwayで使用する方法についての説明を入手できます。
PR