GitHub Actions完全攻略ガイド|CI/CD初心者でも分かる自動化入門

 

はじめに

GitHub Actionsは、GitHubが提供する強力なCI/CD(継続的インテグレーション・継続的デプロイメント)プラットフォームです。Microsoft、Netflix、Shopifyなど多くの企業が開発プロセスの自動化にGitHub Actionsを活用しています。本記事では、GitHub Actionsの基礎から実践的な活用法まで、初心者にも分かりやすく解説します。

GitHub Actionsとは?

GitHub Actionsは、GitHubリポジトリ内でソフトウェア開発ワークフローを自動化できるサービスです。コードのプッシュ、プルリクエスト作成、スケジュール実行など、様々なイベントをトリガーとして自動処理を実行できます。

GitHub Actionsの特徴

主なメリット

  • GitHubと完全統合された環境
  • 豊富な事前構築済みアクション
  • 無料枠での利用が可能
  • マルチプラットフォーム対応(Linux、Windows、macOS)

主な用途

  • 自動テスト実行
  • アプリケーションのビルド・デプロイ
  • コード品質チェック
  • セキュリティスキャン

基本概念の理解

重要な用語

  • Workflow(ワークフロー): 自動化処理の一連の流れ
  • Job(ジョブ): ワークフロー内の作業単位
  • Step(ステップ): ジョブ内の個別タスク
  • Action(アクション): 再利用可能な処理単位
  • Runner(ランナー): ワークフローを実行する環境

ディレクトリ構造

.github/
  workflows/
    ci.yml
    deploy.yml

最初のワークフロー作成

Hello Worldワークフロー

name: Hello World
on: [push]
jobs:
  hello:
    runs-on: ubuntu-latest
    steps:
      - run: echo "Hello, GitHub Actions!"

基本的なCI ワークフロー

name: CI
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '18'
      - run: npm test

よく使われるトリガー(on)

プッシュ・プルリクエスト

on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main]

スケジュール実行

on:
  schedule:
    - cron: '0 9 * * 1'  # 毎週月曜日9時

手動実行

on:
  workflow_dispatch:
    inputs:
      environment:
        description: 'デプロイ環境'
        required: true
        default: 'staging'

実践的なワークフロー例

Node.js アプリケーションのCI/CD

name: Node.js CI/CD
on:
  push:
    branches: [main]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '18'
          cache: 'npm'
      - run: npm ci
      - run: npm run build
      - run: npm test

Python アプリケーションのテスト

name: Python Tests
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: [3.8, 3.9, '3.10']
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v4
        with:
          python-version: ${{ matrix.python-version }}
      - run: pip install -r requirements.txt
      - run: pytest

Docker イメージのビルド・プッシュ

name: Docker Build
on:
  push:
    branches: [main]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: docker/build-push-action@v5
        with:
          push: true
          tags: myapp:latest

環境変数とシークレット

環境変数の設定

jobs:
  deploy:
    runs-on: ubuntu-latest
    env:
      NODE_ENV: production
    steps:
      - run: echo "Environment: $NODE_ENV"

シークレットの使用

steps:
  - name: Deploy to AWS
    env:
      AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
      AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
    run: aws s3 sync ./build s3://my-bucket

マトリックス戦略

複数環境でのテスト

jobs:
  test:
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]
        node-version: [16, 18, 20]
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}
      - run: npm test

アーティファクトとキャッシュ

ビルド成果物の保存

steps:
  - run: npm run build
  - uses: actions/upload-artifact@v4
    with:
      name: build-files
      path: dist/

依存関係のキャッシュ

steps:
  - uses: actions/cache@v3
    with:
      path: ~/.npm
      key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
  - run: npm ci

デプロイメント自動化

AWS S3 へのデプロイ

name: Deploy to S3
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm run build
      - uses: aws-actions/configure-aws-credentials@v4
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ap-northeast-1
      - run: aws s3 sync ./build s3://my-website

Heroku へのデプロイ

steps:
  - uses: actions/checkout@v4
  - uses: akhileshns/heroku-deploy@v3.12.14
    with:
      heroku_api_key: ${{ secrets.HEROKU_API_KEY }}
      heroku_app_name: "my-app"
      heroku_email: "user@example.com"

セキュリティとコード品質

セキュリティスキャン

