1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【中級者向け】GitHub Actions 実践入門 ── CI/CDをYAMLで組む基本と便利テクニック

1
Posted at

はじめに

コードを書いたら、テストして、ビルドして、デプロイする。この一連の流れを手動でやり続けるのは、チーム開発ではすぐに限界が来ます。

GitHub Actions は、GitHubに標準搭載されたCI/CD(継続的インテグレーション / 継続的デリバリー)サービスです。リポジトリにYAMLファイルを1つ置くだけで、push のたびにテストを自動実行したり、mainブランチへのマージ時に本番デプロイを走らせたりできます。

この記事では、GitHub Actions の基本概念から実際のワークフロー例まで、手を動かして理解できるように解説します。


GitHub Actionsの全体像

GitHub Actionsは2019年11月に正式リリースされました。それまでCI/CDといえば Jenkins、CircleCI、Travis CI などの外部サービスを連携するのが一般的でしたが、GitHub Actionsの登場によって GitHubだけで完結 するCI/CDが可能になりました。

4つの基本概念

┌── Workflow(ワークフロー)──────────────────┐
│                                              │
│  ┌── Job A ──────┐   ┌── Job B ──────┐     │
│  │  Step 1       │   │  Step 1       │     │
│  │  Step 2       │   │  Step 2       │     │
│  │  Step 3       │   │  Step 3       │     │
│  └───────────────┘   └───────────────┘     │
│                                              │
└──────────────────────────────────────────────┘
概念 役割
Workflow 自動化の全体定義。.github/workflows/ にYAMLファイルとして配置
Job ワークフロー内の処理単位。デフォルトでは並列実行される
Step Job内の各処理ステップ。上から順番に実行される
Action 再利用可能な処理の部品。マーケットプレイスで公開されている

実践①:pushでテストを自動実行する

最も基本的なユースケースです。Node.jsプロジェクトで、pushのたびにテストを実行するワークフローを作ってみます。

.github/workflows/ci.yml

name: CI

on:
  push:
    branches: [main, develop]
  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'
          cache: 'npm'

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

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

YAMLの読み方

  • on:トリガー。ここでは main / develop へのpushと、main へのPRで起動
  • runs-on:実行環境。ubuntu-latest はGitHubが用意するLinux仮想マシン
  • uses:マーケットプレイスのActionを利用。actions/checkout@v4 はリポジトリのコードを取得する公式Action
  • run:任意のシェルコマンドを実行
  • cache: 'npm'node_modules をキャッシュして2回目以降の実行を高速化

このファイルをリポジトリに追加してpushするだけで、CIが動き始めます。


実践②:Dockerイメージをビルドしてプッシュする

アプリケーションをDockerイメージとしてビルドし、GitHub Container Registry(ghcr.io)にプッシュする例です。

.github/workflows/docker.yml

name: Build and Push Docker Image

on:
  push:
    tags: ['v*']

jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write

    steps:
      - uses: actions/checkout@v4

      - name: GitHub Container Registry にログイン
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Docker イメージをビルド&プッシュ
        uses: docker/build-push-action@v7
        with:
          push: true
          tags: ghcr.io/${{ github.repository }}:${{ github.ref_name }}

ポイント

  • on: push: tags: ['v*']v1.0.0 のようなタグをpushしたときだけ起動
  • ${{ secrets.GITHUB_TOKEN }}:GitHubが自動発行するトークン。Secretsに手動登録する必要はない
  • ${{ github.repository }}ユーザー名/リポジトリ名 に自動展開される

実践③:マトリクスビルドで複数環境を同時テスト

複数のNode.jsバージョンやOSで同時にテストを実行する マトリクスビルド は、GitHub Actionsの強力な機能です。

jobs:
  test:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest]
        node-version: [18, 20, 22]

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

この例では 2 OS × 3 バージョン = 6並列 でテストが走ります。手動でやれば数十分かかる作業を、数分で完了できます。


知っておきたい便利テクニック

① キャッシュで高速化

依存関係のインストールはCIの中で最も時間がかかる処理のひとつです。actions/cache を使えば、前回のインストール結果を再利用できます。

- uses: actions/cache@v4
  with:
    path: ~/.npm
    key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}
    restore-keys: ${{ runner.os }}-npm-

package-lock.json が変わらない限り、キャッシュが効いてインストール時間を大幅に短縮できます。

② Secretsで機密情報を管理

APIキーやデプロイ用の認証情報は、リポジトリの Settings > Secrets and variables > Actions に登録し、ワークフロー内で ${{ secrets.MY_SECRET }} として参照します。

- name: デプロイ
  run: ./deploy.sh
  env:
    API_KEY: ${{ secrets.DEPLOY_API_KEY }}

Secretsはログにマスクされるため、誤って出力される心配がありません。

③ ジョブ間の依存関係

デフォルトではジョブは並列実行されますが、needs で依存関係を定義できます。

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - run: npm test

  deploy:
    needs: test          # testジョブが成功した後に実行
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'
    steps:
      - run: ./deploy.sh

「テストが通ったら、mainブランチの場合のみデプロイ」という典型的なCI/CDパイプラインを表現できます。


料金について(2026年最新)

GitHub Actionsの料金体系は2026年に改定されています。

項目 内容
パブリックリポジトリ 完全無料(変更なし)
プライベートリポジトリ Freeプランで月2,000分の無料枠
GitHub-hosted Runner 2026年1月に最大39%値下げ
Self-hosted Runner 2026年3月から $0.002/分のプラットフォーム料金が新設

個人やOSSプロジェクトなら、パブリックリポジトリで使う限り費用は一切かかりません。


まとめ

キーワード 一言で言うと
GitHub Actions GitHubに標準搭載されたCI/CDサービス
Workflow YAMLで定義する自動化の全体設計図
Job / Step 処理単位と各ステップ
マトリクスビルド 複数環境を並列テスト
Secrets 機密情報を安全に管理する仕組み

GitHub Actionsは「コードを書く → テスト → ビルド → デプロイ」の全工程を自動化できる、現代の開発に欠かせないツールです。まずは自分のリポジトリに ci.yml を1つ追加して、pushしたときにテストが走る体験を味わってみてください。


参考:

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?