PR

GitHub Actionsの基本用語完全解説:ワークフロー・ジョブ・ステップの違いを図解で理解

GitHub Actionsを学び始めると、「ワークフロー」「ジョブ」「ステップ」など様々な用語が登場して混乱することがありませんか?この記事では、GitHub Actionsを理解するために必要な基本用語を、図解と具体例を交えて分かりやすく解説します。

シリーズ記事

GitHub Actions用語の全体像

GitHub Actionsは、以下の要素が階層的に組み合わさって動作します:

リポジトリ
├── ワークフロー(Workflow)
│   ├── イベント(Event)
│   └── ジョブ(Job)
│       ├── ランナー(Runner)
│       └── ステップ(Step)
│           ├── アクション(Action)
│           └── コマンド(Command)
└── アーティファクト(Artifact)

コア概念:6つの基本用語

1. ワークフロー(Workflow)

定義:自動化したい一連の処理全体を定義したもの

特徴

  • YAMLファイルで定義される
  • .github/workflows/ディレクトリに配置
  • 1つ以上のジョブを含む
  • 特定のイベントで起動される

実例

name: CI Pipeline  # ワークフロー名

on: [push, pull_request]  # トリガーイベント

jobs:  # 以下にジョブを定義
  test:
    # ジョブの内容
  build:
    # ジョブの内容

現実の例え:レストランの「ディナーコース」のようなもの。前菜、メイン、デザートの順序と内容が決まっている。

2. ジョブ(Job)

定義:ワークフロー内の独立した処理単位

特徴

  • デフォルトで並列実行される
  • 依存関係を設定して順序制御可能
  • それぞれ独立したランナーで実行
  • 複数のステップから構成される

実例

jobs:
  test:           # ジョブ1:テスト実行
    runs-on: ubuntu-latest
    steps: [...]
    
  build:          # ジョブ2:ビルド実行
    runs-on: ubuntu-latest  
    needs: test   # testジョブ完了後に実行
    steps: [...]
    
  deploy:         # ジョブ3:デプロイ実行
    runs-on: ubuntu-latest
    needs: [test, build]  # test, build完了後に実行
    steps: [...]

現実の例え:工場の「工程」。検査工程、組立工程、梱包工程など、それぞれ独立して動くが、順序がある。

3. ステップ(Step)

定義:ジョブ内の個別のタスク

特徴

  • 順番に実行される(並列実行不可)
  • アクションまたはシェルコマンドを実行
  • 前のステップの結果を受け継ぐ
  • 条件付き実行が可能

実例

steps:
  - name: Checkout code        # ステップ1
    uses: actions/checkout@v4
    
  - name: Setup Node.js        # ステップ2  
    uses: actions/setup-node@v3
    with:
      node-version: '18'
      
  - name: Install dependencies # ステップ3
    run: npm install
    
  - name: Run tests           # ステップ4
    run: npm test
    if: success()             # 前ステップが成功した場合のみ実行

現実の例え:料理の「手順」。材料を切る→炒める→味付けする→盛り付ける、といった順序立てられた作業。

4. アクション(Action)

定義:再利用可能な処理のパッケージ

種類

  • 公式アクション:GitHubが提供(actions/checkout等)
  • コミュニティアクション:サードパーティが提供
  • カスタムアクション:自作のアクション

実例

# 公式アクション:コードチェックアウト
- uses: actions/checkout@v4

# 公式アクション:Node.js環境セットアップ  
- uses: actions/setup-node@v3
  with:
    node-version: '18'
    cache: 'npm'

# コミュニティアクション:Slack通知
- uses: 8398a7/action-slack@v3
  with:
    status: success
    webhook_url: ${{ secrets.SLACK_WEBHOOK }}

# カスタムアクション:自作の処理
- uses: ./.github/actions/my-custom-action

現実の例え:調理器具や調理法。「オーブンで焼く」「ミキサーで混ぜる」など、決まった方法で決まった結果を得られる道具。

5. イベント(Event)

定義:ワークフローを起動するトリガー

主要なイベント種類

イベント 説明 使用例
push コードがプッシュされた時 CI/CDの開始
pull_request プルリクエストが作成/更新された時 レビュー前の自動チェック
schedule 定期実行(cron形式) 夜間ビルド、定期テスト
workflow_dispatch 手動実行 手動デプロイ
release リリースが作成された時 本番環境へのデプロイ

実例

# 単一イベント
on: push

# 複数イベント  
on: [push, pull_request]

# 詳細設定付きイベント
on:
  push:
    branches: [main, develop]    # 特定ブランチのみ
    paths: ['src/**', '*.js']    # 特定ファイルの変更のみ
  pull_request:
    types: [opened, synchronize] # PRの種類を限定
  schedule:
    - cron: '0 2 * * *'          # 毎日午前2時

現実の例え:アラームや通知。「朝7時になったら起きる」「ドアベルが鳴ったら応答する」といった条件。

6. ランナー(Runner)

定義:ワークフローを実行する仮想マシン環境

種類

  • GitHub-hosted runners:GitHub提供の仮想マシン
  • Self-hosted runners:自前で用意した実行環境

利用可能な環境

