言語を切り替える
テーマを切り替える

GitHub Actions 入門:YAMLワークフロー基礎とトリガー設定

正直、初めて.github/workflowsフォルダのYAMLファイルを見た時、少し困惑しました。インデント、コロン、意味不明なキーワード——onjobsruns-on。これ何?食べられるの?

後でプロジェクトが増えて、コード推送後に毎回手動でテスト実行、手動デプロイを繰り返すのが面倒になりました。その時気づきました:GitHub Actions、本当に便利。

この記事ではGitHub Actionsの基礎——YAMLワークフローの書き方、トリガー設定方法——を紹介します。複雑な機能は扱いません、実用的な部分だけ。まず動かせることが大事。


GitHub Actionsで何ができるか

簡単に言えば:自動化。

以前、コード推送後は手動で多くの作業が必要でした:テスト実行、コードフォーマット確認、プロジェクトビルド、サーバデプロイ。今はこれらをYAMLファイルに書くだけで、GitHubが自動実行。

例えば:mainブランチにコード推送毎に、GitHub Actionsが自動でテスト実行。テスト通過後のみPRマージ許可。これでコード品質保証、安心。

もう一つのメリット:無料。公開リポは完全無料。プライベートリポは月2000分無料枠あり(個人プロジェクトで十分)。


YAMLワークフローの基本構造

最も簡単な例を見てみましょう:

name: テストワークフロー

on: push

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name:挨拶を表示
        run: echo "Hello, GitHub Actions!"

各行の解説:

name:ワークフロー名。自由に命名、GitHub Actionsページで識別用。

on:トリガー条件。pushを書くと、コード推送毎にこのワークフロー実行。

jobs:ジョブブロック。1つのワークフローは複数ジョブを含め可能、並列または順次実行。

build:このジョブのID。自由命名、但し意味ある名前推奨(buildtestdeploy等)。

runs-on:実行環境。ubuntu-latestは最新Ubuntuサーバで実行。windows-latestmacos-latestも選択可能。

steps:ステップリスト。1つのジョブは複数ステップ構成、順次実行。

run:実行コマンド。ここはメッセージ表示のみ。

これが最も基本の構造。複雑なワークフローは、この基礎に更多ジョブ、更多ステップ、更多判断ロジックを追加。慌てず、基礎を理解すれば複雑も自然と分かります。


トリガー:ワークフロー実行タイミング

トリガーはワークフロ全体の「スイッチ」。正しく設定すれば、適切なタイミングで実行。

4つの主要トリガー:pushpull_requestscheduleworkflow_dispatch。順に解説。

1. push:コード推送時トリガー

最も使用頻度高いトリガー。

on: push

この設定で、任意ブランチへのコード推送毎にトリガー。

但し通常、特定ブランチのみトリガーしたい:

on:
  push:
    branches:
      - main
      - dev

この設定意味:mainまたはdevブランチへの推送のみトリガー。他ブランチ?無視。

更に詳細——特定パス変更のみ監視:

on:
  push:
    branches:
      - main
    paths:
      - 'src/**'
      - 'package.json'

src/ディレクトリ下のファイルまたはpackage.json変更のみトリガー。ドキュメントや設定ファイル変更でCI無駄実行回避。

2. pull_request:PR関連操作トリガー

PR(Pull Request)はチーム協力の核心場面。

on: pull_request

この設定で、PR全操作トリガー:PR作成、PR更新、PR再開。

但し同様にブランチ限定可能:

on:
  pull_request:
    branches:
      - main

ターゲットブランチがmainのPRのみトリガー。

PR操作タイプ指定も可能:

on:
  pull_request:
    types:
      - opened
      - synchronize
      - reopened
  • opened:PR作成時
  • synchronize:PRに新コミット追加(新変更推送時)
  • reopened:閉じたPR再開

この設定は一般的——PR作成時テスト実行、変更問題ない確認。

3. schedule:定時トリガー

定時タスク同様、計画通りワークフロー実行。

on:
  schedule:
    - cron: '0 0 * * *'

これはcron式、形式:分 時 日 月 曜日

上記意味:毎日UTC時間0時(北京時間朝8時)1回実行。

常用場面:毎日自動テスト、定時キャッシュクリア、定期レポート生成。

正直、cron式は書き間違いやすい。確認用オンラインツールあり、crontab.guru等。

4. workflow_dispatch:手動トリガー

時には手動トリガー必要——例1クリックデプロイ、特定タスク手動実行。

on: workflow_dispatch

設定後、GitHub Actionsページに「Run workflow」ボタン表示。クリックで手動トリガー。

入力パラメータ設定も可能:

