【プログラミング不要】JIRAとスプレッドシートを連携しバグ集計する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102978/7a79de93-ba9e-c117-3a02-8e52ce394d73.png)


こんにちは！
さいきん人事部長に『きみ〜 高級な守護霊飼っていそうだね』といわれた @ymzk-jp です！

2020年はコロナがあったり、コロナがあったり、テスコンに出たり、コロナがあったりしましたが、今年も残るところわずか。思い残すことがないようにアドベントカレンダーでしっかり年納めしたいと思います！

本投稿は [ソフトウェアテストの小ネタ Advent Calendar 2020](https://qiita.com/advent-calendar/2020/software-testing-koneta) の10日目の記事として投稿しています。明日は @miwa719 さんの投稿です！明日もたのしみですね！（笑）


# ■ なにをするのか
本投稿ではJIRAとGoogle Spread Sheet との連携方法に加え、連携したあとバグ集計する方法をお伝えします。

本投稿を3行に要約すると以下になります。

- プログラミングをせずに
- スプレッドシートとJIRAチケットを連携し
- バグ集計する方法をお伝えします
- しかも無課金で





### 完成イメージ（取得）

![c91b94ca1f62e9a2c40b8c264e4813f1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102978/1b5427aa-f0db-7e25-c804-250bba4f776f.gif)

### 完成イメージ（集計）
※実物データが生々すぎたためお見せできず、イメージだけお伝えすることにしました:relaxed:
集計結果はEXCEL次第です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102978/b9cf9586-6068-6082-68ea-3936203110a3.png)





取得後の集計にはEXCEL力が必要です。ですがプログラミングが最大な壁であった方にとってはかなり扱いやすくなるかと思います。
本投稿を読んで、一度利用方法を覚えさせすればば、今後は工夫次第でいかようにもデータを取得・加工できます。

例えば以下のことが可能になります。

- 誰がいつ何件起票したのか分かるようになる
- 起票からクローズまでのリードタイムが取れるようになる
- バグタイプの傾向が分析できる
- 定量的、定性的に品質を測定できる
- プロジェクトごとのバグ指数が取得できる
- 作業者ごとの仕事の偏りを視覚化できる
- 定期時間ごとにチケットを自動取得・更新できる





# ■ なにが問題だったのか

アジャイル開発を行う上で、企業によってはJIRA（コンフルエンス）を利用しチケット管理されていらっしゃるかと思います。チケットを管理するうえで、スプレッドシート上にデータを展開し、管理・集計したいときがあります。具体的にはJIRAとスプレッドシートを連携させたいような場合です。


しかしこの方法についてググっても、GASや独自のScriptを利用した連携した事例ばかりが紹介されており、実現可能とはいえど気軽とまではいい難い状況でした。人によってはハードルを感じられる方もいたのではないかと思います。


本投稿では、ノン・プログラマーでも利用できる方法を紹介します。
具体的には、「Jira Cloud for Sheets」というスプレッドシートのアドオンがあるのでこちらを利用するとし、このアドオンの利用方法を詳しく紹介します！



# ■ 連携方法

## 1. アドオンの取得
まずスプレッドシートを作成し、メニューから 「アドオン」 → 「アドオンの取得」 を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102978/f032924e-99b0-05db-4e07-19712b9357e4.png)


検索フォームに 「Jira Cloud for Sheets」 を入力し、検索結果からアドオンを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102978/d60935f8-005d-fa49-6376-cdfc934ff956.png)


「インストール」 します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102978/574b694b-47cd-af04-bc4b-836af5bbc6b4.png)
これでインストールは完了しました。
一度インストールすると、次回からはインストール済みの状態から始まります。



## 2. アドオンをJIRAに接続させる

ここからはインストールしたアドオンとスプレッドシートを連携させます。
インストール後にスプレッドシートに戻り 「アドオン」 → 「Jira Cloud for Sheets」 → 「Open」 を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102978/16dba734-cee1-a2c3-a4b5-259055ce21eb.png)


右側にメニューがポップアップしますので、 「CONNECT」 を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102978/bf725060-9edb-7074-257c-c55586a3fac4.png)


Atlassianとの接続許可を求められますので、確認のうえで 「Accept」 を押します。
今回はサンプルプロジェクト「ymzk.atlassian.net」を事前に作成しています。
接続先の選択は、私の場合は自動でこちらのプロジェクトがサジェストされました。恐らくですが、現在ログイン中のAtlassianが接続先にサジェストされると思われます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102978/e6564d6d-4295-520c-4fb6-9dd31cad2b52.png)


接続が完了すると、スプレッドシートにアドオンが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102978/ebfa7114-e063-c187-5edd-b87664f58e13.png)
一度プロジェクトに接続すると、次回から接続済みの状態から始まります。
これでJIRAとスプレッドシートを連携させる作業は完了です。


