Blog 一覧に戻る
GitHub ActionsCI/CDDevOps

GitHub Actions で作る実践 CI/CD パイプライン

テスト・ビルド・デプロイを自動化する GitHub Actions ワークフローの設計パターンを紹介。キャッシュ戦略・環境変数の安全な扱い・Slack 通知連携など、実運用で役立つ設定を網羅します。

GitHub Actions の基本構造

GitHub Actions のワークフローは YAML ファイルで定義し、.github/workflows/ に配置します。

name: CI

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
      - run: npm ci
      - run: npm test

キャッシュ戦略

依存関係のインストールは CI の中で最も時間がかかる処理のひとつです。actions/cache を使ってキャッシュすることで大幅に時間を短縮できます。

- uses: actions/setup-node@v4
  with:
    node-version: 20
    cache: 'npm'  # package-lock.json をキーにして自動キャッシュ

環境変数の安全な扱い

API キーやトークンは GitHub Secrets に登録し、ワークフロー内から参照します。

- name: Deploy to Vercel
  env:
    VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
  run: npx vercel --prod --token $VERCEL_TOKEN

絶対にやってはいけないこと:

並列実行でビルドを高速化

複数のジョブは needs キーで依存関係を制御し、独立したジョブは並列実行できます。

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - run: npm run lint

  type-check:
    runs-on: ubuntu-latest
    steps:
      - run: npm run type-check

  test:
    runs-on: ubuntu-latest
    steps:
      - run: npm test

  deploy:
    needs: [lint, type-check, test]  # 全て通過したらデプロイ
    runs-on: ubuntu-latest
    steps:
      - run: npm run deploy

Slack 通知連携

デプロイの成否を Slack に通知することで、チームへの共有が自動化できます。

- name: Notify Slack on success
  if: success()
  uses: slackapi/slack-github-action@v1
  with:
    payload: |
      {
        "text": "✅ デプロイ完了: ${{ github.ref_name }}"
      }
  env:
    SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}

- name: Notify Slack on failure
  if: failure()
  uses: slackapi/slack-github-action@v1
  with:
    payload: |
      {
        "text": "❌ デプロイ失敗: ${{ github.ref_name }}"
      }
  env:
    SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}

PR 時のプレビューデプロイ

Vercel や Netlify を使っている場合、PR 時に自動でプレビュー環境を作成できます。

on:
  pull_request:
    types: [opened, synchronize]

jobs:
  preview:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Deploy Preview
        run: npx vercel --token ${{ secrets.VERCEL_TOKEN }}

まとめ

GitHub Actions は設定が YAML だけで完結し、豊富なマーケットプレイスアクションを活用できるのが強みです。まず CI(テスト・リント)から始め、慣れたら CD(デプロイ自動化)へと段階的に拡張していくのがおすすめです。