on:
  workflow_dispatch:
    inputs:
      environment:
        description: 'デプロイ環境'
        required: true
        default: 'production'
        type: choice
        options:
          - production
          - staging

手動トリガー時、デプロイ環境選択可能。テストまたは本番環境へ1クリックデプロイ。便利ですね。

トリガー組み合わせ

実際のプロジェクトでは複数トリガー必要な場合多い:

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main
  schedule:
    - cron: '0 6 * * 1'  # 毎週月曜6時UTC
  workflow_dispatch:

この設定意味:

  • mainブランチ推送時トリガー
  • ターゲットブランチmainのPRトリガー
  • 毎週月曜朝1回実行
  • 手動トリガー対応

1ワークフロー、複数トリガー方法。一般的な設定パターン。


実践:Node.jsプロジェクトに自動テスト設定

実用的な例を作成——Node.jsプロジェクト自動テスト。

プロジェクト構造想定:

my-project/
├── src/
├── tests/
├── package.json
└── .github/
    └── workflows/
        └── test.yml

.github/workflows/test.ymlファイル作成:

name: 自動テスト

on:
  push:
    branches:
      - main
      - dev
  pull_request:
    branches:
      - main

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      # 1. コードチェックアウト
      - name: コードチェックアウト
        uses: actions/checkout@v4

      # 2. Node.js設定
      - name: Node.js設定
        uses: actions/setup-node@v4
        with:
          node-version: '20'

      # 3. 依存関係インストール
      - name: 依存関係インストール
        run: npm ci

      # 4. テスト実行
      - name: テスト実行
        run: npm test

      # 5. コードフォーマット確認(任意)
      - name: コードフォーマット確認
        run: npm run lint

各ステップ解説:

コードチェックアウトactions/checkout@v4は公式提供Action、リポジトリを実行環境にダウンロード。

Node.js設定actions/setup-node@v4も公式Action、指定Node.jsバージョンインストール。node-version: '20'はNode.js 20使用意味。

依存関係インストールnpm ciはCI環境でnpm installより適切——package-lock.json厳密従い、高速で信頼性高。

テスト実行:テストコマンド直接実行。前提はpackage.jsontestスクリプト設定済み。

コードフォーマット確認:ESLintまたはPrettier設定済みなら、このステップで自動フォーマット確認。

このワークフローはmainまたはdevブランチ推送時トリガー、ターゲットブランチmainのPR時もトリガー。各変更はテスト監視。


よくある落とし穴

正直、YAML書き始めた時多くの失敗経験あり。一般的なもの紹介:

1. インデントエラー

YAMLはインデント極めて敏感。スペース必須、タブ不可。インデントレベル一致必須。

# ❌ エラー:インデント不一致
jobs:
build:
  runs-on: ubuntu-latest

# ✅ 正解:統一インデント
jobs:
  build:
    runs-on: ubuntu-latest

エディタのYAMLプラグイン使用推奨、インデントエラー自動ハイライト。

2. トリガー動作しない

時には設定済みトリガーが動作しない。一般的原因:

  • ブランチ設定エラーdevelopブランチ推送、但し設定はmainのみ監視
  • フォークリポ:フォークリポからの推送はpushイベントトリガーしない
  • PR from fork:フォークからのPRは一部トリガー動作しない

3. コードチェックアウト忘れ

初心者最も犯しやすいエラー:actions/checkout@v4忘れ。

このステップ無いと、ワークフロー環境は空——コード存在しない。

steps:
  # ❌ エラー:コードチェックアウト前にコマンド実行
  - run: npm test

  # ✅ 正解:先にコードチェックアウト
  - uses: actions/checkout@v4
  - run: npm test

4. 古いActionバージョン

一部チュートリアルはactions/checkout@v2またはv3使用。但し最新版v4推奨——機能完全、性能良好。

使用Actionの新バージョン定期確認。GitHubはバージョン古い通知。


実用的なアドバイス

トリガー選択原則

問い自分:

  • 自動または手動? → 自動:push/pull_request、手動:workflow_dispatch
  • 頻度高い? → 頻度高いならブランチまたはパス限定、リソース浪費回避
  • チーム協力? → PR場面pull_request必須設定

性能最適化Tips

  • トリガー範囲限定:重要ブランチとパスのみ監視
  • 並列実行:複数独立ジョブ並列実行可能
  • キャッシュ活用actions/setup-nodeはNode.jsと依存関係自動キャッシュ、毎回再インストール不要

明確命名

# ❌ 曖昧命名
jobs:
  job1:
    steps:
      - name: step1

# ✅ 明確命名
jobs:
  test:
    steps:
      - name: 依存関係インストール

明確な名前は問題調査便利——GitHub Actionsページは各ステップ名表示。


推奨学習パス

