GitHub Actionsでmainマージをステージングへ自動デプロイする手順
GitHub Actionsで自動デプロイを始める前に
必要な前提知識
Gitの基本操作ができること
GitHubアカウントを持っていること
用意するもの
デプロイ対象のGitHubリポジトリ
ステージング環境のURL(例: https://staging.example.com)
デプロイに使うシークレット(例: STAGING_SSH_KEY)
ワークフローの全体像
mainブランチへプルリクエストをマージ
push イベントがトリガーされ、GitHub Actions が起動
コードをステージングサーバへ転送し、簡易的なビルド/デプロイを実行
成功すればステージング環境が最新状態に更新される
実装例: .github/workflows/deploy.yml
name: Deploy to Staging
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up SSH
uses: webfactory/ssh-agent@v0.5.4
with:
ssh-private-key: ${{ secrets.STAGING_SSH_KEY }}
- name: Deploy to staging server
run: |
rsync -avz --delete ./ user@staging.example.com:/var/www/app
上記は最小構成です。実際のプロジェクトでは npm install や ビルドコマンド を追加してください。
mainブランチへのマージをトリガーにする設定ポイント
on.push.branches に main を指定すると、main への 直接プッシュ と マージ の両方が対象になります。
PR のマージだけを対象にしたい場合は、on.pull_request.merged を併用すると安全です。
ステージング環境へデプロイするジョブの流れ
コード取得 – actions/checkout で最新のリビジョンを取得
依存関係インストール – npm ci や yarn install を実行
ビルド – npm run build(React/Next.js など)
転送 – rsync や scp でステージングサーバへコピー
サーバ再起動(必要なら) – ssh 経由で systemctl restart app などを実行
注意点とよくあるエラー
シークレットが漏れないように、リポジトリ設定で STAGING_SSH_KEY を必ず 暗号化されたシークレット として保存してください。
rsync のパスがサーバ側で異なると command not found エラーになるので、事前にサーバにインストールを確認しましょう。
デプロイ後にキャッシュが残っていると古いファイルが表示されることがあります。--delete オプションで不要ファイルを削除すると解決します。