mcpField
D
database

database

github.com/railwayappクラウド・DevOps338872 回インストール2 週間前に更新
リポジトリ

database について

Railway プロジェクトに PostgreSQL、Redis、MySQL、MongoDB を追加し、他のサービスとの接続を設定するスキルです。公式テンプレートのデプロイ前に既存データベースを確認します。

主な機能

  1. 01既存データベースの確認
  2. 024 種類のデータベーステンプレートのデプロイ
  3. 03サービス接続変数の設定
  4. 04フロントエンド接続の制約の説明

活用シーン

  1. 01Railway アプリへの PostgreSQL や Redis の追加
  2. 02バックエンドサービスとデータベースの接続
  3. 03データベースの既存状況の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/railwayapp/railway-skills --skill database

インストール後、Claude Code で/databaseを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
environment-config.md
monorepo.md
railpack.md
variables.md
scripts/
railway-api.sh

詳細

データベース

Railway の公式データベースサービスを追加します。これらは、ボリューム、ネットワーク、接続用変数が事前設定された、メンテナンス済みのテンプレートです。

データベース以外のテンプレートについては、templates スキルを参照してください。

使用する場合

  • ユーザーが「データベースを追加」「Postgres を追加」「Redis を追加」などと依頼した場合
  • ユーザーがアプリケーション用のデータベースを必要としている場合
  • ユーザーがデータベースへの接続について尋ねた場合
  • ユーザーが「Postgres を追加してサーバーに接続して」と言った場合
  • ユーザーが「データベースを接続して」と言った場合

判断の流れ

作成する前に、必ず既存のデータベースを確認してください。

User mentions database
        │
  Check existing DBs first
  (query env config for source.image)
        │
   ┌────┴────┐
 Exists    Doesn't exist
    │           │
    │      Create database
    │      (CLI or API)
    │           │
    │      Wait for deployment
    │           │
    └─────┬─────┘
          │
    User wants to
    connect service?
          │
    ┌─────┴─────┐
   Yes         No
    │           │
Wire vars    Done +
via env     suggest wiring
skill

既存のデータベースを確認する

データベースを作成する前に、すでに存在していないか確認してください。

環境設定の全体的な構造については、environment-config.md を参照してください。

railway status --json

次に、環境設定を取得し、各サービスの source.image を確認します。

query environmentConfig($environmentId: String!) {
  environment(id: $environmentId) {
    config(decryptVariables: false)
  }
}

config.services オブジェクトには、各サービスの設定が含まれています。次の値を source.image で確認してください。

  • ghcr.io/railway/postgres* または postgres:* → Postgres
  • ghcr.io/railway/redis* または redis:* → Redis
  • ghcr.io/railway/mysql* または mysql:* → MySQL
  • ghcr.io/railway/mongo* または mongo:* → MongoDB

利用可能なデータベース

データベーステンプレートコード
PostgreSQLpostgres
Redisredis
MySQLmysql
MongoDBmongodb

前提条件

プロジェクトのコンテキストを取得します。

railway status --json

次の値を抽出します。

  • id - プロジェクト ID
  • environments.edges[0].node.id - 環境 ID

ワークスペース ID を取得します(ステータス出力には含まれません)。

bash <<'SCRIPT'
scripts/railway-api.sh \
  'query getWorkspace($projectId: String!) {
    project(id: $projectId) { workspaceId }
  }' \
  '{"projectId": "PROJECT_ID"}'
SCRIPT

データベースを追加する

ステップ 1:テンプレートを取得する
bash <<'SCRIPT'
scripts/railway-api.sh \
  'query template($code: String!) {
    template(code: $code) {
      id
      name
      serializedConfig
    }
  }' \
  '{"code": "postgres"}'
SCRIPT

これにより、デプロイに必要なテンプレートの id と serializedConfig が返されます。

ステップ 2:テンプレートをデプロイする
bash <<'SCRIPT'
scripts/railway-api.sh \
  'mutation deployTemplate($input: TemplateDeployV2Input!) {
    templateDeployV2(input: $input) {
      projectId
      workflowId
    }
  }' \
  '{
    "input": {
      "templateId": "TEMPLATE_ID",
      "serializedConfig": SERIALIZED_CONFIG,
      "projectId": "PROJECT_ID",
      "environmentId": "ENVIRONMENT_ID",
      "workspaceId": "WORKSPACE_ID"
    }
  }'
SCRIPT

重要: serializedConfig はテンプレートのクエリから取得したそのままのオブジェクトであり、文字列ではありません。

