GitHub ActionsでCI/CD構築
公開日: 2025/06/03
GitHub ActionsでCI/CD構築:開発・テスト・デプロイを自動化しよう
はじめに
CI/CD(継続的インテグレーション/継続的デリバリー)は、現代のソフトウェア開発において不可欠なプロセスです。GitHub Actionsを使えば、GitHub上で直接CI/CDパイプラインを構築でき、外部サービスを使わずに自動化が可能です。本記事では、基本構成から応用までを解説します。
基本情報・概要
GitHub Actionsは、GitHubリポジトリ内の
.github/workflows/
ディレクトリにYAMLファイルを追加するだけで、以下のようなワークフローが構築できます:
- コードのプッシュやPRをトリガーにして自動実行
- テストやビルドの自動化
- デプロイ(Heroku、Firebase、AWS、Dockerなど)にも対応
- マトリクスビルドやシークレット管理も可能
比較・分類・特徴の表形式まとめ
項目 | 内容 |
---|---|
トリガー | push, pull_request, schedule など |
実行環境 | Ubuntu, macOS, Windows 対応 |
CI用途 | lint, test, build |
CD用途 | Docker build, GitHub Pages deploy 等 |
シークレット管理 | GitHubリポジトリの「Secrets」に登録可能 |
深掘り解説
まずは、Node.jsプロジェクト向けのCI例を見てみましょう:
name: Node.js CI on: push: branches: [ main ] pull_request: branches: [ main ] jobs: build: runs-on: ubuntu-latest strategy: matrix: node-version: [16.x, 18.x] steps: - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} - run: npm ci - run: npm run lint - run: npm test
上記のワークフローでは、mainブランチへのpushやPRをトリガーにして、複数のNodeバージョンでビルド・テストを行います。
次に、静的サイトをGitHub Pagesに自動デプロイするCD例です:
name: Deploy to GitHub Pages on: push: branches: - main jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Build static files run: npm run build - name: Deploy uses: peaceiris/actions-gh-pages@v3 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./dist
応用・発展的な使い方
-
Dockerビルド&プッシュ:
- run: docker build -t myapp .
- run: docker tag myapp myrepo/myapp:latest
- run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin
- run: docker push myrepo/myapp:latest
-
AWS, Firebase, Vercelなどへの自動デプロイ(各公式Actionあり)
-
cronで定期実行(バックアップや監視スクリプトなど)
よくある誤解と注意点
- 実行時間は無料枠を超えると課金対象(特にmacOSランナー)
- Secretsは明示的に
形式で参照するsecrets.*
はデフォルトで使えるが、権限に注意(必要に応じてPersonal Access Token使用)GITHUB_TOKEN
まとめ
GitHub ActionsはGitHubに完全統合されたCI/CDプラットフォームであり、セットアップも簡単、機能も豊富です。小規模な個人開発からチームの本番運用まで幅広く対応できます。まずはテストの自動化から始めて、徐々にビルド・デプロイ・通知などを組み込んでいきましょう。