はじめに
コードを書いたら、テストして、ビルドして、デプロイする。この一連の流れを手動でやり続けるのは、チーム開発ではすぐに限界が来ます。
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したときにテストが走る体験を味わってみてください。
参考: