🌟

GitHub Actions の詳細と実装ガイド

2025/03/06に公開

1. GitHub Actionsとは?

GitHub Actions は、リポジトリのイベント(push、pull request など)をトリガーにして、CI/CD(継続的インテグレーション・デリバリー)パイプラインを自動化できる仕組みです。

特徴:

  • イベント駆動型(push, PR, release など)
  • ワークフローの柔軟性(YAMLファイルで定義)
  • Dockerコンテナの実行対応
  • マトリクスビルド(複数のOSやバージョンで並行実行可能)

2. 基本構成

GitHub Actions の構成要素は以下の通り。

要素 説明
Workflow 自動化の流れを定義するYAMLファイル(.github/workflows 内)
Job 1つ以上のステップを実行する単位(並列または直列で実行可能)
Step Job内で実行される具体的なタスク(スクリプトやアクション)
Runner ワークフローを実行する環境(GitHubのホストランナー or 自前サーバー)
Action 再利用可能な個別のタスク(公式 or カスタムのアクションが使用可能)

3. 簡単なワークフローの例

(1) 自動テストを実行するワークフロー

.github/workflows/test.yml

ame: Run Tests

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - name: コードをチェックアウト
        uses: actions/checkout@v4

      - name: Pythonをセットアップ
        uses: actions/setup-python@v4
        with:
          python-version: '3.9'

      - name: 依存関係をインストール
        run: |
          pip install -r requirements.txt

      - name: テストを実行
        run: |
          pytest
(2) Lint チェックとビルドを含むワークフロー

.github/workflows/lint_build.yml

name: Lint & Build

on:
  pull_request:
    branches:
      - main
      - develop

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Node.jsのセットアップ
        uses: actions/setup-node@v4
        with:
          node-version: '18'
      - name: ESLint チェック
        run: |
          npm install
          npm run lint

  build:
    runs-on: ubuntu-latest
    needs: lint
    steps:
      - uses: actions/checkout@v4
      - name: ビルドを実行
        run: |
          npm install
          npm run build
(3) DockerイメージをビルドしてDocker Hubにプッシュ

.github/workflows/docker_build.yml

name: Docker Build and Push

on:
  push:
    branches:
      - main

jobs:
  build-and-push:
    runs-on: ubuntu-latest
    steps:
      - name: コードを取得
        uses: actions/checkout@v4

      - name: Dockerログイン
        run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin

      - name: Dockerイメージのビルドとプッシュ
        run: |
          docker build -t myrepo/myimage:latest .
          docker push myrepo/myimage:latest

4. 高度な設定

(1) マトリクスビルド(複数環境で並列実行)
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: pytest
(2) キャッシュの利用で速度向上
steps:
  - name: 依存関係のキャッシュ
    uses: actions/cache@v3
    with:
      path: ~/.cache/pip
      key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
      restore-keys: |
        ${{ runner.os }}-pip-
(3) 手動実行(workflow_dispatch)
on:
  workflow_dispatch:

→ GitHub の Actions ページから手動でトリガー可能。


5. Secretsを使ったセキュアな設定

GitHub Actionsでは、APIキーや認証情報を secrets に保存し、安全に利用可能。

設定例:

  • GitHub の Settings → Secrets and Variables → Actions から DOCKER_USERNAME, DOCKER_PASSWORD を登録。
  • .github/workflows/docker_build.ymlsecrets を使用。
run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin

6. GitHub Actions の活用ポイント

  • CI/CD の自動化: テスト、Lint、ビルド、デプロイを自動化。
  • セキュアな認証: Secretsを利用し、APIキーなどを安全に管理。
  • 並列処理の活用: マトリクスビルドや複数ジョブを駆使して効率化。
  • Dockerとの連携: コンテナ化されたアプリケーションのデプロイが容易。

GitHub Actions を活用することで、開発フローを効率化し、信頼性の高い CI/CD パイプラインを構築できます。

Discussion