GitHub Actionsチュートリアル:2026年CI/CDを自動化する
GitHub Actionsチュートリアル:2026年CI/CDを自動化する
GitHub Actionsのステップバイステップチュートリアル。Node.js、Pythonの実践例でテスト、ビルド、デプロイを自動化。
2026年3月17日4分で読了
CI/CDとは何か
CI/CDは現代のソフトウェア開発に欠かせない自動化の仕組みです。
- CI(継続的インテグレーション): コードをプッシュするたびに自動でテストやビルドを実行
- CD(継続的デリバリー/デプロイ): テストが通ったコードを自動で本番環境へデプロイ
手動でのテスト実行やデプロイ作業を自動化することで、バグの早期発見とリリースの高速化を実現します。
GitHub Actionsとは
GitHub Actionsは、GitHubが提供するCI/CDプラットフォームです。2019年のGA(一般提供)以来、GitHubリポジトリとのシームレスな統合により、世界中で広く使われています。
主要な特徴
- GitHubと完全統合: Push、PR、リリースなどGitHubイベントをトリガーにできる
- マーケットプレイス: 数千のアクションが公開されており、再利用可能
- マトリックスビルド: 複数のOSや言語バージョンで並列テスト
- 無料枠: パブリックリポジトリは無制限、プライベートは月2,000分まで無料
基本構造を理解する
GitHub Actionsのワークフローは .github/workflows/ ディレクトリにYAMLファイルとして保存します。
.github/
workflows/
ci.yml # CIワークフロー
deploy.yml # デプロイワークフロー
release.yml # リリースワークフロー
基本的な用語
| 用語 | 説明 |
|---|---|
| Workflow | 自動化された処理の全体的な流れ |
| Event | ワークフローを起動するトリガー(push, PR, scheduleなど) |
| Job | ワークフロー内の処理単位(並列または順次実行) |
| Step | ジョブ内の各ステップ(コマンドまたはアクション) |
| Action | 再利用可能な処理単位(マーケットプレイスで公開) |
| Runner | ジョブが実行される仮想マシン |
最初のワークフロー:Node.jsアプリ
# .github/workflows/ci.yml
name: CI Pipeline
# トリガーの設定
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
jobs:
# テストジョブ
test:
name: Test
runs-on: ubuntu-latest
# マトリックス:複数のNode.jsバージョンでテスト
strategy:
matrix:
node-version: [20.x, 22.x]
steps:
# 1. コードをチェックアウト
- name: Checkout code
uses: actions/checkout@v4
# 2. Node.jsのセットアップ
- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
# 3. 依存関係のインストール
- name: Install dependencies
run: npm ci
# 4. リントチェック
- name: Run linter
run: npm run lint
# 5. テストの実行
- name: Run tests
run: npm test -- --coverage
# 6. カバレッジレポートのアップロード(オプション)
- name: Upload coverage
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
Pythonアプリのワークフロー
# .github/workflows/python-ci.yml
name: Python CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.11", "3.12", "3.13"]
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
# 依存関係のキャッシュ(ビルドを高速化)
- name: Cache pip packages
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements*.txt') }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install -r requirements-dev.txt
# コードフォーマットチェック
- name: Check formatting with black
run: black --check .
# リントチェック
- name: Lint with ruff
run: ruff check .
# 型チェック
- name: Type check with mypy
run: mypy .
# テスト実行
- name: Run tests with pytest
run: pytest --cov=app --cov-report=xml
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
Secretsの使い方
APIキーや認証情報はコードに直接書かず、GitHub Secretsに保存します。
Secretsの登録方法
- GitHubリポジトリの Settings → Secrets and variables → Actions を開く
- New repository secret をクリック
- 名前(例:
DATABASE_URL)と値を入力
ワークフローでSecretsを使う
steps:
- name: Deploy to production
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
API_KEY: ${{ secrets.API_KEY }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
run: |
echo "データベースに接続中..."
./scripts/deploy.sh
デプロイメントワークフロー
Vercelへの自動デプロイ(Next.jsアプリ)
# .github/workflows/deploy.yml
name: Deploy to Vercel
on:
push:
branches: [main]
jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
needs: [test] # testジョブが成功した後に実行
steps:
- uses: actions/checkout@v4
- name: Deploy to Vercel
uses: amondnet/vercel-action@v25
with:
vercel-token: ${{ secrets.VERCEL_TOKEN }}
vercel-org-id: ${{ secrets.VERCEL_ORG_ID }}
vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID }}
vercel-args: '--prod'
DockerイメージのビルドとECRへのプッシュ
name: Build and Push Docker Image
on:
push:
branches: [main]
tags: ['v*']
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# AWS認証
- 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
# ECRにログイン
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v2
# Dockerイメージのビルドとプッシュ
- name: Build and push
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: |
${{ steps.login-ecr.outputs.registry }}/my-app:latest
${{ steps.login-ecr.outputs.registry }}/my-app:${{ github.sha }}
cache-from: type=gha
cache-to: type=gha,mode=max
実践的なテクニック
条件分岐でジョブを制御
jobs:
deploy-staging:
if: github.ref == 'refs/heads/develop'
runs-on: ubuntu-latest
steps:
- name: Deploy to staging
run: echo "Stagingにデプロイ中..."
deploy-production:
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- name: Deploy to production
run: echo "Productionにデプロイ中..."
再利用可能なワークフロー
# .github/workflows/reusable-test.yml
on:
workflow_call:
inputs:
node-version:
required: true
type: string
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ inputs.node-version }}
- run: npm ci && npm test
# 呼び出し側のワークフロー
jobs:
run-tests:
uses: ./.github/workflows/reusable-test.yml
with:
node-version: '22.x'
ワークフローのベストプラクティス
# 推奨事項をまとめたサンプル
name: Best Practice CI
on:
push:
branches: [main]
pull_request:
branches: [main]
# 同じブランチへの複数プッシュ時に古い実行をキャンセル
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
ci:
runs-on: ubuntu-latest
# タイムアウトの設定(無限ループ防止)
timeout-minutes: 15
permissions:
contents: read
pull-requests: write
steps:
- uses: actions/checkout@v4
# アクションはバージョンを固定する(セキュリティ)
- uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'npm'
- run: npm ci
# 並列でテストを実行
- run: npm run lint & npm run typecheck & wait
- run: npm test
まとめ:GitHub Actionsを今日から始めよう
GitHub Actionsを導入することで得られるメリットは計り知れません:
- バグの早期発見: すべてのPRで自動テストが実行される
- リリースの高速化: 手動デプロイ作業がゼロになる
- 品質の担保: コードスタイルや型チェックが自動化される
- チームの安心感: 自動テストが通ったコードのみがマージされる
最初は簡単なテスト自動化から始めて、徐々にデプロイパイプラインへと拡張していきましょう。GitHubマーケットプレイスには数千のアクションが公開されており、ほとんどのユースケースに対応できます。