GitHub Actionsで学ぶCI/CDパイプライン

DevOps2026-09-12TryQuickToolBox

コミットをプッシュした後、手動でテストを実行し、アプリをビルドし、サーバーにファイルをアップロードしていませんか?それは機能しますが、遅く、エラーが発生しやすく、スケールしません。そこでCI/CDパイプラインの出番です。

このガイドでは、CI/CDの概念を分解し、GitHub Actionsで実際のパイプラインを構築する方法を紹介します。最後には、あらゆるプロジェクトのテスト、ビルド、デプロイを自動化する方法を理解できるでしょう。

CI/CDとは何か?

CI(継続的インテグレーション)は、コード変更を自動的にテストし、共有ブランチにマージするプラクティスです。プッシュするたびにビルドとテストが実行され、統合の問題を早期に発見できます。

CD(継続的デリバリー/デプロイ)はCIを拡張し、アプリケーションを自動的に準備(およびオプションでデプロイ)して本番環境に送ります。継続的デリバリーはコードが常にデプロイ可能な状態を意味し、継続的デプロイは自動的にデプロイされることを意味します。

これらを合わせて、CI/CDはパイプラインを形成します:コミットから本番環境まで、一連の自動化されたステップです。

なぜCI/CDにGitHub Actionsを使うのか?

GitHub ActionsはGitHubに組み込まれたCI/CDプラットフォームです。パブリックリポジトリでは無料で、プライベートリポジトリでも十分な分数が提供されます。主な利点:

GitHub Actionsのコア概念

最初のワークフローを書く前に、これらの用語を理解しましょう:

用語 説明
ワークフロー .github/workflows/ 下のYAMLファイルで定義された自動化プロセス。
イベント ワークフローを開始するトリガー(例:push、pull_request)。
ジョブ 同じランナーで実行される一連のステップ。ジョブはデフォルトで並列実行されます。
ステップ ジョブ内の単一のタスク。コマンドを実行するか、アクションを使用できます。
アクション ステップに含めることができる再利用可能なコード単位(例:actions/checkout)。
ランナー ジョブを実行する仮想マシン(Ubuntu、Windows、macOS)。

最初のCIパイプラインを構築する

Node.jsプロジェクト用の基本的なCIワークフローを作成しましょう。メインブランチへのプッシュとプルリクエストごとにテストを実行します。

.github/workflows/ci.yml を作成します:

name: CI

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

jobs:
  test:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [18.x, 20.x]

    steps:
    - uses: actions/checkout@v4
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v4
      with:
        node-version: ${{ matrix.node-version }}
    - run: npm ci
    - run: npm test

このワークフローは:

  1. main へのプッシュとPRでトリガーされます。
  2. 最新のUbuntuランナーで test というジョブを実行します。
  3. マトリックスを使用してNode.js 18と20でテストします。
  4. コードをチェックアウトし、Nodeをセットアップし、依存関係をインストールし、テストを実行します。

このファイルをプッシュしてActionsタブを見てください。2つの並列ジョブ(Nodeバージョンごとに1つ)が表示されます。テストが失敗すると、ワークフローが失敗し、GitHubが通知します。

継続的デプロイを追加する

CIは素晴らしいですが、CDは自動化が真価を発揮する場所です。メインブランチでテストが成功した後にサーバーにデプロイするようにワークフローを拡張しましょう。

test に依存し、main へのプッシュ時のみ実行される deploy ジョブを追加します。

  deploy:
    needs: test
    if: github.ref == 'refs/heads/main' && github.event_name == 'push'
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4
    - name: Deploy to server
      uses: appleboy/ssh-action@v1.0.0
      with:
        host: ${{ secrets.SSH_HOST }}
        username: ${{ secrets.SSH_USER }}
        key: ${{ secrets.SSH_KEY }}
        script: |
          cd /var/www/myapp
          git pull origin main
          npm ci --production
          pm2 restart myapp

重要なポイント:

このパターンは多くのデプロイ先で機能します:SSH、Dockerレジストリ、クラウドプラットフォーム(AWS、Vercel、Netlify)、またはKubernetes。

GitHub Actionsを使ったCI/CDのベストプラクティス

失敗したワークフローのデバッグ

ワークフローが失敗すると、GitHubは各ステップのログを表示します。よくある問題:

リポジトリシークレット ACTIONS_STEP_DEBUG を true に設定してデバッグログを有効にすることもできます。

FAQ

CIとCDの違いは何ですか?

CIはコード変更のテストと統合を自動化します。CDはそれらの変更を環境に配信またはデプロイすることを自動化します。CIはコード品質を保証し、CDはユーザーに迅速かつ確実に届くことを保証します。

GitHub Actionsは無料ですか?

GitHub Actionsはパブリックリポジトリでは無料です。プライベートリポジトリでは、毎月の無料分数(例:Freeアカウントで2,000分)が提供され、追加使用には料金がかかります。セルフホストランナーもオプションです。

GitHub以外のプロジェクトでもGitHub Actionsを使えますか?

はい、GitHub Actionsは任意のコマンドラインツールを実行できます。コードがGitHub上にあるか、アクションで取得する限り、他の場所でホストされているプロジェクトのビルドとデプロイに使用できます。

CI/CDを効率化する準備はできましたか?まずGitHub Actionsでテストを自動化することから始めましょう。デプロイログを素早く分析する方法として、各デプロイ後にエラーやパフォーマンス問題を発見するNginx Log Analyzerをお試しください。