name: Security Scan
jobs:
  security:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: github/codeql-action/init@v3
        with:
          languages: javascript
      - uses: github/codeql-action/analyze@v3

リント・フォーマットチェック

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
      - run: npm ci
      - run: npm run lint
      - run: npm run format:check

条件分岐とフィルタリング

ブランチ別の処理

jobs:
  deploy:
    if: github.ref == 'refs/heads/main'
    steps:
      - run: echo "メインブランチのみデプロイ"

ファイル変更の検出

steps:
  - uses: actions/checkout@v4
  - uses: dorny/paths-filter@v2
    id: changes
    with:
      filters: |
        frontend:
          - 'frontend/**'
  - if: steps.changes.outputs.frontend == 'true'
    run: echo "フロントエンドが変更されました"

高度な活用テクニック

再利用可能なワークフロー

# .github/workflows/reusable.yml
on:
  workflow_call:
    inputs:
      environment:
        required: true
        type: string
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - run: echo "Deploying to ${{ inputs.environment }}"

カスタムアクションの作成

# action.yml
name: 'Custom Action'
description: 'カスタム処理を実行'
inputs:
  message:
    description: '表示メッセージ'
    required: true
runs:
  using: 'composite'
  steps:
    - run: echo "${{ inputs.message }}"
      shell: bash

パフォーマンス最適化

並列実行の活用

jobs:
  test:
    runs-on: ubuntu-latest
  build:
    runs-on: ubuntu-latest
  deploy:
    needs: [test, build]
    runs-on: ubuntu-latest

効率的なキャッシュ戦略

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

トラブルシューティング

よくあるエラーと対策

# デバッグ情報の出力
steps:
  - name: Debug Info
    run: |
      echo "Runner OS: ${{ runner.os }}"
      echo "GitHub Event: ${{ github.event_name }}"
      echo "Branch: ${{ github.ref }}"

ワークフロー実行の詳細確認

steps:
  - run: |
      echo "::debug::デバッグメッセージ"
      echo "::warning::警告メッセージ"
      echo "::error::エラーメッセージ"

ベストプラクティス

セキュリティ対策

  • シークレットの適切な管理
  • 最小権限の原則を適用
  • サードパーティアクションのバージョン固定
  • 機密情報のログ出力防止

パフォーマンス向上

# 不要なファイルの除外
- uses: actions/checkout@v4
  with:
    sparse-checkout: |
      src/
      package.json

保守性の向上

# 環境別設定の外部化
jobs:
  deploy:
    strategy:
      matrix:
        include:
          - environment: staging
            url: https://staging.example.com
          - environment: production
            url: https://example.com

料金と制限事項

無料枠の制限

  • パブリックリポジトリ: 無制限
  • プライベートリポジトリ: 月2,000分まで無料
  • ストレージ: 500MB まで無料

実行時間の最適化

# タイムアウト設定
jobs:
  test:
    runs-on: ubuntu-latest
    timeout-minutes: 10

学習リソースと次のステップ

おすすめの学習順序

  1. 基本的なワークフローの作成
  2. CI/CDパイプラインの構築
  3. マトリックス戦略の活用
  4. カスタムアクションの開発
  5. セキュリティパフォーマンスの最適化

実践プロジェクト案

  • 個人プロジェクトのCI/CD構築
  • マルチ環境デプロイメント
  • 自動テストとコード品質チェック
  • セキュリティスキャンの導入

参考リソース

  • GitHub Actions公式ドキュメント
  • GitHub Marketplace(アクション検索)
  • コミュニティ作成のワークフロー例
  • GitHub Actions のサンプルリポジトリ

まとめ

GitHub Actionsは、現代のソフトウェア開発において欠かせないCI/CDツールです。シンプルなYAML設定で強力な自動化を実現でき、開発効率を大幅に向上させることができます。

基本的なワークフローから始めて、段階的に高度な機能を取り入れることで、プロフェッショナルな開発プロセスを構築できます。セキュリティとパフォーマンスを意識しながら、チームの開発スタイルに合わせてカスタマイズしていくことが重要です。

今日からあなたも GitHub Actions を活用して、開発プロセスの自動化に取り組んでみませんか?継続的な改善により、より効率的で信頼性の高い開発環境を構築することができるでしょう。

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座