T-CREATOR

GitHub Actions の YAML 書き方完全ガイド【初心者向け】

GitHub Actions の YAML 書き方完全ガイド【初心者向け】

GitHub Actions を使った CI/CD の自動化に興味はありませんか?今やソフトウェア開発において、コードの品質を保ちながら効率的にリリースを行うことは必須のスキルとなっています。

GitHub Actions は、GitHub リポジトリ内でワークフローを自動化できる強力な機能です。そして、このワークフローの設定には YAML 形式のファイルを使用します。しかし、初心者の方にとって YAML の記法や GitHub Actions 特有の設定項目は、最初は戸惑うことも多いでしょう。

本記事では、GitHub Actions の YAML 記法を基礎から応用まで、実際のコード例とともに丁寧に解説いたします。エラーの解決方法も含めて、実務で即座に活用できる知識をお届けします。

背景

CI/CD の必要性

現代のソフトウェア開発では、コードの変更が頻繁に行われます。手動でのテストやデプロイは時間がかかるだけでなく、人為的なミスを招く可能性も高くなります。

CI/CD は以下のメリットを提供します。

#メリット説明
1品質向上自動テストによりバグの早期発見が可能
2効率化手動作業の削減により開発速度が向上
3一貫性同じ手順での実行により結果が安定
4信頼性人為的ミスの削減

GitHub Actions の役割と利点

GitHub Actions は、GitHub が提供する CI/CD プラットフォームです。他の CI/CD ツールと比較して、以下の特徴があります。

mermaidflowchart TB
    repo[GitHubリポジトリ] --> trigger[プッシュ・PR]
    trigger --> actions[GitHub Actions]
    actions --> test[テスト実行]
    actions --> build[ビルド]
    actions --> deploy[デプロイ]
    test --> result[結果通知]
    build --> result
    deploy --> result

GitHub Actions を使用する主な利点は、GitHub との緊密な統合により、別途 CI/CD ツールを導入する必要がないことです。さらに、豊富なアクションマーケットプレイスにより、多くの処理を簡単に実装できます。

YAML を使う理由

GitHub Actions が YAML 形式を採用している理由は以下の通りです。

可読性の高さ YAML は人間が読みやすい形式であり、設定内容を直感的に理解できます。

構造化データの表現 複雑な設定を階層構造で表現でき、ワークフローの依存関係を明確に示せます。

広く普及した標準 多くの CI/CD ツールやクラウドサービスで YAML が採用されており、知識の転用が可能です。

課題

YAML 記法の複雑さ

YAML 記法には、初心者が混乱しやすい特徴があります。

インデントの重要性 YAML はインデント(字下げ)で構造を表現するため、スペースの数が重要になります。

yaml# 正しい例
jobs:
  build:
    runs-on: ubuntu-latest
yaml# 間違った例(インデントが不正)
jobs:
build:
  runs-on: ubuntu-latest

データ型の判定 YAML は文字列、数値、真偽値を自動判定しますが、意図しない型変換が起こることがあります。

GitHub Actions 固有の設定項目

GitHub Actions には独自の設定項目が多数存在し、それぞれに役割があります。

mermaidflowchart LR
    workflow[ワークフロー] --> jobs[ジョブ群]
    jobs --> job1[ジョブ1]
    jobs --> job2[ジョブ2]
    job1 --> steps1[ステップ群]
    job2 --> steps2[ステップ群]
    steps1 --> action1[アクション1]
    steps1 --> action2[アクション2]

主要な設定項目には以下があります。

#項目必須説明
1name任意ワークフローの名前
2on必須トリガー条件
3jobs必須実行するジョブの定義
4runs-on必須実行環境の指定
5steps必須実行するステップの一覧

初心者がつまずきやすいポイント

エラーメッセージの理解 GitHub Actions のエラーメッセージは、YAML 構文エラーとワークフロー実行エラーが混在するため、原因の特定が困難です。

依存関係の管理 ジョブ間の依存関係や並列実行の制御が複雑になりがちです。

シークレットと環境変数 機密情報の取り扱いや環境固有の設定で混乱することが多いです。

解決策

段階的な学習アプローチ

