GitHub Actions で始める CI/CD 入門
コードを書いたあと、「テストを手動で実行して → ビルドして → サーバーにアップロードして…」という作業を毎回繰り返していませんか? 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 タブ から実行状況を確認できます。
- リポジトリページの “Actions” タブをクリック
- 実行中または完了したワークフローの一覧が表示される
- クリックすると各ステップのログを確認できる
- 失敗したステップは赤色で表示され、エラーの詳細が確認できる
よくあるエラーと解決策
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]
参考文献
- GitHub, GitHub Actions ドキュメント
- GitHub, GitHub Actions Marketplace