GitHub Actionsは、GitHubが提供するCI/CD(継続的インテグレーション・継続的デリバリー)プラットフォームです。コードのプッシュやプルリクエストをトリガーに、自動でテスト・ビルド・デプロイを実行できます。本記事では、GitHub Actionsの基礎から実践的なCI/CDパイプライン構築まで、エンジニアが知っておくべき全知識を解説します。
GitHub Actionsとは?基礎知識
GitHub Actionsは2019年11月に正式リリースされたGitHub公式のCI/CDツールです。GitHubとのネイティブな統合、豊富なマーケットプレイス、大きな無料枠が特徴です。
GitHub Actionsの主要概念
- Workflow:自動化する処理全体の定義。YAMLファイルで記述します
- Event:ワークフローをトリガーするGitHubのイベント(push, pull_request等)
- Job:ワークフロー内の処理単位。並列・直列で実行可能
- Step:ジョブ内の個別タスク
- Action:再利用可能な処理単位
- Runner:ジョブを実行する仮想マシン
GitHub Actionsの基本的なワークフロー作成
ワークフローは.github/workflows/ディレクトリにYAMLファイルを配置します。以下にNode.jsアプリの基本CI設定例を示します。
name: Node.js CI
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18.x, 20.x]
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: npm
- run: npm ci
- run: npm run build --if-present
- run: npm test実践的なCI/CDパイプライン:AWS S3自動デプロイ
フロントエンドアプリをAWS S3にデプロイし、CloudFrontで配信する構成は多くのプロジェクトで採用されています。
name: Deploy to AWS S3
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
- name: Install and Build
run: |
npm ci
npm run build
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-1
- name: Deploy to S3
run: aws s3 sync ./build s3://${{ secrets.S3_BUCKET }} --delete
- name: Invalidate CloudFront
run: |
aws cloudfront create-invalidation \
--distribution-id ${{ secrets.CLOUDFRONT_DISTRIBUTION_ID }} \
--paths /*DockerイメージビルドとECRへのプッシュ
name: Build and Push to ECR
on:
push:
branches: [ main ]
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-1
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v2
- name: Build, tag, and push image
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
IMAGE_TAG: ${{ github.sha }}
run: |
docker build -t $ECR_REGISTRY/my-app:$IMAGE_TAG .
docker push $ECR_REGISTRY/my-app:$IMAGE_TAG
docker tag $ECR_REGISTRY/my-app:$IMAGE_TAG $ECR_REGISTRY/my-app:latest
docker push $ECR_REGISTRY/my-app:latestGitHub Actionsの便利な機能・テクニック
1. キャッシュを活用してビルドを高速化
- name: Cache node modules
uses: actions/cache@v4
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles(**/package-lock.json) }}
restore-keys: |
${{ runner.os }}-node-2. Secretsを使って機密情報を安全に管理
APIキー・パスワードなどの機密情報は、リポジトリのSettings → Secrets and variables → Actionsから登録します。ワークフロー内では${{ secrets.SECRET_NAME }}で参照します。
3. matrix strategyで複数環境を並列テスト
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
node: [18, 20, 22]
fail-fast: falseGitHub Actionsの料金・無料枠
| プラン | 無料枠(分/月) | Linux超過料金 |
|---|---|---|
| Free(パブリック) | 無制限 | 無料 |
| Free(プライベート) | 2,000分 | $0.008/分 |
| Pro | 3,000分 | $0.008/分 |
| Team | 3,000分 | $0.008/分 |
| Enterprise | 50,000分 | $0.008/分 |
まとめ
GitHub Actionsを活用することで、コードプッシュから本番環境へのデプロイまでを完全自動化できます。まずはシンプルなCI(テスト自動化)から始めて、徐々にCD(デプロイ自動化)へ拡張していくことをおすすめします。本記事の設定例を参考に、ぜひCI/CDパイプラインを構築してみてください。