OS 指定方法 CPU RAM ストレージ
Ubuntu ubuntu-latest 2コア 7GB 14GB
Windows windows-latest 2コア 7GB 14GB
macOS macos-latest 3コア 14GB 14GB

実例

# 単一環境
jobs:
  test:
    runs-on: ubuntu-latest

# 複数環境でのテスト(マトリックス)
jobs:
  test:
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]
        node-version: [16, 18, 20]
    runs-on: ${{ matrix.os }}

現実の例え:作業場や工房。木工作業なら木工室、料理なら厨房、それぞれ適した環境と道具が揃っている。

追加の重要用語

アーティファクト(Artifact)

定義:ワークフロー実行中に生成されるファイルで、保存・共有したいもの

用途例

  • ビルド成果物(実行ファイル、パッケージ)
  • テストレポート
  • ログファイル
  • スクリーンショット

実例

- name: Build application
  run: npm run build

- name: Upload build artifacts
  uses: actions/upload-artifact@v3
  with:
    name: build-files
    path: dist/

# 別のジョブでアーティファクトを使用
- name: Download build artifacts  
  uses: actions/download-artifact@v3
  with:
    name: build-files
    path: dist/

シークレット(Secret)

定義:API キーやパスワードなど、機密情報を安全に保存する仕組み

実例

- name: Deploy to server
  run: |
    echo "${{ secrets.SSH_PRIVATE_KEY }}" > key.pem
    ssh -i key.pem user@server 'deploy.sh'
  env:
    API_KEY: ${{ secrets.API_KEY }}

環境(Environment)

定義:デプロイ先の環境(production、staging等)を定義し、保護ルールを設定できる仕組み

実例

jobs:
  deploy:
    runs-on: ubuntu-latest
    environment: production  # production環境として実行
    steps:
      - name: Deploy to production
        run: echo "Deploying to production"

用語の関係性を理解する実例

以下は、すべての用語が組み合わさった実際のワークフロー例です:

name: Complete CI/CD Pipeline        # ワークフロー名

on:                                   # イベント定義
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:                                 # ジョブ群
  test:                              # ジョブ1:テスト
    runs-on: ubuntu-latest           # ランナー指定
    steps:                           # ステップ群
      - name: Checkout               # ステップ1
        uses: actions/checkout@v4    # アクション使用
        
      - name: Setup Node.js          # ステップ2
        uses: actions/setup-node@v3  # アクション使用
        with:
          node-version: '18'
          
      - name: Install dependencies   # ステップ3
        run: npm ci                  # コマンド実行
        
      - name: Run tests             # ステップ4
        run: npm test               # コマンド実行
        
      - name: Upload test results   # ステップ5
        uses: actions/upload-artifact@v3  # アーティファクト保存
        with:
          name: test-results
          path: test-results.xml

  build:                           # ジョブ2:ビルド
    needs: test                    # 依存関係:test完了後実行
    runs-on: ubuntu-latest         # ランナー指定
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        
      - name: Build application
        run: npm run build
        
      - name: Upload build artifacts
        uses: actions/upload-artifact@v3
        with:
          name: dist-files
          path: dist/

  deploy:                          # ジョブ3:デプロイ
    needs: [test, build]           # 依存関係:test, build完了後実行
    runs-on: ubuntu-latest
    environment: production        # 環境指定
    if: github.ref == 'refs/heads/main'  # 条件:mainブランチのみ
    steps:
      - name: Download artifacts
        uses: actions/download-artifact@v3
        with:
          name: dist-files
          
      - name: Deploy to production
        run: |
          echo "Deploying with API key"
          deploy.sh
        env:
          API_KEY: ${{ secrets.PRODUCTION_API_KEY }}  # シークレット使用

用語理解のためのチェックリスト

GitHub Actionsの用語を理解できているか、以下の質問で確認してみましょう:

基本理解

  • □ ワークフローとジョブの違いを説明できる
  • □ ジョブとステップの違いを説明できる
  • □ アクションとコマンドの違いを説明できる
  • □ イベントとランナーの役割を説明できる

実践理解

  • □ どのイベントでワークフローを起動するか判断できる
  • □ ジョブの依存関係を適切に設定できる
  • □ 適切なランナーを選択できる
  • □ アーティファクトが必要な場面を判断できる

次のステップ:実際に使ってみよう

用語を理解したら、実際にワークフローを作成して体感することが重要です:

  1. シンプルなワークフロー作成:Hello World レベルから開始
  2. 段階的な機能追加:テスト→ビルド→デプロイの順で拡張
  3. エラーとの向き合い:ログを読んで問題を解決
  4. コミュニティ学習:他者のワークフローを参考にする

まとめ

GitHub Actionsの用語理解は、効果的な自動化の第一歩です。重要なポイント:

  • 階層構造の理解:ワークフロー→ジョブ→ステップの関係
  • 役割の明確化:それぞれの用語が担う具体的な役割
  • 実例での確認:理論だけでなく実際のコードで確認
  • 段階的な学習:基本用語から応用用語へ順序立てて習得

この用語理解を基に、次回は具体的なプロジェクトでのGitHub Actions活用方法を詳しく見ていきましょう!

タイトルとURLをコピーしました