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の用語を理解できているか、以下の質問で確認してみましょう:
基本理解
- □ ワークフローとジョブの違いを説明できる
- □ ジョブとステップの違いを説明できる
- □ アクションとコマンドの違いを説明できる
- □ イベントとランナーの役割を説明できる
実践理解
- □ どのイベントでワークフローを起動するか判断できる
- □ ジョブの依存関係を適切に設定できる
- □ 適切なランナーを選択できる
- □ アーティファクトが必要な場面を判断できる
次のステップ:実際に使ってみよう
用語を理解したら、実際にワークフローを作成して体感することが重要です:
- シンプルなワークフロー作成:Hello World レベルから開始
- 段階的な機能追加:テスト→ビルド→デプロイの順で拡張
- エラーとの向き合い:ログを読んで問題を解決
- コミュニティ学習:他者のワークフローを参考にする
まとめ
GitHub Actionsの用語理解は、効果的な自動化の第一歩です。重要なポイント:
- 階層構造の理解:ワークフロー→ジョブ→ステップの関係
- 役割の明確化:それぞれの用語が担う具体的な役割
- 実例での確認:理論だけでなく実際のコードで確認
- 段階的な学習:基本用語から応用用語へ順序立てて習得
この用語理解を基に、次回は具体的なプロジェクトでのGitHub Actions活用方法を詳しく見ていきましょう!