モノレポのデプロイ
Railwayでモノレポをデプロイする方法を学びます。
著者: AIイノベーションズ 阿部隼也(X / Twitter)モノレポのデプロイ
Railwayは、さまざまなタイプのモノレポのデプロイのサポートを向上させるためのいくつかの機能を提供します。
- 分離されたモノレポ → 含まれているディレクトリに完全に分離されたコンポーネントを含むリポジトリ(例:JSフロントエンドとPythonバックエンド)
- 共有モノレポ → ルートディレクトリからコードまたは構成を共有するコンポーネントを含むリポジトリ(例:YarnワークスペースまたはLernaプロジェクト)
分離されたモノレポのデプロイに関する完全なステップバイステップのウォークスルーについては、この主題に関するチュートリアルを参照してください。
分離されたモノレポのデプロイ
モノレポの最も単純な形式は、コードや構成を共有しない完全に分離された2つのプロジェクトを含むリポジトリです。
├── frontend/
│ ├── index.js
│ └── ...
└── backend/
├── server.py
└── ...
このタイプのモノレポをRailwayにデプロイするには、サービスのルートディレクトリを定義します。
- プロジェクトキャンバス内のサービスを選択して、サービスビューを開きます。
- 「設定」タブをクリックします。
- ルートディレクトリオプションを設定します。これを設定すると、Railwayは新しいデプロイメントを作成するときにそのディレクトリからのみファイルをプルダウンします。
注: Railway構成ファイルはルートディレクトリパスに従いません。railway.json
または railway.toml
ファイルの絶対パスを指定する必要があります。
共有モノレポのデプロイ
JavaScriptエコシステムで一般的な共有モノレポには、すべてが共通のルートディレクトリを共有する複数のコンポーネントが含まれています。
デフォルトでは、すべてのコンポーネントはルートディレクトリから単一のコマンド(例:npm run build
)でビルドされます。ただし、Nixpacksを使用している場合は、サービス設定でビルドコマンドを上書きできます。
├── package.json
└── packages
├── backend
│ └── index.js
├── common
│ └── index.js
└── frontend
└── index.jsx
このタイプのモノレポをRailwayにデプロイするには、モノレポコードベースを参照する各プロジェクトのサービス設定で、別のカスタム開始コマンドを定義します。
- プロジェクトキャンバス内のサービスを選択して、サービスビューを開きます。
- 「設定」タブをクリックします。
- 開始コマンドを設定します(例:
npm run start:backend
およびnpm run start:frontend
)。
ウォッチパス
モノレポ内の他のサービスの再ビルドをトリガーする1つのサービスのコード変更を防ぐには、ウォッチパスを構成する必要があります。
ウォッチパスは、どのファイルパスが変更されたかに基づいて新しいデプロイメントをトリガーするために使用できるgitignore形式のパターンです。
たとえば、モノレポは、/packages/backend
ディレクトリ内のファイルが変更された場合にのみビルドをトリガーしたい場合があります。
CLIの使用
CLIを使用してモノレポからデプロイされたサービスと対話する場合、コマンドを実行するときは常に適切なサービスに「リンク」されていることを確認してください。
CLIから特定のサービスにリンクするには、railway link
を使用し、プロンプトに従います。
PR