コンテンツにスキップ

GitHub Actions

GitHub Actions は、GitHub 上でビルド、テスト、デプロイを自動化するための仕組み。

まず押さえたいこと

  • ワークフローは .github/workflows/*.yml に置く
  • pushpull_request を契機に動かせる
  • jobstep の単位で処理を書く
  • GitHub リポジトリと密接に連携できるのが強み

よく使う構成

  • checkout
  • 言語ランタイムのセットアップ
  • 依存インストール
  • テスト実行
  • lint / format チェック
  • デプロイ

実務でよく見る流れ

pull_request
  -> build
  -> test
  -> lint

main への merge
  -> build
  -> deploy

最小ワークフロー例

.github/workflows/ci.yml

name: ci

on:
  pull_request:
  push:
    branches:
      - main

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v5

      - uses: actions/setup-node@v7
        with:
          node-version: 20

      - name: Install dependencies
        run: npm ci

      - name: Run tests
        run: npm test

ざっくり構成図

[push / pull_request]
         |
         v
[workflow]
   ├─ build
   ├─ test
   ├─ lint
   └─ deploy

matrix を使う場面

Node.js や Python の複数バージョンで同じテストを流したいときに使う。

jobs:
  test:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest]
        node: [18, 20]
    steps:
      - uses: actions/checkout@v5
      - uses: actions/setup-node@v7
        with:
          node-version: ${{ matrix.node }}
      - run: node --version

environment を使う場面

本番デプロイ job に承認や secrets をぶら下げたいときに使う。

jobs:
  deploy:
    runs-on: ubuntu-latest
    environment: production
    steps:
      - run: echo "deploy"

reusable workflow を使う場面

複数リポジトリや複数ワークフローで同じ処理を再利用したいときに使う。

呼び出される側:

on:
  workflow_call:
    inputs:
      config-path:
        required: true
        type: string
    secrets:
      token:
        required: true

jobs:
  run:
    runs-on: ubuntu-latest
    steps:
      - run: echo "${{ inputs.config-path }}"

呼び出す側:

jobs:
  deploy:
    uses: org/repo/.github/workflows/reusable.yml@main
    with:
      config-path: .github/config.yml
    secrets:
      token: ${{ secrets.GITHUB_TOKEN }}

見るポイント

  • どのイベントで動くか
  • job の依存関係が明確か
  • secrets の扱いが適切か
  • 失敗時にどこで止まるか

実務で特に気にする点

  • pull_requestpush の役割を分ける
  • deploy job を main や tag に限定する
  • secrets を environment と組み合わせて管理する
  • 同じ処理をコピペしすぎず、reusable workflow を検討する
  • 実行時間が長いなら cache や job 分割を考える

公式ドキュメント

メモ

  • 最初は build -> test の2段だけでも十分
  • デプロイを含めるなら、ブランチ条件や承認フローも考えたい
  • ワークフローが増えると、CI と CD を分けるか、1 本にまとめるかも設計ポイントになる