Jira(Server版)の課題通知メールをJiraユーザーではないメールアドレスに送る方法

[Atlassian（JIRA , Confuence, Trello, Bitbucket）のTips Advent Calendar 2017](https://qiita.com/advent-calendar/2017/augj) の12/8の記事になります。

# TL;DR

Jira（Server版）の課題通知メールをJiraユーザーではないメールアドレスに送りたい

* ターゲットユーザー
    * Jiraのライセンスが潤沢に持っていない方
    * Jiraへアクセスできない環境に外部協力者がいる方
* 解決案
    * Jiraライセンスを持たないアカウントを作って解決
        * ライセンスを持ってなくてもアクティブユーザーならば通知が飛ぶ
    * 有償プラグインで解決
        * Jiraアカウントを持っていないメールアドレスに対してメールが送れる
    * Webhookを使って解決
        * 中継点を設けてなんとかする

# 背景

関係者全員がJiraのアカウントを持っていない場合、JiraのWatcherに特定のメールアドレスを入れることで情報共有を行いたい。
しかしWatcherフィールドや通知スキームのシングルユーザーにはJiraアカウントを持っている人しか設定できません。

通知スキームでシングルメールアドレスに通知する設定がありますが、これはPublicな課題のみで有効なため、PrivateでJiraを立てているときは使えません。
![jira_notification_schema_singme_mailaddress.png](https://qiita-image-store.s3.amazonaws.com/0/135041/6c9b15e9-a0b0-eb67-f4a9-3d8b4ff0c400.png)

さて、困った。

## 公式の見解

* [\[JRASERVER\-2167\] CC email address list in issues \(notify arbitrary emails\) \- Create and track feature requests for Atlassian products\.](https://jira.atlassian.com/browse/JRASERVER-2167)

このような要望は昔から本家のissueに上がっていましたが、残念ながらWon't Fix となっています。

# Jiraライセンスを持たないアカウントを作って解決

有償プラグインを入れる費用や権限を持っていない場合

## Jiraの通知スキームの仕様を理解する

通知スキームで設定できる項目で通知が送られる条件は以下のようになっています。

* シングルユーザー
    * `○` Jiraのライセンスを持ったアクティブユーザー
    * `○` **Jiraのライセンスを持っていないアクティブユーザー**
    * `×` Jiraのアカウントが非アクティブのユーザー
* グループ
    * `○` Jiraのライセンスを持ったグループ内アクティブユーザー
    * `○` **Jiraのライセンスを持っていないグループ内アクティブユーザー**
    * `×` Jiraのアカウントが非アクティブのグループ内ユーザー
* シングルメールアドレス
    * `×` Privateなissue
    * `○` anonymousアクセス可能なPublicなissue

注目すべきは、 **アカウントがアクティブでありさえすれば通知が送られる仕様** となっている点。
これを利用すれば、Jiraライセンスを消費せずに追加で通知対象を増やすことができます。

実際WatcherにはJiraライセンスを持っていないユーザーが候補としても出てきます。

## 本当に通知されるか確認

### 検証環境

Jira Software v7.5.2 (Server版)

### 事前準備

よくありそうな状況を再現するためにユーザーを作ります。

|ユーザー名|メールアドレス|Jiraライセンス|アクティブ|Watcher候補|備考|
|----|----|:----:|:----:|:----:|----|
|jira-user|xxx+jirauser＠gmail.com|○|○|○|一般のJiraユーザー|
|**non-jira-user**|xxx+nonjirauser＠gmail.com|×|○|○|通知を送りたいユーザー|
|**a-team**|xxx+ateam＠gmail.com|×|○|○|A-Teamグループに入っている通知を送りたいユーザー|
|non-active-user|xxx+nonactive＠gmail.com|×|×|×|退職者など|
|なし|xxx+nonuser＠gmail.com|×|×|×|シングルメールアドレス|


### 通知スキームに対象ユーザーを設定

![jira_notification_schema.png](https://qiita-image-store.s3.amazonaws.com/0/135041/ad15a37a-e77c-a5bf-96cc-999bee041ff3.png)

Jiraの権限を持っていないがアクティブなユーザーな `non-jira-user` と `a-team` に通知が送れていれば成功です。

### 課題を作って通知が飛ぶか確認

課題を作成すると３通メールが飛んできました。

![noticemail_jirauser.png](https://qiita-image-store.s3.amazonaws.com/0/135041/f4018749-9d37-6c55-6221-865cbbf1550e.png)
![noticemail_nonjirauser.png](https://qiita-image-store.s3.amazonaws.com/0/135041/90f31b9b-5dcb-8e18-0884-8d55da8fdb13.png)
![noticemail_ateam.png](https://qiita-image-store.s3.amazonaws.com/0/135041/5bd16c8e-2767-2f88-dd72-93faca05ec49.png)

`non-jira-user` と `a-team` にしっかり通知メールが飛んでいますね。

これを利用すれば、ライセンスを消費せず課題通知の対象を増やすことが可能になります。

### 念のため使用ライセンス数を確認

![jira-application-access.png](https://qiita-image-store.s3.amazonaws.com/0/135041/171cac90-0906-8bf9-cd3f-0be6e78f22fc.png)

ライセンスは `admin`　と `jira-user` の２つのみ消費しており、通知対象の有無はライセンスの有無に寄らないのが確認できます。

## 合わせて使いたい無償プラグイン

通知スキームだけでなくWatcherフィールドから通知対象を増やしたい場合

### [Watcher Custom Field for Jira](https://marketplace.atlassian.com/plugins/com.burningcode.jira.issue.customfields.impl.jira-watcher-field/server/overview)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/135041/91cf4d67-65b5-f535-3c90-2b085296ae96.png)

カスラムフィールドのテンプレートにWatcherが増えているので、それを使って新規Watcherフィールドを作る。


### [Component Watcher for Jira](https://marketplace.atlassian.com/plugins/com.burningcode.jira.plugin.jiracomponentwatcher/server/overview)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/135041/d549412a-e70d-868c-6d4a-ce1c9b41a873.png)

表示がバグっていて動かなかった。。

## アドオンを入れられない場合、自前でWatcherフィールドを用意

上記プラグインを使わなくても、カスタムフィールドでユーザーピッカーまたはグループピッカーを用意して、そのカスタムフィールドを通知スキームで対象として選べば擬似Watcherフィールドを作ることができます。
よくある手順なので方法は割愛。



# Jiraアカウントを持っていない外部メールアドレスに送りたい

Jiraアカウントを作るのが煩わしい方向け

## 有償プラグインを使って解決

どれもメールアドレスを指定すれば、そこに対して通知を飛ばしてくれます。
（動作は未確認なので紹介のみ）

* [Automation for Jira](https://marketplace.atlassian.com/plugins/com.codebarrel.addons.automation/cloud/overview)
* [Smart Watch for Jira](https://marketplace.atlassian.com/plugins/com.upper88.smartwatch/server/overview)
* [Bug Watcher Notifications](https://marketplace.atlassian.com/plugins/com.metainf.jira.plugin.bug-watcher/server/overview)
* [Email This Issue](https://marketplace.atlassian.com/plugins/com.metainf.jira.plugin.emailissue/server/overview)


## Webhookを使って解決

```
Webhook -> なにか -> Send to Mail
```

IFTTTでもGASでも内部でnodejsを立てたりとか適当に中継してメールを送る。
簡単に設定できる反面、Jiraのみで完結できない＆制御できないので、そこはPayloadを受ける側でしっかり制御すること。

# 最後に

最近ではメールで通知を行わずチャットに流すパターンのほうが多いと思いますが、Jira全社導入の途上でライセンスが足りていないような状況の場合、このような回避策は意外と使えたりします。

Webhookにも言えることなんですが、Jiraの権限に従っていないユーザーやメールアドレスに課題の本文まるごと通知できるというのはセキュリティの観点からみるとちょっと微妙ではあります。
使い方によっては情報漏洩にも繋がってしまうので、利用者側で通知先を増やせるようなプラグインを入れるときは一緒に危険性の認知もしていったほうがいいと思います。