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まで揃えれば、本番運用にも十分耐える構成になります。