GitHub Actions

GitHub に統合された CI/CD プラットフォームで、ワークフローを YAML で定義して自動実行する

CI/CD自動化

GitHub Actions とは

GitHub Actions は、GitHub に統合された CI/CD プラットフォームで、プッシュ、プルリクエスト、スケジュールなどのイベントをトリガーにワークフローを自動実行する。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: 22
          cache: npm
      - run: npm ci
      - run: npm test

トリガー

トリガー 用途
push ブランチへのプッシュ
pull_request PR の作成・更新
schedule cron スケジュール
workflow_dispatch 手動実行
release リリースの作成

マトリックスビルド

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

AWS へのデプロイ

jobs:
  deploy:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: read
    steps:
      - uses: actions/checkout@v4
      - uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: arn:aws:iam::123456789012:role/github-actions
          aws-region: ap-northeast-1
      - run: sam deploy --no-confirm-changeset

OIDC で IAM ロールを引き受け、アクセスキーを使わずに AWS にデプロイする。

シークレット管理

env:
  DATABASE_URL: ${{ secrets.DATABASE_URL }}

Settings > Secrets and variables > Actions でシークレットを設定。ログにマスクされる。

キャッシュ

- uses: actions/cache@v4
  with:
    path: ~/.npm
    key: npm-${{ hashFiles('package-lock.json') }}

Jenkins / CircleCI との比較

観点 GitHub Actions Jenkins CircleCI
ホスティング GitHub 統合 セルフホスト SaaS
設定 YAML Groovy (Jenkinsfile) YAML
マーケットプレイス 豊富 (20,000+) プラグイン Orbs
無料枠 2,000 分/月 (パブリック無制限) なし (自前) 6,000 分/月

GitHub Actions の関連書籍も参考になる。

関連用語