ここまでを一度整理します。
1. アドオンを取得した。
2. 既存のJIRAプロジェクトとアドオンを接続した。
宣言通り、難しい作業を一切せずに接続が完了し、また料金も一切掛かっていません。



# ■ スプレッドシートにデータを反映させる
それでは接続できたので、早速データを取得してみます！

「Get issues from Jira」 を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102978/b2342736-02d7-8e85-2fa4-4885770206d7.png)


「Import type」 から　「JQL」 を選択します。
選択したら 「GET ISSUES NOW」 を押します。
※ 「GET ISSUES NOW」 を押すと全件取得が開始されます。もし大量にデータが取得されることが心配であれば、 「Max issues」 を5000件 → 10件ぐらいにまで下げておくと安心できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102978/73d2e998-b9ad-780a-e610-299f76249005.png)


スプレッドシートにデータが反映されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102978/8b269f33-805f-0933-a146-eba0258952ed.png)
この集計結果はデフォルトのクエリを実行した結果になります。もし取得されるデータを細かくカスタマイズしたい際は、後述するJQLやその他の設定でカスタマイズできます。


ちなみにこのときのJIRAのバックログの様子です。JIRA側で管理されているチケットと、取得したチケットが一致することが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102978/8646ee85-47bb-e31a-83c1-5a03a63cf7e6.png)




# ■ JQLを利用し狙ったデータを取得・加工する
本投稿ではJQLというJIRA独自の検索言語を用いて、プロジェクトのデータをスプレッドシートに反映させます。
アドオンではJQLを利用しない方法も提供されていますが、JQLの学習難易度が低いことと、柔軟性の観点からJQLを覚えたほうが後々らくできる意味で、今回はJQLを利用した方法を紹介します。
ちなみに、JQLの学習難易度は1~2時間ほど学習すれば十分に理解できる程度です。

ここからは、アドオンの使い方と概要を説明するために、いくつかの例をとって機能を紹介します。


## 取得するフィールドをカスタマイズする。
ここでは、JIRAチケットにマーキングした 「ラベル」 を集計する例を使って、機能を紹介することとします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102978/cbcd0a32-b297-b482-028b-7917bd0cdcc2.png)


まず、アドオンの 「FILEDS」 を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102978/e9347d93-868c-f343-4448-b50329562b74.png)


次に 「EDIT」 を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102978/e8920257-2a75-0fa0-a65d-e81d284b5cdc.png)


フォームに 「label」 を入力し、「ラベル」 を選択します。選択したら「SAVE」 を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102978/18098b81-185b-ad3e-1df1-b276ac214a5d.png)


保存が完了したら、「GET ISSUES NOW」 を押して、ふたたびチケットを取得します。
スプレッドシートにラベル列が自動追加され、マーキングされたラベルが、カンマ区切りで取得できていることが確認できると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102978/e5075459-21e8-2629-e6c7-ee36c2800a9f.png)
ここまでくれば、あとはEXCELの関数を駆使してラベルを集計することができます。ここからはEXCEL力が試されますが、プログラミングよりハードルを低く感じられる方も多いのではないかと思います。また、たとえコーディングができたとしても、本投稿で紹介する方法ですとサーバーを準備する必要がないなどのメリットがあります。

ちなみに、フィールドは自由に増やしたり減らしたり、順番を入れ替えたりできるので好みの形にカスタマイズしてみてください。
なお、順番を昇順・降順にしたい場合はフィールドではなくJQLの 「ORDER BY」 句を利用して整列させます。



## 定時実行でチケットを自動取得・更新する。
このアドオンの素晴らしいところに、自動取得・更新する機能が標準で備わっています。もちろん利用料は無料です。
ここからは自動取得の設定方法を紹介します。

まずは 「SCHEDULE」 を押します。
つぎに 「Refresh」 から好みの取得間隔を設定します。
この機能の唯一の弱点は、取得タイミングが固定値であるため、リアルタイムで取得・更新することができない点です。具体的には最短1時間に1回の間隔で更新されます。ただし、プロジェクトの性質によってはこれでも十分であることも多いと思われるため十分に利用できる範囲だと私は考えています。どのようなケースといえば例えば、「朝会で前日分を報告するだけなので1日1回以上動いてくれれば十分」といった状況です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102978/d120a7a6-ad89-3b86-5041-8dc1d099e97d.png)

Manually を選択した場合は、手動で「GET ISSUES NOW」を押したときのみ実行されます。いますぐに更新したいときなどに便利です。


次に「Expires in」 を設定します。
この項目は自動取得・更新機能を何ヶ月間利用するか聞かれています。たとえば画像の場合は、3ヶ月間毎時間更新し続ける設定になります。
設定を確認したら 「SAVE」 を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102978/c9afb4a9-09dd-e7e5-89dd-a12003400507.png)

