はじめに
GitHub Actionsは、カスタムなイベント駆動のパイプラインを作成することで、開発者がソフトウェアのワークフローを自動化できる強力なプラットフォームです。ワークフローのトリガーはGitHub Actionsの中心的な機能であり、様々なイベントに対して自動的にタスクを実行することができます。この記事では、イベントとトリガー、スケジュールされたワークフロー、手動ワークフローなど、GitHub Actionsでワークフローをトリガーする方法を紹介します。
イベントとトリガー
イベントとトリガーは、GitHub Actionsの基盤となります。ワークフローは、GitHubリポジトリ内で特定のイベントが発生したときに開始されます。これらのイベントは、プッシュやプルリクエストなどのリポジトリに関するものから、その他の様々なものまでさまざまです。これらのイベントをどのように活用するかによって、プロジェクトに適した効率的で柔軟なワークフローを作成することができます。
プッシュイベントとプルリクエストイベント
プッシュイベントとプルリクエストイベントは、GitHub Actionsでもっとも一般的なトリガーの一つです。リポジトリにコミットがプッシュされた場合やプルリクエストが作成または更新された場合は、これらのイベントが自動的に関連するワークフローをトリガーします。
- プッシュイベント
コミットがリポジトリにプッシュされたときにトリガーされるイベントです。branches
やtags
のフィルターを使用して、特定のブランチまたはタグに対してのみワークフローを実行するように構成できます。
on:
push:
branches:
- main
- develop
- プルリクエストイベント
プルリクエストが作成、同期(更新)、または再開されたときにトリガーされるイベントです。プッシュイベントと同様に、branches
フィルターを使用して、ワークフローを実行するブランチを指定することができます。
on:
pull_request:
branches:
- main
リポジトリイベントとイシューアクションイベント
リポジトリイベントとイシューアクションイベントは、リポジトリの特定の変更に基づいてタスクを自動化するために、より詳細な制御を提供します。
- リポジトリイベント
リポジトリの作成、削除、フォーク、スターなどのアクションによってトリガーされます。
on:
create:
branches:
- feature/*
- Iイシューアクションイベント
イシューが作成、編集、削除、または状態が変更された(例:開かれたか閉じられたか)場合にトリガーされます。これらのイベントを使用して、ラベル付けやイシューのアサインなどのタスクを自動化できます。
on:
issues:
types:
- opened
- reopened
その他のイベント
GitHub Actionsには、deployment
、workflow_run
、release
、check_run
などの多数のその他のイベントがあります。これらのイベントは、さまざまなリポジトリのアクティビティに基づいてワークフローをトリガーするための追加のオプションを提供します。
on:
release:
types:
- published
利用可能な全てのイベントとその説明の詳細については、GitHub Actionsドキュメントを参照してください。
スケジュールされたワークフロー
スケジュールされたワークフローを使用すると、特定の間隔(例:毎日または毎週)でGitHub Actionsワークフローを実行できます。自動テスト、コード解析、レポート作成などのタスクに特に便利です。
スケジュールの設定
スケジュールされたワークフローを設定するには、ワークフロー構成ファイル(.github/workflows/workflow.yml
)でschedule
キーワードを使用する必要があります。 schedule
キーワードの後に、ワークフローが実行されるタイミングを定義するcron
式のリストを記述する必要があります。
on:
schedule:
- cron: '0 0 * * *'
この例では、ワークフローは毎日の0時0分に実行されるようにスケジュールされています。
cron構文の使用
cron構文は、ワークフローのスケジュールを定義するために使用されます。cron式は、分(0〜59)、時(0〜23)、月内日(1〜31)、月(1〜12)、および曜日(0〜7、0と7は日曜日を表します)を表す5つのフィールドで構成されています。
次の特殊文字をcron式で使用できます。
*
: 任意の値を表します(例えば、時のフィールドでの*
は "毎時" を意味します),
: 値のリストを指定します(例えば、月内日のフィールドでの1,15
は "1日と15日" を意味します)-
: 値の範囲を指定します(例えば、曜日のフィールドでの1-5
は "月曜日から金曜日" を意味します)/
: インターバルを指定します(例えば、時のフィールドでの*/2
は "2時間ごと" を意味します)
on:
schedule:
- cron: '30 2 * * 1-5'
この例では、ワークフローは、月曜日から金曜日の午前2時30分に実行されるようにスケジュールされています。
スケジュールされたワークフローの例
ここに、スケジュールされたワークフローのいくつかの例を示します。
- 15分ごとにワークフローを実行
on:
schedule:
- cron: '*/15 * * * *'
- 毎週月曜日の午前9時にワークフローを実行
on:
schedule:
- cron: '0 9 * * 1'
- 毎月1日と15日の午後6時にワークフローを実行
on:
schedule:
- cron: '0 18 1,15 * *'
手動ワークフロー
手動ワークフローを使用すると、イベントに頼るのではなく、必要に応じてGitHub Actionsワークフローを実行できます。これにより、特定のアクションをいつ実行するかをより細かく制御でき、ワークフローのテストやデバッグも容易になります。
workflow_dispatchイベント
手動ワークフローを作成するには、ワークフロー構成ファイル(.github/workflows/workflow.yml
)でworkflow_dispatch
イベントを使用する必要があります。このイベントを使用すると、GitHub Actionsインターフェイスからワークフローを手動でトリガーできます。
on:
workflow_dispatch:
この設定を使用すると、GitHubリポジトリの「Actions」タブを訪問し、特定のワークフローを選択し、「ワークフローを実行」ボタンをクリックすることで、ワークフローをいつでも手動でトリガーできます。
手動入力の設定
手動ワークフローに入力パラメータを設定することもできます。これにより、手動でトリガーするときにワークフローにカスタムデータを渡すことができます。入力パラメータを構成するには、ワークフロー構成ファイルのworkflow_dispatch
イベントの下にinputs
フィールドを追加します。
on:
workflow_dispatch:
inputs:
environment:
description: 'Target environment'
required: true
default: 'staging'
この例では、environment
という名前の入力パラメータがワークフローに追加されています。このパラメータには説明が含まれ、必須フラグが設定され、デフォルト値がstaging
に設定されています。入力パラメータには、github.event.inputs
コンテキストを使用して、ワークフローステップでアクセスできます。
steps:
- name: Deploy to environment
run: echo Deploying to ${{ github.event.inputs.environment }}
手動ワークフローの実行
workflow_dispatchイベント(およびオプションの入力パラメータ)を使用して手動ワークフローを構成した後は、GitHubリポジトリの「Actions」タブからトリガーできます。
- GitHubリポジトリの「Actions」タブに移動
- 使用可能なワークフローの一覧から実行するワークフローを選択
- 「ワークフローを実行」ボタンをクリック
- ワークフローの入力パラメータがある場合は、値を入力するように求められる。必要な値を提供した後、「ワークフローを実行」ボタンを再度クリックして、ワークフローをトリガー。
トリガーの組み合わせ
多くの場合、複数のイベントまたは条件に基づいてワークフローをトリガーしたい場合があります。この章では、さまざまなトリガーを組み合わせて、プロジェクト固有のニーズに合わせたより複雑なワークフローを作成する方法について説明します。
トリガーを組み合わせるには、単にワークフロー構成ファイル(.github/workflows/workflow.yml
)でon
キーワードの下にリストしてください。これにより、リストされたイベントのいずれかが発生した場合に、ワークフローがトリガーされます。
on:
push:
branches:
- main
pull_request:
branches:
- main
workflow_dispatch:
この例では、main
ブランチにpush
イベントが発生した場合、main
ブランチをターゲットとするpull request
イベントが発生した場合、またはworkflow_dispatch
イベントを使用してワークフローが手動でトリガーされた場合に、ワークフローがトリガーされます。
ここに、トリガーを組み合わせた別の例をいくつか紹介します。
- 特定のブランチに対するpushイベントと新しいリリースの作成に基づいてワークフローをトリガー
on:
push:
branches:
- main
- develop
release:
types:
- created
- issueイベント(openedまたはreopened)およびスケジュール(毎日の0時)に基づいてワークフローをトリガー
on:
issues:
types:
- opened
- reopened
schedule:
- cron: '0 0 * * *'
- 特定のブランチに対するpull requestイベントと入力パラメータを使用してワークフローをトリガー
on:
pull_request:
branches:
- main
workflow_dispatch:
inputs:
environment:
description: 'Target environment'
required: true
default: 'staging'
参考