GitHub Actions の YAML 記法を効率的に習得するため、以下の段階的アプローチを推奨します。

ステップ 1: YAML 基本記法の理解 まずは YAML の基本的な記法を学習します。

ステップ 2: 最小限のワークフロー作成 Hello World レベルの簡単なワークフローから始めます。

ステップ 3: 実用的な機能の追加 テストやビルドなど、実際の開発で使用する機能を段階的に追加します。

ステップ 4: 高度な機能の活用 マトリックス戦略や条件分岐など、より複雑な機能を学習します。

実践的なサンプルコード

各段階で実際に動作するサンプルコードを提供し、コピー&ペーストで試せるようにします。

よくあるエラーと対処法

実際の開発で遭遇しやすいエラーパターンとその解決方法を網羅的に紹介します。

具体例

基本的な YAML 構文

YAML の基本記法を理解することから始めましょう。

コメントの書き方 YAML ではハッシュ記号(#)を使ってコメントを記述します。

yaml# これはコメントです
name: My Workflow # 行末コメントも可能

文字列の表現 文字列はクォートの有無を選択できますが、特殊文字を含む場合はクォートが必要です。

yaml# クォートなし
message: Hello World

# クォートあり
message: "Hello, World!"

# 複数行文字列
description: |
  これは複数行の
  文字列です

リストの記述 リストはハイフン(-)を使って表現します。

yaml# シンプルなリスト
fruits:
  - apple
  - banana
  - orange

# オブジェクトのリスト
users:
  - name: Alice
    age: 25
  - name: Bob
    age: 30

オブジェクトの記述 オブジェクトはキーと値のペアで表現し、インデントで階層を示します。

yamlperson:
  name: John Doe
  contact:
    email: john@example.com
    phone: 123-456-7890

GitHub Actions の基本構造

GitHub Actions のワークフローファイルは、決まった構造を持っています。

以下の図は、ワークフローファイルの基本的な構造を示しています。

mermaidflowchart TD
    workflow[".github/workflows/xxx.yml"] --> name["name: ワークフロー名"]
    workflow --> on["on: トリガー設定"]
    workflow --> jobs["jobs: ジョブ定義"]
    jobs --> job1["job-name: ジョブ1"]
    job1 --> runson["runs-on: 実行環境"]
    job1 --> steps["steps: ステップ定義"]
    steps --> step1["- name: ステップ名"]
    steps --> step2["- uses: アクション名"]
    steps --> step3["- run: コマンド実行"]

最小限のワークフローファイルは以下のようになります。

基本的なファイル構成 ワークフローファイルは .github​/​workflows​/​ ディレクトリに配置します。

yamlname: Basic Workflow

on:
  push:
    branches: [main]

jobs:
  hello:
    runs-on: ubuntu-latest
    steps:
      - name: Say Hello
        run: echo "Hello, GitHub Actions!"

各要素の説明

  • name: ワークフローの名前を指定します
  • on: ワークフローを実行するトリガーを定義します
  • jobs: 実行するジョブを定義します
  • runs-on: ジョブを実行する仮想環境を指定します
  • steps: ジョブ内で実行する一連のステップを定義します

トリガーの詳細設定 より詳細なトリガー設定も可能です。

yamlon:
  push:
    branches: [main, develop]
    paths:
      - 'src/**'
      - '!src/test/**'
  pull_request:
    branches: [main]
  schedule:
    - cron: '0 9 * * MON'

実用的なワークフロー例

実際の開発で使用される典型的なワークフローをご紹介します。

Node.js プロジェクトのテスト実行 以下は、Node.js プロジェクトでテストを自動実行するワークフローです。

yamlname: Node.js CI

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

実行環境と Node.js のセットアップ Node.js の環境設定を行います。

yamljobs:
  test:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [16.x, 18.x, 20.x]

ステップの詳細定義 コードのチェックアウトから依存関係のインストール、テスト実行まで。

yamlsteps:
  - name: Checkout code
    uses: actions/checkout@v4

  - name: Setup Node.js
    uses: actions/setup-node@v4
    with:
      node-version: ${{ matrix.node-version }}
      cache: 'yarn'

依存関係のインストールとテスト実行

yaml- name: Install dependencies
  run: yarn install --frozen-lockfile

- name: Run tests
  run: yarn test

- name: Run lint
  run: yarn lint

フロントエンドプロジェクトのビルドとデプロイ React 等のフロントエンドプロジェクトのビルドとデプロイの例です。

yamlname: Build and Deploy

on:
  push:
    branches: [main]

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest

ビルド処理の実装

yamlsteps:
  - name: Checkout
    uses: actions/checkout@v4

  - name: Setup Node.js
    uses: actions/setup-node@v4
    with:
      node-version: '18'
      cache: 'yarn'

  - name: Install and Build
    run: |
      yarn install
      yarn build

成果物のアップロード

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

トラブルシューティング

GitHub Actions でよく遭遇するエラーと対処法をご紹介します。

YAML 構文エラー

最も多いエラーは、YAML 構文の間違いです。

yaml# エラー例: インデントが間違っている
name: Test
on:
push: # ここのインデントが不正
  branches: [main]

エラーメッセージ: yaml: line 4: found character that cannot start any token

解決方法: 正しいインデントに修正します。

yaml# 修正版
name: Test
on:
  push: # 正しいインデント
    branches: [main]

アクションのバージョンエラー

使用しているアクションのバージョンが古い場合に発生します。

yaml# 古いバージョン(非推奨)
- uses: actions/checkout@v2

エラーメッセージ: Node.js 12 actions are deprecated

解決方法: 最新バージョンに更新します。

yaml# 最新バージョン
- uses: actions/checkout@v4

環境変数の設定エラー

環境変数やシークレットの参照方法が間違っている場合です。

yaml# 間違った参照方法
- name: Deploy
  run: echo $API_KEY # シークレットは直接参照できない

正しい方法: シークレットは secrets コンテキストを使用します。

yaml# 正しい参照方法
- name: Deploy
  env:
    API_KEY: ${{ secrets.API_KEY }}
  run: echo "デプロイを実行中..."

ジョブの依存関係エラー

ジョブ間の依存関係が正しく設定されていない場合です。

yamljobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - run: echo "テスト実行"

  deploy:
    runs-on: ubuntu-latest
    needs: test # testジョブの完了を待つ
    steps:
      - run: echo "デプロイ実行"

権限エラーの対処

GitHub Actions で権限が不足している場合の対処法です。

yamljobs:
  deploy:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      deployments: write
    steps:
      - name: Deploy to staging
        run: echo "デプロイ実行"

デバッグ方法

ワークフローのデバッグには以下の方法が有効です。

yaml- name: Debug information
  run: |
    echo "Current directory: $(pwd)"
    echo "Environment variables:"
    env | sort
    echo "File list:"
    ls -la

エラーログの確認方法を以下の図で示します。

mermaidsequenceDiagram
    participant User as 開発者
    participant GitHub as GitHub
    participant Actions as Actions

    User->>GitHub: コードプッシュ
    GitHub->>Actions: ワークフロー開始
    Actions->>Actions: YAML解析
    alt YAML構文エラー
        Actions->>GitHub: 構文エラー報告
        GitHub->>User: エラー通知
    else 正常
        Actions->>Actions: ジョブ実行
        Actions->>GitHub: 実行結果
        GitHub->>User: 結果通知
    end

GitHub Actions の実行ログは、GitHub の Actions タブから確認できます。エラーが発生した場合は、該当するステップをクリックして詳細なログを確認してください。

まとめ

GitHub Actions の YAML 記法は、最初は複雑に感じるかもしれませんが、基本的なルールを理解すれば効果的な CI/CD パイプラインを構築できます。

本記事で解説した内容をまとめると以下の通りです。

  • YAML の基本記法(インデント、データ型、構造)
  • GitHub Actions 固有の設定項目とその役割
  • 実用的なワークフローの作成方法
  • よくあるエラーパターンと解決方法

まずは簡単なワークフローから始めて、徐々に機能を追加していくことをお勧めします。実際にコードを書きながら学ぶことで、GitHub Actions の強力な機能を活用できるようになるでしょう。

継続的な学習により、より効率的で安全な開発プロセスを構築できます。GitHub Actions を活用して、開発の自動化を進めてみてはいかがでしょうか。

関連リンク