コンテンツにスキップ
LinkedInX

GitHub Actions で始める CI/CD 入門

対象読者: GitHub の基本操作を習得し、テスト・デプロイの自動化に踏み出したい方
前提知識: GitHub の主要機能 を読んでいること

コードを書いたあと、「テストを手動で実行して → ビルドして → サーバーにアップロードして…」という作業を毎回繰り返していませんか? CI/CD を導入すると、これらの作業を GitHub がすべて自動でやってくれます。

この記事では、GitHub Actions を使った CI/CD の基本を、ゼロから実践的に学びます。

CI/CD とは

CI/CD継続的インテグレーション(Continuous Integration)継続的デリバリー/デプロイ(Continuous Delivery/Deployment) の略です。

用語意味
CI(継続的インテグレーション)コードを push するたびに自動でテスト・ビルドを実行し、問題を早期発見する
CD(継続的デリバリー)CI を通過したコードを自動でステージングや本番環境に届ける
この表は横方向にスクロールできます。キーボードでは、表にフォーカスして左右の矢印キーを使用してください。

なぜ CI/CD が必要か

手動でのテストとデプロイには次のリスクがあります。

  • ヒューマンエラー — 「テストを実行し忘れた」「古いファイルをアップロードした」
  • 遅いフィードバック — バグを発見するのが数日後になる
  • 属人化 — デプロイ手順を特定の人しか知らない

CI/CD で自動化すれば、これらのリスクを仕組みで防げます。


GitHub Actions とは

GitHub Actions は GitHub に組み込まれた CI/CD ツールです。リポジトリに YAML ファイルを1つ追加するだけで、テスト・ビルド・デプロイを自動化できます。

基本用語

用語説明
ワークフロー(Workflow)自動化の定義全体。.github/workflows/ 内の YAML ファイル1つ = 1ワークフロー
トリガー(Trigger)ワークフローを実行するきっかけ(push、PR 作成、定期実行など)
ジョブ(Job)ワークフロー内の実行単位。複数のジョブは並列実行できる
ステップ(Step)ジョブ内の個々の作業(コマンド実行やアクションの呼び出し)
アクション(Action)再利用可能な処理のパーツ。GitHub Marketplace で公開されている
ランナー(Runner)ジョブを実行する仮想マシン(ubuntu-latest など)
この表は横方向にスクロールできます。キーボードでは、表にフォーカスして左右の矢印キーを使用してください。

はじめてのワークフローを作る

ステップ 1:ファイルを作成する

リポジトリのルートに .github/workflows/ ディレクトリを作り、YAML ファイルを置きます。

.github/
  workflows/
    ci.yml   ← ここにワークフローを書く

ステップ 2:基本的な CI ワークフロー

以下は Node.js プロジェクトで push のたびにテストを実行するシンプルな例です。

# .github/workflows/ci.yml
name: CI

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - name: リポジトリをチェックアウト
        uses: actions/checkout@v4

      - name: Node.js をセットアップ
        uses: actions/setup-node@v4
        with:
          node-version: '20'

      - name: 依存関係をインストール
        run: npm ci

      - name: テストを実行
        run: npm test

各セクションの意味

name: CI                        # ワークフローの名前(GitHub UI に表示される)

on:                             # トリガーの設定
  push:
    branches: [main]            # main への push 時に実行
  pull_request:
    branches: [main]            # main への PR 作成・更新時に実行

jobs:
  test:                         # ジョブ名(自由につけられる)
    runs-on: ubuntu-latest      # 実行環境(Ubuntu の最新版)

    steps:
      - uses: actions/checkout@v4   # リポジトリのコードをランナーに取得
      - run: npm test               # シェルコマンドを実行

よく使うトリガー

on:
  push:                          # push したとき
    branches: [main, develop]
  pull_request:                  # PR を作成・更新したとき
    branches: [main]
  schedule:                      # 定期実行(cron 形式)
    - cron: '0 9 * * 1'         # 毎週月曜 9:00 UTC
  workflow_dispatch:             # GitHub UI から手動実行

実用的なサンプル集

サンプル 1:Python プロジェクトのテスト

name: Python CI

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Python をセットアップ
        uses: actions/setup-python@v5
        with:
          python-version: '3.12'

      - name: 依存関係をインストール
        run: pip install -r requirements.txt

      - name: テストを実行
        run: pytest

サンプル 2:PR のたびにコードをチェック(lint)

name: Lint

on:
  pull_request:

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
      - run: npm ci
      - run: npm run lint

サンプル 3:main マージ後に自動デプロイ(CD)

name: Deploy

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: ビルド
        run: npm run build

      - name: 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'

secrets について: API キーやトークンなどの機密情報は、リポジトリの Settings → Secrets and variables → Actions に登録し、${{ secrets.変数名 }} で参照します。YAML ファイルに直接書いてはいけません。


ワークフローの確認方法

ワークフローを push すると、リポジトリの Actions タブ から実行状況を確認できます。

  1. リポジトリページの “Actions” タブをクリック
  2. 実行中または完了したワークフローの一覧が表示される
  3. クリックすると各ステップのログを確認できる
  4. 失敗したステップは赤色で表示され、エラーの詳細が確認できる

よくあるエラーと解決策

npm ci が失敗する

package-lock.json が存在しない、または package.json と不整合がある場合に起きます。ローカルで npm install を実行して package-lock.json を更新し、コミットしてください。

パーミッションエラー(Permission denied

スクリプトに実行権限がない場合があります。chmod +x script.sh をステップに追加するか、bash script.sh で実行します。

シークレットが undefined になる

シークレット名のタイポ、またはフォークした PR からのシークレットアクセス制限が原因のことが多いです。リポジトリの Settings で名前を確認してください。


GitHub Actions の料金

環境無料枠
パブリックリポジトリ無制限(完全無料)
プライベートリポジトリ月 2,000 分まで無料(GitHub Free)
この表は横方向にスクロールできます。キーボードでは、表にフォーカスして左右の矢印キーを使用してください。

個人の学習・OSS プロジェクトであればほぼ無料で使えます。


次のステップ

GitHub Actions の基本を覚えたら、以下に挑戦してみてください。

  • マトリックスビルド — 複数の OS・言語バージョンで並列テスト
  • キャッシュactions/cache で依存関係をキャッシュして高速化
  • 再利用可能ワークフロー — 複数リポジトリで共通のワークフローを使い回す
  • 環境とデプロイゲート — ステージング → 本番の承認フロー

このページの外部仕様・背景情報は、参考文献を参照してください。[1][2]

参考文献

  1. GitHub, GitHub Actions ドキュメント
  2. GitHub, GitHub Actions Marketplace
クイズ