CI/CD SERIES
GitHub Actionsで自動化
→ キーで次へ
ゴール: GitHub Actionsでテスト・ビルド・デプロイを自動化し、手作業のミスをなくす
手動 vs 自動の比較
→ なぜ手動は危険か(問題意識)
GitHub Actions全体像
→ Event→Workflow→Job→Stepの構造を理解
YAMLの書き方・配置場所
→ YAMLで自動化を書けるようになる
CI/CDパイプライン構築
→ 実際に動くパイプラインを作る
セキュリティ・並列テスト・高速化
→ 本番運用に必要な技術を知る
エラー調査・ローカル実行
→ 失敗したときの対処法を身につける
BEFORE: 手動の世界
AFTER: CI/CDの世界
CI = Continuous Integration(継続的インテグレーション)— pushするたびに自動テスト
CD = Continuous Deployment(継続的デプロイ)— テスト通過後に自動で本番反映
GitHubに組み込まれたCI/CDプラットフォーム。無料枠あり。
EVENT
push, PR作成
スケジュール etc.
WORKFLOW
.ymlファイル
自動化の定義
JOB
仮想マシン上で
実行される単位
STEP
個々のコマンド
やアクション
イベントが発生 → ワークフローが起動 → ジョブがVMで実行 → ステップを順番に処理
リポジトリ内の決まった場所にYAMLファイルを置く
ディレクトリ構成
最小限のワークフローを読んでみよう
name
ActionsタブでのUI表示名
on
トリガー条件。pushやPR作成時
runs-on
Ubuntu/macOS/Windowsが選べる
steps
usesで既製アクション、runでシェルコマンド
pushやPRのたびにテストを自動実行
mainブランチにpushしたら自動でGitHub Pagesにデプロイ
トリガー
mainへのpush時のみ実行。PR時はデプロイしない。
permissions
GitHub Pagesへの書き込み権限を付与。
ビルド → デプロイ
npm run buildで生成 → dist/フォルダをPagesにアップロード。
よく使うアクションは既に誰かが作ってくれている
actions/checkout@v4
リポジトリのコードを取得。
ほぼ全てのワークフローで必須
actions/setup-node@v4
Node.jsをインストール。
バージョン指定も可能。
actions/cache@v4
依存関係をキャッシュ。
ワークフロー高速化の定番。
actions/deploy-pages@v4
GitHub Pagesへデプロイ。
静的サイトの公開に。
探し方: github.com/marketplace?type=actions で検索
使い方: uses: 作者/アクション名@バージョン で指定
APIキーやトークンを安全にワークフローで使う
やってはいけない
正しい方法
Settings → Secrets and variables → Actions → New secret
ポイント
*** でマスクされるGITHUB_TOKEN は自動で利用可能本番・ステージングを分けて安全にデプロイ
development
開発環境
誰でもデプロイ可
staging
検証環境
自動テスト後に
production
本番環境
承認必須
YAMLでの指定
保護ルール
複数バージョン・OSの組み合わせを一気にテスト
生成されるジョブ(3 x 2 = 6個)
全て並列で実行される → 高速
依存関係のインストールを毎回やらない
キャッシュなし
npm ci が毎回全パッケージをダウンロード
キャッシュあり
キャッシュヒットで即座にリストア
約70%の時間短縮!
失敗したとき、どう調べるか
よくあるエラー
調べ方
gh run view でCLIから確認gh run view --log-failedact でローカル実行Lint → Test → Build → Deploy の全自動化
STEP 1
Lint
コード品質チェック
STEP 2
Test
自動テスト実行
STEP 3
Build
本番用ビルド
STEP 4
Deploy
本番デプロイ
🔄
テスト・ビルド・デプロイを手動から解放
📝
.github/workflows/にYAMLファイルを置くだけ
🔒
機密情報はSecrets経由で。直書き厳禁。
⚡
cache設定で大幅な時間短縮を
BEST PRACTICES
needs: でジョブの依存関係を明示する| コマンド | 説明 |
|---|---|
mkdir -p .github/workflows |
ワークフロー用ディレクトリを作成(親ディレクトリも自動作成) |
touch .github/workflows/ci.yml |
ワークフロー定義ファイルを新規作成 |
git add . |
全ての変更をステージングエリアに追加 |
git commit -m "メッセージ" |
ステージングされた変更をコミット |
git push origin main |
ローカルの変更をリモートにプッシュ(Actionsのトリガーになる) |
npm ci |
package-lock.jsonに基づいて依存関係をクリーンインストール |
npm test |
プロジェクトのテストスイートを実行 |
npm run build |
本番用のビルドを実行 |
npm run lint |
コード品質チェック(リンター)を実行 |
gh run list |
GitHub Actionsの実行履歴を一覧表示 |
gh run view <ID> |
特定のワークフロー実行の詳細を表示 |
gh run view --log-failed |
失敗したステップのログのみを表示 |
ls -la .github/workflows/ |
ワークフローファイルの一覧と詳細を表示 |
| ── YAML キーワード ── | |
name: |
ワークフローまたはステップの表示名を定義 |
on: |
ワークフローのトリガー条件(push, pull_request等)を指定 |
jobs: |
実行するジョブの定義ブロック |
runs-on: |
ジョブの実行環境を指定(ubuntu-latest, macos-latest等) |
steps: |
ジョブ内で順次実行されるステップの一覧 |
uses: |
既製のアクション(例: actions/checkout@v4)を利用 |
run: |
シェルコマンドを直接実行 |
with: |
アクションに渡す入力パラメータを指定 |
needs: |
ジョブの依存関係を定義(先行ジョブの完了後に実行) |
strategy: / matrix: |
複数バージョン・OS の組み合わせで並列テストを実行 |
permissions: |
ワークフローに付与する権限を指定(pages, id-token等) |
environment: |
デプロイ先の環境(production, staging等)を指定 |
cache: |
依存関係のキャッシュを有効化して高速化 |
env: |
環境変数を設定 |
${{ secrets.XXX }} |
リポジトリのSecretsに保存した機密情報を参照 |
${{ matrix.XXX }} |
マトリクス戦略で定義した変数を参照 |
| ── よく使うアクション ── | |
actions/checkout@v4 |
リポジトリのコードをチェックアウト |
actions/setup-node@v4 |
Node.js環境をセットアップ |
actions/cache@v4 |
依存関係やビルド成果物をキャッシュ |
actions/upload-pages-artifact@v3 |
GitHub Pages用のビルド成果物をアップロード |
actions/deploy-pages@v4 |
GitHub Pagesへデプロイ |