GitHub ActionsでCI/CDを構築する手順

インフラ・クラウド

GitHub Actionsは、GitHub上で動くCI/CDツールです。プルリクエスト時の自動テスト、リリース時の自動デプロイなどをYAMLで宣言的に書けます。本記事では、GitHub ActionsでCI/CDパイプラインを構築する基本手順を解説します。

GitHub Actionsとは

リポジトリ内に .github/workflows/ディレクトリを作り、YAMLファイルを配置するだけでCI/CDが動きます。GitHub Hostedランナー(無料枠あり)で完結するため、別途CIサーバーの運用は不要です。

基本構造

  • Workflow:YAMLファイル単位の自動化定義
  • Job:Workflow内の独立した実行単位(並列実行可)
  • Step:Jobの中の各処理
  • Action:再利用可能な処理(Marketplaceで多数公開)

シンプルなテストWorkflow

# .github/workflows/test.yml
name: CI

on:
  pull_request:
  push:
    branches: [main]

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

マトリクスで複数バージョンをテスト

jobs:
  test:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest]
        node: [18, 20, 22]
    steps:
      - uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node }}
      - run: npm test

デプロイの追加(例:S3)

deploy:
  needs: test
  if: github.ref == 'refs/heads/main'
  runs-on: ubuntu-latest
  permissions:
    id-token: write   # OIDC for AWS
    contents: read
  steps:
    - uses: actions/checkout@v4
    - uses: aws-actions/configure-aws-credentials@v4
      with:
        role-to-assume: arn:aws:iam::123:role/deploy
        aws-region: ap-northeast-1
    - run: aws s3 sync ./dist s3://my-site --delete

Secretsとenvironment

  • Repository Secrets:リポジトリ全体で使う秘密値
  • Environment Secrets:本番/ステージング等の環境別
  • 承認ルール付きEnvironmentで本番デプロイにレビュー必須化

パフォーマンス向上のコツ

  • cache: 'npm'等のセットアップActionに任せる
  • actions/cacheで任意のファイルをキャッシュ
  • jobを分離して並列実行
  • 大きなビルドはmatrixで分割
  • 不要なファイルチェックアウトをfetch-depthで制限

Self-hosted runners

大規模・長時間ジョブ・社内ネットワーク内のデプロイには、自前ランナーをVPCやKubernetes上に立てる選択肢もあります。Actions Runner Controller(ARC)がEKS上での運用に便利です。

まとめ

GitHub Actionsは、低コストで強力なCI/CD基盤を実現できます。テスト → ビルド → デプロイをYAMLで宣言するだけで、コードの品質と公開フローが自動化されます。OIDCによるクラウド連携や承認付きEnvironmentまで揃えれば、本番運用にも十分耐える構成になります。