後編：Zapierで同じことやってみた 〜チケットの連携をGASで一生懸命がんばったら外部ツールで一瞬でできた話〜

# 前回までのあらすじ
[前回](https://qiita.com/yossy_adm/items/044aac64025cbd92c2b6)は、BacklogからJIRAへの時間連携を Google Apps Script (GAS) とREST-APIを駆使して実現しました。
しかし、ある日俺は気づいてしまったわけです。

「あれ？これ似たようなこと連携ツールでできるんじゃね？」

なんか１年前調べたときは、ユーザIDの詰め替えとか、カスタムフィールドへのセットとか対応してなくて、泣く泣くGASで実装したわけです。
しかしこの業界で１年といえば、原始時代です（言い過ぎ）。再度調査してみましょう。。。

# Zapierというツールがあった
Zapierというツールがありました。(https://zapier.com/)
[automate.io](https://automate.io/)や、[IFTTT](https://ifttt.com/discover)など様々な連携ツールがありますが、Zapierがテーブルマッピング機能などもっとも今回やりたいことに必要な機能が備わっていて、かつリーズナブルでした。
GASでがんばっちゃった俺、涙目ですね。では早速、涙を拭いて設定していきましょう。

# やりたいこと
前提：Backlogに当日の作業時間が入力されていること
1. Backlogから時間を取得する
2. 対応するJIRAチケットを検索する（Backlogの課題キーをJIRAのカスタムフィールド「Backlog課題番号」に持っている前提）
3. 検索にヒットしたら、対応するJIRAのチケットに時間を記録する
4. 検索にヒットしない場合、（Backlogの課題キーをJIRAのカスタムフィールド「Backlog課題番号」にセットしてチケットを作成
。。。もう完全に前回と一緒。

# Zapierの設定
## 初期設定
ここまでは直感的なので、箇条書きにします。
- Zapierのアカウントをつくる
- Backlogのwebhookをうけとる（Backlogからチケット更新のときwebhookが発信されるようにBacklogを設定しておく）
- JIRAとZaiperを連携する（Appsから実行)

## Backlog-JIRA起票の連携(Zap)設定
### Backlogのwebhookを受け取るように設定する
1. [この手順](https://backlog.com/ja/blog/integrate-backlog-using-webhook/)にしたがって、Backlogからチケット更新のときwebhookが発信されるようにBacklogを設定しておきます。

2. 発信先のWebhookURLは、こちらの画面の「Add Trigger」から「Catch Hook」を設定して生成します。
![名称未設定２.png](https://qiita-image-store.s3.amazonaws.com/0/321016/ed28198f-d134-afe3-ff07-241f249c11a2.png)

3. そしてそのURLをBacklogの設定画面から追加します。
<img width="592" alt="スクリーンショット 2018-12-04 18.32.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/321016/47e95633-507d-6bc2-67db-116f75df160c.png">

### Zapierがwebhookを受け取ったら、JIRAのチケットを起票・更新するように設定する

#### webhookで受け取ったデータをJIRA用に読み替える
BacklogのユーザIDと、JIRAのユーザIDは異なるので、そのままJIRAを見に行ってもエラーになります。当然、JIRAのIDに変換してあげる必要があります。
[前回](https://qiita.com/yossy_adm/items/044aac64025cbd92c2b6#processjirags) は、ProcessJIRA#get_jira_userid(issue) で、配列を使って変換してましたが、なんとZapierで簡単に設定できちゃいます。

##### ZapierでFormatterの設定
「Action」から、Utilituies -> Formatter と選択します。
<img width="1278" alt="スクリーンショット 2018-12-04 18.45.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/321016/a1929a96-40a7-1dba-76ed-8eba37e8259a.png">

##### 変換用のテーブルを用意
Transform:「Lookup Table」を選択
Lookup Key:受け取ったwebhookのどの項目を変換のインプットにするか設定します。ここではBacklogID（Content Asssignee Backlogid）を選びましょう。
Lookup Table：これが変換用の表です。左に変換前の値(Backlog user ID)、右に変換後の値(JIRA user ID)を設定しましょう。
<img width="1236" alt="スクリーンショット 2018-12-04 18.47.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/321016/72796b13-db6b-20f2-a7ff-25cb9490c340.png">

#### JIRAの起票設定
JIRAに起票するとき、webhookから受け取ったどの項目を連携するのか設定します。
![スクリーンショット 2018-12-04 18.58.59.png](https://qiita-image-store.s3.amazonaws.com/0/321016/1a04298b-76ab-d544-dcdd-c3d6cfb8cae3.png)

このとき「時間の記録」という項目は変換無しで渡しているので、Step1のwebhookから値を設定していますが、
担当者の部分は、Use a Custom Value->Step2で変換したあとの値を使っていることに注目してください。

その後は、Continueを押してZapを有効にすれば設定完了です。

# まとめ
GASを使ったら、JIRA Rest APIの癖も相まって一週間以上かかったわけですが、Zapierを使ったら１時間でできてしまいました。
さらにZapierは外部のサーバーにあるため、社内FWの制約もうけずwebhookを受け取ることができます。
前回の方法だといちいちメンバーに連携ボタンを押してもらわなければいけなかったので、利便性大幅向上ですね。

現在は、Backlogで担当者が更新されたら、JIRA側の担当者も更新するZapを使って便利に運用しています。
英語版しかないので気が引けてしまいますが、使い方は直感的なのでそれほど苦労はなかったです。
工夫次第で様々な使い方が広がるZapierは一押しのサービスです！

~~実装開始する前に、楽に実現できる方法がないか、事前調査は抜かりなくやりましょう。。手段の目的化、ダメ、絶対。~~