JIRA AutomationのQuick Guide

[KINTO Technologies Advent Calendar 2021 - Qiita](https://qiita.com/advent-calendar/2021/kinto-technologies) の18日目の記事です。

# JIRAのAutomationで、プロジェクト運営を自動化する

プロジェクト管理ツールとしてJIRAを使っているところは多いと思います。
今時のJIRAには[Automation](https://www.atlassian.com/ja/software/jira/features/automation)という自動化ツールが入っており、これを使うと様々な自動化をJIRAだけで実現できます。
この記事はAutomationをとりあえず使ってみるためのQuick Guideです。
Automationは過去にProject Automationとも呼ばれていました。この記事内でも表記揺れがあります。
この記事を離れて、別の記事を探す時には、こちらの名前でも検索してみると情報があつまります。

## Automationの基本

AutomationはTrigger, Condition, Action, Branchという4つのComponentを使って、Ruleと呼ばれる一連の流れを定義する、ある種のノーコードプログラミング環境と言えます。
それぞれのComponentの概要は次のとおりです。

|Component|説明|
|---|---|
|Trigger|Ruleが適用されるイベント条件を指定する。一つのRuleの先頭に一つだけ指定できる|
|Condition|Actionを適用する前条件を指定する。基本的に一つのConditionで、一つの条件を指定する。Conditionのあとに別のConditionをつなげて、ANDで条件を結合できる。`If block` という特別なCondition以外はelse節は作られない。|
|Action|なんらかの変更をシステムに加える。Issueの変更だけでなく、通知機能の起動もできる。 `Send web request` というActionもあるので、他のサービスを叩くこともできる。|
|Branch|一般的なプログラミング言語でいうと、別ブロックを作ってスコープを切り替える機能。操作対象となるissueを親issueに切り替えるときなどに使う。Branchの入れ子はできない。|

## 基本操作説明

プログラミングツールとしての機能は少ないので、操作自体は難しくありませんが、簡単に操作説明を書いておきます。

### 1 Rule作成画面を開く。

[Project settings] -> [Automation] -> [Create Rule]の順でRule作成画面が開きます。
画面上の位置について、一応スクリーンショットを載せますが、これは私が使っているバージョンでの場合です。バージョンや管理者の設定によっては、位置が変わっていたり、ラベルがAutomationではなく、Project Automationであるかもしれません。

Project settings
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17916/af595f3c-f468-f6a3-3e6c-2118afdb46d4.png" width=300 border="1">

Automation
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17916/116069ad-9520-70d8-5dbe-374f1fe36398.png" width=300>

Create rule

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17916/528e648b-03cc-38e3-e692-5c5be7aee567.png">



### 2 Triggerを選ぶ

まずは右の欄からTriggerを選びます。最初のComponentは常にTriggerです。
Issueを対象としたものが多いですが、git操作に連動したものもあります。
`Incoming webhook` というWeb hookエンドポイントを生やして、そこへのリクエストを起点とするものもあります。認証なしで叩けるようなので使用には注意が必要そうですが、これを使えば他のツールとの連動もできるでしょう。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17916/df248d9a-0fa8-1d93-2d3b-46658f488cc5.png" width=600>

選択したら、[Save]ボタンを押します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17916/efa6e787-efdb-dcd5-b32a-b64de343ecef.png" width=600>

Triggerが設定されると、他のComponentを選べるようになります。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17916/8f53ec32-7759-3ebe-25e0-22da53166f56.png" width="600">


### 3 Conditionを選ぶ

Conditionを選ぶと次のような画面になります。ここでは例のためにConditionを選びましたが、もちろん他のComponentを選んでも構いません。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17916/8fd95a23-f2eb-70a2-82b0-0b52115be821.png" width="600">

例なのでどれを選んでも良いのですが、ここでは `Issue fields conditon` を選びます。
するとComponentの設定欄が出るので、適当に入力して、[Save]ボタンを押します。
もちろん別のComponentでは設定できる項目が変わります。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17916/05f9ebd0-a1ec-9971-929c-6d293e65ce95.png" width="600">


### 4 Branchを選ぶ

やはり例のために、次はBranchを選びます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17916/87e44928-88f0-c8cd-c05a-d8623c2262e9.png" width="600">

`Branch rule / related issues` を選び、[Save]ボタンを押すと、分岐が発生します。
ここでは `Type of related issues` に `Sub-tasks` を選んだので、右側に新たに作られたレーンでは、Triggerで対象となったIssueのサブタスクがConditionやActionの対象となります。
元のIssueに対する操作は左側のレーンで引き続き行えます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17916/9302789f-0416-a399-e1aa-eeb57a3df56e.png" width="600">


### 5 Actionを選ぶ

最後にActionを設定します。先ほどBranchを置いたので、Componentの追加先が二つになっています。
まずはTriggerで対象になったレーンにアクションを追加するため、左のレーンの[Add Component]をクリックします。
すると次のようになります。期待した通りにならない場合、ゴミ箱アイコンをクリックすることで、現在追加しようとしているNew Componentを削除できます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17916/a9a5bf5a-5b94-1b1c-d6cf-974175222e56.png" width="600">


そこからNew Actionを選びます。例では `Comment on issue` を選びました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17916/ae8b1824-26e6-96d5-691b-56f860eca867.png" width="600">


そして[Save]ボタンを押すと、次のような画面になります。

画面に出ている通り、ここまででもRuleは保存できますが、Branchのもう一方のレーンにもActionを設定します。そうしないとエラーとなります。
右のレーンの [Add Component] を押して、Actionを設定しましょう。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17916/ccaf78dc-056f-a08d-8e1f-0cc23b374f06.png" width="600">


こちらも `Comment on issue` を選びました。
Rule定義が次のようになっているはずです。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17916/745eae04-3a71-b00d-391c-91ad34cbfc47.png" width="200">


### 6 Ruleの有効化

Ruleを保存して有効にするために、Sampleという名前をつけて、[Turn it on]ボタンを押してみましょう。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17916/a1ca406c-ddaa-3339-68a0-80ebfe6a0551.png" width="600">


次のような画面が出た場合、まだRuleは保存されていません。
この画面で、Ruleが失敗した時にメールを送るかどうかなどの設定ができます。
[Publish rule]を押すことで、Ruleが保存されてRule一覧が表示されます。

この設定を再度行いたい場合、一覧から対象となるRuleを開いて、[Rule details]のリンクを押してください。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17916/26f5ad04-f8ba-8b46-3d9b-f77baccc0b35.png" width="300">



## 実例

ここからは簡単なRuleの実例を紹介します。

### Issue Typeごとに `Description` のテンプレートを設定する

JIRAに限らず、チケット管理をしはじめると、記述の粒度を揃えるために、テンプレートが欲しくなると思います。 Automationでこれが実現できます。
テンプレートの設定にはActionの `Edit Issue` で編集対象となるフィールドとして `Description` を指定します。テンプレートの文章にはConfluenceのwiki記法が使えます。

#### Rule定義

`Issue Type` が `Type` のチケットが作られたときに、 `Description` に自動的にテンプレートとなる文字列を設定するルールは次のとおりです。Conditionのパラメータを変更すると、他の `Issue Type` に対しても適用できます。`Issue Type` 毎にRuleを作成すれば、それぞれ別のテンプレートを設定することができます。

||Component|設定|
|---|---|---|
|-|全体像|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17916/8b58bfe2-5b25-f720-0cd8-e20df0e618b9.png" width="300">|
|1|Trigger|Issue Created|
|2|Condition|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17916/830afc99-46dc-e9cb-e3fe-7dc21e06b0ef.png" width="300">|
|3|Action|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17916/58524d1f-c429-a260-58a6-3a910dac2229.png" width="300">|

#### 注意点: Create ボタンで開いた時点のダイアログには適用されない

Triggerをもう一度見直してみましょう。
*Issue Created* とありますね。つまりこのルールは最初の保存時点で適用されます。
Backlog画面などで、Subjectだけを入れて行が増えたとき、そのIssueは保存されているのですが、CreateボタンからのIssue作成ダイアログが開いた時点では、まだIssueは作成されていないので、このルールは適用されずテンプレートが設定されません。

これを解決するPluginはいくつかあるようなので、JIRAの管理者と相談して入れてもらいましょう。

だったら最初からプラグインを使えばいいのでは？とも思われるかもしれません。ですが、Automationの利点は、JIRA単体で、かつプロジェクト単位で利用を開始できることです。とりあえずAutomationでテンプレートを導入してみて、プロジェクト運営への効果を検証して、より強力なテンプレート機能が必要であれば、プラグインの導入を検討してみるというステップが踏めます。

[Atlassian Marketplaceへのリンク](https://marketplace.atlassian.com/search?product=jira&query=templates)

### Bugチケットを均等に分配する

Bugチケットが誰かに集中していませんか？そんなときの便利機能が `Assign issue` にはあります。

[ドキュメントによると](https://support.atlassian.com/cloud-automation/docs/jira-automation-actions/#Automationactions-AssignIssue) `Assign issue` の `Assign the issue to` に `A user in a defined list` を設定すると、指定された複数のユーザーから自動的にアサインしてくれます。自動アサインのアルゴリズムは、`Balanced Workload`, `Random`, `Round-Robin` から選べます。
設定する時は、チームで合意をとりましょう。

#### Rule定義

||Component|設定|
|---|---|---|
|-|全体像|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17916/da6f5746-bd4f-77d8-da14-70544939499f.png" width="300">|
|1|Trigger|Issue Created|
|2|Condition|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17916/d92d5d17-204f-591e-4a08-9d0187a683fe.png" width="300">|
|3|Action|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17916/a67d5af1-7e16-caa4-7889-2b714ec30b60.png" width="300">|


## あとがき

プロジェクト運営ルールを決めるにあたって、「個人が気をつける」領域をできるだけ少なくするのに、Automationは役立ちます。
また限定的とは言え、ある種のコーディングによって実現されるため、ルールの明示化、言語化にもつながり、透明性のあるプロジェクト運営に役立てられると思います。

---
# おしらせ

KINTO Technologiesでは、トヨタ車のサブスク「KINTO」等の企画/開発を行っており、エンジニアを募集中です。
[KINTO Technologies コーポレートサイト](https://www.kinto-technologies.com/)

加えて、私が出向して参加しているWoven Cityプロジェクトでも[絶賛募集中](https://jobs.lever.co/woven-planet/82f8786d-be89-46a0-a826-9a7a354f9cd9)です！