Jira Automationで期限切れの課題をSlackに通知する

[Jira Automation](https://www.atlassian.com/ja/software/jira/guides/expand-jira/automation)が非常に便利だったので紹介
AutomationはJira運用における効率化、自動化をルールとして定義して利用できる拡張機能です。

かつてServer製品であれば[Automation for Jira](https://marketplace.atlassian.com/apps/1215460/automation-for-jira?tab=overview&hosting=datacenter)としてMarketplaceから有償で購入できるアドオンでした。
当時は使ってみたいと思いながらも手が出なかったのですが、Jira Cloudにバンドルされて気軽に利用できるようになりました（やっと自社のJiraをCoudに移行出来た。。）

## 何を自動化しようか
今回は手始めに期限切れの課題をSlackに通知してみます。
フィルターの[サブスクリプション機能](https://qiita.com/Yosuke_Sakaue/items/98c8ec5c43f8459914ab)でメール配信も可能ですが、メッセージや通知関連はSlackに集約したいという気持ちがあるのでこちらをテーマにします。

## 前提
ここに合計5件の課題がありますが、内2件は既に設定した期日を迎えています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206219/0c31a8b3-8d30-74cd-a5ee-3b9a8610176c.png)

## 自動化の設定
各Jiraのプロジェクト設定から「自動化」のメニューへたどり着きます。
※プロジェクト設定はプロジェクト管理者しか参照できないことが多いので、見れない場合は最寄りの管理者っぽい人に聞いてみてください。

「ルールを作成」から実際のルールを作成していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206219/b88cf523-3426-b159-d2ce-48a9cac6d0cd.png)

Automationのルールは大きく分けて「トリガー」「条件」「アクション」に分けられます。
今回のルールでは***毎日朝9時に***（トリガー）、***未完了で期日が切れている課題を***（条件）***Slackに通知する***(アクション)という構成になります。

### トリガーの設定
「スケジュール時」を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206219/35c2126a-5c37-dbb6-aac7-3c4bc9c28c5a.png)

「JQL 検索を実行し、クエリ内の各課題に対してアクションを実行します。」にチェックを入れることでこのトリガーはJQLが記述でき、条件である***未完了で期日が切れている課題***を抽出することができます。

```sql
duedate < now() AND status not in (Done)
```

### アクションの設定
トリガーが保存出来たら、新しいアクションを設定しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206219/16d7d992-b7cd-5884-cb07-b5499bced671.png)

今回は通知カテゴリの「Slack メッセージを送信」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206219/19fa1550-8bcc-51e1-235d-c876d1d80576.png)

Webhook URLはSlackアプリを作成して発行する必要がありますがここでは省略します。
こちらのブログが参考になります。
https://cly7796.net/blog/other/send-a-message-to-slack-using-the-incoming-webhook/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206219/4eb19cab-cfdf-4a11-f4ac-9c5f99f94c27.png)

メッセージ本文にはAutomationの[スマートバリュー](https://support.atlassian.com/ja/jira-software-cloud/docs/smart-values-general/)という構文が使えます。
対象の課題データにアクセスができる便利な構文となっています。
例えば、`{{issue.duedate}}`で課題の期日を返すことができます。

### アクションの公開
アクションは名前を付けて公開しない限り動きません。
また、公開した後も右上のトグルから有効、無効をいつでも切り替えることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206219/136296b1-d491-0a49-73c0-acb66af5a84a.png)

### 結果の確認
Slackにしっかりとメッセージが届きました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206219/ef756d9f-f627-4eac-0566-1d3c7d650813.png)

## おまけ
ルール内の監査ログのセクションでは実行の履歴や、エラーを発生した際のログが確認できるのでトライ&エラーの際に捗ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206219/9e9f8351-f2bf-9d63-f5e0-a0346d611ded.png)

## さいごに
今回のスケジュールでの通知以外にも、Jiraの様々なイベントをトリガーできたり、条件なども細かく設定できるのでJiraの可能性が広がるとても魅力的な機能だと感じました。
外部へのWebhook発出もできるので他サービスとの連携ができるのもポイントですね。

今後はDevOpsの文脈でGithubとの連携トリガーや、アジャイル開発、ITMS（Jira Service management）関連のトリガー、アクションなど触ってみたいものが多いので、便利な使い方があったらシェアさせていただきたいと思います。

参考：
一般的な使用例：https://www.atlassian.com/ja/software/jira/guides/expand-jira/automation-use-cases