GitHub Actions ワークフローYAML構造

GitHub ActionsワークフローのYAML構造とそのJSON等価物を理解します。トリガー、ジョブ、ステップ、マトリックス戦略の変換例を解説します。

DevOps

詳細な説明

GitHub Actionsワークフローは .github/workflows/ 配下のYAMLファイルで定義されます。そのJSON構造を理解することは、ワークフローをプログラムで生成する際やアクション設定のデバッグに役立ちます。

典型的なGitHub Actionsワークフロー:

name: CI Pipeline

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

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [18, 20, 22]
    steps:
      - uses: actions/checkout@v4
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}
          cache: npm
      - run: npm ci
      - run: npm test
      - run: npm run build

JSON等価物:

{
  "name": "CI Pipeline",
  "on": {
    "push": {
      "branches": ["main", "develop"]
    },
    "pull_request": {
      "branches": ["main"]
    }
  },
  "jobs": {
    "test": {
      "runs-on": "ubuntu-latest",
      "strategy": {
        "matrix": {
          "node-version": [18, 20, 22]
        }
      },
      "steps": [
        { "uses": "actions/checkout@v4" },
        {
          "name": "Setup Node.js",
          "uses": "actions/setup-node@v4",
          "with": {
            "node-version": "${{ matrix.node-version }}",
            "cache": "npm"
          }
        },
        { "run": "npm ci" },
        { "run": "npm test" },
        { "run": "npm run build" }
      ]
    }
  }
}

変換時の重要な注意点:

  • on キーはYAMLのブーリアン問題を引き起こします:YAML 1.1では裸の ontrue として解析されます。GitHub Actionsはこれを特別に処理しますが、汎用パーサーは問題が起きる可能性があります。JSONでは "on" は曖昧さがありません。
  • 式構文${{ }})は両形式でリテラル文字列として保持する必要があります。
  • 複数行の run コマンドはYAMLの | リテラルブロックスタイルを使用し、JSONでは \n 文字を含む単一の文字列になります。
  • マトリックス戦略は両形式で配列ですが、YAMLのリスト構文の方が読みやすくなります。

GitHub ActionsはYAMLファイルのみを読み取りますが、ワークフロージェネレーターやリンターにはJSON構造の理解が有用です。

ユースケース

GitHub Actionsワークフロージェネレーターツールを構築する際に、コード内でワークフロー設定をJSONオブジェクトとして構築し、.github/workflows/ディレクトリへの書き込み用にYAMLに変換する場合。

試してみる — JSON ↔ YAML Converter

フルツールを開く