設定は以上です。
非常にかんたんに自動取得・更新の設定ができました。
ちゃんと設定できたか心配であれば、しばらく時間をおいて確認してみてください！


## 実際にJQLを書いてみる。
では一つだけJQLを利用してみたいと思います。
JQLを利用して、ラベルが 「仕様検討不足」 であるチケットだけに絞り込み検索してみたいと思います。

JQLのフォームに次のクエリを入力します。
「project = "〇〇"」 にはJIRAのプロジェクト名を入力してください。
「labels = "〇〇"」 には実際に利用しているラベル名を入力してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102978/472530a3-21b0-8a00-4453-3c8c567c959a.png)


実際に取得していた様子です。
![2aff3c22660f5a84b18c3378369e2563.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102978/8eb2de88-20d6-38ed-c4eb-469f541accbe.gif)
チケットが絞り込まれました。
このような流れで、必要なチケットだけに絞り込むことができます。
検索条件を 「AND」 もしくは 「OR」 で連結させるようにクエリを作成します。


なお、プロジェクト名というのは具体的には画像の箇所のことです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102978/df3bdd59-3ea2-3a16-11fa-3b94d998a4d0.png)


ここまでを一度整理します。
- 取得するフィールドを選択する方法を紹介しました。
- チケットを取得する簡単な方法を紹介しました。
- 定時実行でチケットを自動取得・更新する方法を紹介しました。
- 実際にごく簡単なJQLを書いてチケットを絞り込み取得する方法を紹介しました。


事例を交えた機能の紹介は以上です！
ここまでがJQLを利用したチケット取得方法の基本になります。残りはこれの応用を続けるだけです。ここからは実際にプロジェクトと連携させて色々試しながらご確認いただければと思います。




# JQLでよく使うフィールドと利用例
ここからはJQLで利用するよく使うフィールドや演算子をいくつか紹介します。


- 【フィールド】

| 項目名 | 説明 | 例もしくは補足 |
|:-:|:-:|:-:|
| project | プロジェクト名を指定  | project = "マーケティングプロジェクトA" |
| labels | チケットにマーキングしたラベルを指定 | labels = "実装漏れバグ" |
| created | チケット起票日 | created >= "2020/02/01" and created <= "2020/02/29" |
| epic link | チケット設定されたエピックリンクを指定 | "epic link" = "エピックA" |
| issueType | イシュータイプを指定。バグ/タスク/ストーリー | issueType = "bug" |
| reporter | 起票者を指定 | reporter = 557058:cb349e13-aa94-4c2f-863b-d3e591a47a73 |
| issuekey | チケット管理番号 | issuekey=EX-11 |
| priority | チケット対応優先度 | priority = High |
| status | チケットステータス | status = Done |



- 【その他の項目・演算子】

| 1 | 2 | 3 |
|:-:|:-:|:-:|
| AND | 検索条件をAND結合する | (project="〇〇") AND (labels="〇〇") |
| OR | 検索条件をAND結合する | (project="〇〇") OR (labels="〇〇") |
| ORDER BY | 順序を指定。昇順はASC、降順はDESC。必ずクエリの末尾で使用する | (created <= "2020/02/29") ORDER BY created DESC |



- 補足
### reporterの取得方法
起票者や担当者を指定して取得したい際にreporterを指定します。ここではreporterのidを取得する方法を紹介します。なお、きれいな取得方法は私も分からず、もしご存知の方がいればご教授いただければ幸いです。

まず、JIRAを開きます。
ヘッダーメニューからフィルターを押して、フィルター検索画面に遷移します。
次に、「担当者」もしくは「報告者」からユーザーを指定します。
指定後に「JQLに切り替え」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102978/a3aaffe7-4090-d3bb-bcb2-72ca2a291e2d.png)

reporter番号が確認できます。
この例ではreporter id は「557058:cb349e13-aa94-4c2f-863b-d3e591a47a73」です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102978/381483df-f7c8-d10e-871a-f75876ac1954.png)



### statusの種類

statusはチケットの状態を表しています。現在進行中のチケットのなのか、完了したチケットなのか分類できます。
statusに指定できる値は決まっていて、次のいずれかが利用できます。

```text
Build Broken
Building
Closed
Done
In Progress
In Review
Open
Reopend
Resolved
To Do
```


最後にJQLで利用フィールドの公式ドキュメントをご紹介します。
https://support.atlassian.com/jira-software-cloud/docs/advanced-search-reference-jql-fields/




# まとめ
いかがでしたでしょうか。
プログラミングを一切せずにJIRAとスプレッドシートを連携させる方法を紹介しました。
言葉のとおり、利用者の工夫次第で可能性は無限大だと思います。ぜひ触ってみてください！

それでは、よき品質ライフを！
また、来年〜〜〜(^o^)／