GitHub Actions¶
GitHub Actions は、GitHub 上でビルド、テスト、デプロイを自動化するための仕組み。
まず押さえたいこと¶
- ワークフローは
.github/workflows/*.ymlに置く pushやpull_requestを契機に動かせるjobとstepの単位で処理を書く- 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_requestとpushの役割を分ける- deploy job を
mainや tag に限定する - secrets を
environmentと組み合わせて管理する - 同じ処理をコピペしすぎず、reusable workflow を検討する
- 実行時間が長いなら cache や job 分割を考える
公式ドキュメント¶
- Workflow syntax: https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions
- Reuse workflows: https://docs.github.com/en/actions/how-tos/reuse-automations/reuse-workflows
- Deploy to environment: https://docs.github.com/en/actions/how-tos/write-workflows/choose-what-workflows-do/deploy-to-environment
メモ¶
- 最初は
build -> testの2段だけでも十分 - デプロイを含めるなら、ブランチ条件や承認フローも考えたい
- ワークフローが増えると、CI と CD を分けるか、1 本にまとめるかも設計ポイントになる