AIイノベーションズ
Railway/Tutorials

GitHub Actions PR環境

GitHub Actions と Railway CLI を使って PR 用の環境を自動作成する方法を解説します。

著者: AIイノベーションズ 阿部隼也X / Twitter

Railwayはこちら

GitHub Actions PR環境

Railwayのプレビュー環境機能は非常に強力ですが、CI/CDプロセスをより細かく制御したい場合があるかもしれません。このチュートリアルでは、GitHub ActionsとRailway CLIを使用して、プルリクエスト(PR)ごとに独自のプレビュー環境をプログラムで作成および管理する方法を説明します。

The Action

このワークフローの中核は、GitHub Actions内からRailway CLIコマンドを実行することです。これにより、環境の作成、サービスのデプロイ、データベースのシーディングなど、カスタムの自動化を構築できます。

以下は、新しいプルリクエストが開かれるたびに、Railwayで新しい環境を作成し、アプリケーションをデプロイし、データベースをマイグレーションし、最後にPRにデプロイ先のURLをコメントするワークフローの例です。

name: PR Environment

on:
  pull_request:
    types: [opened]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Create and Deploy PR Environment
        uses: railwayapp/action@v1
        with:
          railway_token: ${{ secrets.RAILWAY_TOKEN }}
          run: |
            # Create a new environment based on the PR number
            railway environment create pr-${{ github.event.number }}
            # Deploy the services to the new environment
            railway up --environment pr-${{ github.event.number }}
            # Run database migrations
            railway run --environment pr-${{ github.event.number }} --service backend npm run db:migrate
      - name: Comment on PR with Deployment URL
        uses: actions/github-script@v6
        with:
          script: |
            const { data: services } = await github.rest.repos.getRepoServices({
              owner: context.repo.owner,
              repo: context.repo.repo,
            });
            const frontendService = services.find(s => s.name === 'frontend');
            const url = frontendService.domains[0].name;
            github.rest.issues.createComment({
              issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.repo,
              body: `🚀 Preview environment deployed at: https://${url}`
            })

プルリクエストがマージまたはクローズされたときに、対応する環境をクリーンアップするための別のワークフローを追加することも重要です。

結論

GitHub ActionsとRailway CLIを組み合わせることで、プレビュー環境のライフサイクルを完全に自動化し、開発ワークフローを大幅に効率化できます。これにより、コードレビューが迅速化され、すべての変更がマージ前に徹底的にテストされることが保証されます。

Railwayはこちら

PR