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]
主要な設定項目には以下があります。
# | 項目 | 必須 | 説明 |
---|---|---|---|
1 | name | 任意 | ワークフローの名前 |
2 | on | 必須 | トリガー条件 |
3 | jobs | 必須 | 実行するジョブの定義 |
4 | runs-on | 必須 | 実行環境の指定 |
5 | steps | 必須 | 実行するステップの一覧 |
初心者がつまずきやすいポイント
エラーメッセージの理解 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 を活用して、開発の自動化を進めてみてはいかがでしょうか。
関連リンク
- review
今の自分に満足していますか?『持たざる者の逆襲 まだ何者でもない君へ』溝口勇児
- review
ついに語られた業界の裏側!『フジテレビの正体』堀江貴文が描くテレビ局の本当の姿
- review
愛する勇気を持てば人生が変わる!『幸せになる勇気』岸見一郎・古賀史健のアドラー実践編で真の幸福を手に入れる
- review
週末を変えれば年収も変わる!『世界の一流は「休日」に何をしているのか』越川慎司の一流週末メソッド
- review
新しい自分に会いに行こう!『自分の変え方』村岡大樹の認知科学コーチングで人生リセット
- review
科学革命から AI 時代へ!『サピエンス全史 下巻』ユヴァル・ノア・ハラリが予見する人類の未来