workflow_dispatch の使い方、使い所


# はじめに

こちらの記事は [GitHub Actions Advent Calendar 2021](https://qiita.com/advent-calendar/2021/github-actions)の18日目の記事となります。他の皆様の投稿もぜひご覧ください！

今回は GitHub Actions のワークフローをトリガーするイベントの一つである、 `workflow_dispatch` についてまとめていきたいと思います。こちらのイベントは[昨年の６月に使えるようになった](https://github.blog/changelog/2020-07-06-github-actions-manual-triggers-with-workflow_dispatch/)イベントです。実際に使ってみるととても便利です。使えるようになってからだいぶ時間は経っていますが、使い方だったり、どういう時に使えるのか、といったことを紹介しようと思います。

# workflow_dispatch イベントとは
- ワークフローを手動で実行できるイベント
- 実行ブランチを選択できるUIがデフォルトで追加される
- 実行時のパラメータは独自の項目についてもUIで指定できる

参考: https://docs.github.com/ja/actions/learn-github-actions/events-that-trigger-workflows#workflow_dispatch

#使い方

### 基本的な使い方
`on` 構文に `workflow_dispatch` を指定するだけです。

```yml
name: workflow_dispatch sample 1

on:
  workflow_dispatch:

jobs:
  printLog:
    runs-on: ubuntu-latest
    
    steps:
    - name: print log
      run: echo "Hello!"
```

デフォルトブランチにマージします。GitHub上で確認すると、`Actions`　タブからワークフローにアクセスすることができ、手動実行できるようになっています。また、ワークフローを実行するブランチを選択できるようにもなっています。
<img width="500" alt="workflow_dispatch sample 1" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45528/0bdc8633-185d-3fe2-f27b-f70f302de942.png">

`Run workflow` ボタンから実行してみます。
<img width="500" alt="run workflow_dispatch sample 1" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45528/c4f2fdfe-de5f-3cd3-ae2e-5c390121ac0e.png">
無事実行できました。

###実行時にデータを付与したい
今度は、ブランチを選択できるだけではなく、挨拶する人の名前を実行時に指定できるようにします。`workflow_dispatch`　に続けて `inputs` を定義します。

```yml
name: workflow_dispatch sample 2

on:
  workflow_dispatch:
    inputs:
      name:
        description: 'Name'
        required: true

jobs:
  printLog:
    runs-on: ubuntu-latest
    
    steps:
    - name: print log
      run: echo "Hello! ${{ github.event.inputs.name }}"
```

参考: https://docs.github.com/ja/actions/learn-github-actions/events-that-trigger-workflows#example-workflow-configuration

再びデフォルトブランチにマージし、GitHub上から確認してみます。
<img width="500" alt="run workflow_dispatch sample 1" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45528/23544c51-34ea-3ee8-bc3d-df86dfeaf042.png">
今度はブランチだけでなく、`Name`も入力できるようになっています。`Chihiro`と入力し、実行してみます。
<img width="500" alt="run workflow_dispatch sample 1" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45528/6b0f4c36-908e-f040-58e2-de81c883aff2.png">
入力した名前がちゃんと参照されています。

###注意
ワークフローを手動で実行するためには、ワークフロー(ymlファイル)がデフォルトブランチに含まれていないといけません。

>To trigger the workflow_dispatch event, your workflow must be in the default branch. 

参考: https://docs.github.com/ja/actions/managing-workflow-runs/manually-running-a-workflow#configuring-a-workflow-to-run-manually

#使い所

特におすすめなのは、普段スケジュール実行(`schedule`)しているワークフローに対して`workflow_dispatch`もつけておくことです。イベントは複数指定することができるため、`schedule`と`workflow_dispatch`の両方を指定することが可能です。

スケジュール実行しているワークフローが失敗した時に、対応をするために試行錯誤しながら何度かワークフローを実行することになると思います。スケジュール実行のままだとワークフローを任意のタイミングで実行できないので、今まではその都度`push`などに書き換えていました。

`workflow_dispatch`をつけてあるとイベント部分を書き換えなくて済みます。`push`に書き換えて作業をしても良いのですが、あとで戻し忘れたりすることもあったりするので`workflow_dispatch`をつけておくに越したことはないかなという感じです。

大したことないことのように見えるかもですが、実際に`workflow_dispatch`を指定してみるとめちゃくちゃ便利さを感じています。


#最後に
GitHub Actions、楽しい！
引き続きいろいろ使っていこうと思います。