データベースに接続する

デプロイ後、ほかのサービスは参照変数を使って接続します。

変数の参照構文と接続パターンの詳細については、variables.md を参照してください。

バックエンドサービス(サーバー側)

サーバー間通信には、プライベート/内部 URL を使用します。

データベース変数の参照
PostgreSQL${{Postgres.DATABASE_URL}}
Redis${{Redis.REDIS_URL}}
MySQL${{MySQL.MYSQL_URL}}
MongoDB${{MongoDB.MONGO_URL}}
フロントエンドアプリケーション

重要: フロントエンドはユーザーのブラウザーで実行されるため、Railway のプライベートネットワークにはアクセスできません。パブリック URL を使用するか、バックエンド API 経由で接続する必要があります。

フロントエンドからデータベースに直接アクセスする場合(推奨されません):

  • パブリック URL の変数(例:${{MongoDB.MONGO_PUBLIC_URL}})を使用します
  • TCP プロキシを有効にする必要があります

より適切なパターン:フロントエンド → バックエンド API → データベース

例:PostgreSQL を追加する

bash <<'SCRIPT'
# 1. Get context
railway status --json
# Extract project.id and environment.id

# 2. Get workspace ID
scripts/railway-api.sh \
  'query { project(id: "proj-id") { workspaceId } }' '{}'

# 3. Fetch Postgres template
scripts/railway-api.sh \
  'query { template(code: "postgres") { id serializedConfig } }' '{}'

# 4. Deploy template
scripts/railway-api.sh \
  'mutation deploy($input: TemplateDeployV2Input!) {
    templateDeployV2(input: $input) { projectId workflowId }
  }' \
  '{"input": {"templateId": "...", "serializedConfig": {...}, "projectId": "...", "environmentId": "...", "workspaceId": "..."}}'
SCRIPT
次に、別のサービスから接続する

environment スキルを使って、変数の参照を追加します。

{
  "services": {
    "<backend-service-id>": {
      "variables": {
        "DATABASE_URL": { "value": "${{Postgres.DATABASE_URL}}" }
      }
    }
  }
}

応答

デプロイが成功すると、次の内容が返されます。

{
  "data": {
    "templateDeployV2": {
      "projectId": "e63baedb-e308-49e9-8c06-c25336f861c7",
      "workflowId": "deployTemplate/project/e63baedb-e308-49e9-8c06-c25336f861c7/xxx"
    }
  }
}

作成されるもの

各データベーステンプレートによって、次のものが作成されます。

  • データベースイメージを使用するサービス
  • データを永続化するボリューム
  • 接続文字列用の環境変数
  • 外部アクセス用の TCP プロキシ(該当する場合)

エラー処理

エラー原因解決策
テンプレートが見つからないテンプレートコードが無効次を使用します:postgres、redis、mysql、mongodb
権限がありませんユーザーにアクセス権がないDEVELOPER ロール以上が必要です
プロジェクトが見つからないプロジェクト ID が無効正しい ID を確認するには railway status --json を実行します

ワークフローの例

「Postgres を追加してサーバーに接続する」
  1. 環境設定のクエリで既存の DB を確認する
  2. Postgres が存在する場合:ステップ 5 に進む
  3. 存在しない場合:Postgres テンプレートをデプロイする(テンプレートを取得 → デプロイ)
  4. デプロイが完了するまで待つ
  5. 対象のサービスを特定する(複数ある場合は確認するか、リンク済みのサービスを使用する)
  6. environment スキルを使って、次の内容をステージングする:DATABASE_URL: { "value": "${{Postgres.DATABASE_URL}}" }
  7. 変更を適用する
「add postgres」
  1. env config クエリで既存の DB を確認します
  2. 存在する場合:「このプロジェクトにはすでに Postgres があります」
  3. 存在しない場合:Postgres テンプレートをデプロイします
  4. ユーザーに伝えます:「Postgres を作成しました。次の設定でサービスを接続できます:DATABASE_URL=${{Postgres.DATABASE_URL}}」
「connect the server to redis」
  1. env config クエリで既存の DB を確認します
  2. redis が存在する場合:environment スキルを使って REDIS_URL を設定し、適用します
  3. redis が存在しない場合:「Redis が見つかりません。作成しますか?」と確認します
    • redis テンプレートをデプロイします
    • REDIS_URL を設定し、適用します

構成可能性

  • サービスを接続する:environment スキルを使って変数の参照を追加します
  • データベースサービスを表示する:service スキルを使います
  • ログを確認する:deployment スキルを使います

コメント