この記事は基礎のみ。深く学ぶなら、継続学習:

  1. マトリックスビルド:複数環境(Node.js 16、18、20)同時テスト
  2. キャッシュ最適化:手動キャッシュ設定、ビルド高速化
  3. Secret管理:API Key、パスワード等機密情報安全保管
  4. カスタムAction:独自Action封装、ロジック再利用
  5. デプロイ自動化:サーバまたはクラウドプラットフォーム自動デプロイ

公式ドキュメント最良リソース:GitHub Actions Docs。内容完全、少し長い。

もう一つ提案:他人設定参照。GitHub上多くオープンソースプロジェクトは.github/workflowsフォルダに完全設定あり——コピーも可。


最後に

多く話しました、核心は3点:

  1. YAML構造nameonjobssteps——4キーワードで基本構造
  2. トリガー設定pushpull_requestscheduleworkflow_dispatch——4種最も常用
  3. 実践例:Node.js自動テスト最も典型的な入門場面

最初ワークフロー完成後の感覚記憶——コード推送、GitHub自動テスト実行、メール「テスト通過」通知。「全て制御中」安心感、本当に爽快。

後で高度機能学ぶ(マトリックスビルド、キャッシュ最適化、デプロイ自動化)、基礎あれば難しくない。GitHub Actions入門難易度低、但し上手く使えば時間大幅節約。少なくとも毎回コード推送後に手動テスト不要、そうですね?

GitHub Actions自動テストワークフロー設定

Node.jsプロジェクトに自動テストワークフロー作成、コード推送時自動テスト実行実現

⏱️ 目安時間: 15 分

  1. 1

    ステップ1: ワークフローファイル作成

    プロジェクトルートに.github/workflows/test.yml作成:

    • パス必須正確:.github/workflows/
    • ファイル名推奨意味ある:test.yml、ci.yml
    • ファイル拡張子必須.ymlまたは.yaml
  2. 2

    ステップ2: トリガー設定

    ワークフロートリガー条件設定:

    • pushトリガー:main、devブランチ監視
    • pull_requestトリガー:ターゲットブランチmainのPR監視
    • パス限定対応:paths: ['src/**']
  3. 3

    ステップ3: 実行環境設定

    実行環境とNode.jsバージョン指定:

    • runs-on: ubuntu-latest(最新Ubuntu)
    • uses: actions/setup-node@v4
    • node-version: '20'(Node.js 20)
  4. 4

    ステップ4: テストステップ記述

    順序通りテストプロセス実行:

    • コードチェックアウト:uses: actions/checkout@v4
    • 依存関係インストール:run: npm ci(installよりci推奨)
    • テスト実行:run: npm test
    • フォーマット確認:run: npm run lint(任意)
  5. 5

    ステップ5: ワークフロー確認

    コード推送後実行結果確認:

    • GitHub Actionsページで実行状態確認
    • 各ステップログ出力確認
    • テスト通過確認後PRマージ

FAQ

GitHub Actionsと他CI/CDツール(Jenkins等)の違いは?
GitHub ActionsはGitHub内蔵、設定簡単、GitHubプロジェクト適合。Jenkinsは機能強力但し独立デプロイと保守必要。個人プロジェクトと小規模チーム、GitHub Actionsは開始容易。
YAMLファイル必須.github/workflowsディレクトリ配置?
是的、パス必須正確。GitHubは.github/workflows/ディレクトリ下YAMLファイルのみワークフロー設定識別。他の場所は実行されない。
ブランチ推送後ワークフロートリガーしない原因?
一般原因:1)ブランチ設定エラー(推送ブランチ監視リスト不在);2)リポはフォーク(フォークリポpushイベントデフォルトトリガーしない);3)パス限定(変更ファイル監視パス不在)。これら確認で通常問題解決。
npm ciとnpm installの違いは?
npm ci(Clean Install)はpackage-lock.json厳密従い、高速で信頼性高、CI環境適合。npm installはバージョン矛盾解決試み、不一致結果可能性。自動テストnpm ci推奨。
プライベートリポGitHub Actions費用は?
プライベートリポ月2000分無料枠あり(MacOS環境10分計算)。超過後使用量課金:Linux $0.008/分、Windows $0.016/分、MacOS $0.08/分。通常個人プロジェクト十分。
毎回推送でワークフロートリガー回避方法?
トリガー範囲限定:1)重要ブランチのみ監視(branches: [main]);2)重要パスのみ監視(paths: ['src/**']);3)組み合わせ、例mainブランチsrc/変更のみトリガー。

参考資料

5 min read · 公開日: 2026年4月5日 · 更新日: 2026年4月5日

コメント

GitHubアカウントでログインしてコメントできます

関連記事