JQLを使って試してみたこと

:writing_hand_tone2:この記事は[スタンバイ Advent Calendar 2021](https://qiita.com/advent-calendar/2021/stanby)の19日目の記事です。

# 初めに

これまでお客様からの問い合わせをslack上でやりとりをしていたのだが、
過去ログを探す時にslackの検索機能がファジーすぎて逆に使いづらくなってきた。
そこで検索性の高いJIRAに移行してみることに・・・。

今回はJIRAの検索性の高さの最たるものである、
JQLのこんな使い方もあるんじゃないかというのを紹介したいと思います。

# JQLとは

> 「Jira Query Language」の略で、Jiraで特定の課題を検索するための、強力で柔軟な方法です。

https://www.atlassian.com/ja/blog/jql-for-beginners-1#:~:text=%E3%81%9D%E3%82%82%E3%81%9D%E3%82%82%E3%80%8CJQL%E3%80%8D%E3%81%A8%E3%81%AF,%E3%81%A7%E6%9F%94%E8%BB%9F%E3%81%AA%E6%96%B9%E6%B3%95%E3%81%A7%E3%81%99%E3%80%82

つまりJIRAで課題管理をしているのであれば、簡単に過去のチケットを見つけることができる。
またConfluenceなどのAtlassian製品を使っていればJQLを活用してより効率的にナレッジを集約できる。
JQLの書き方に関しては公式以上に詳しいものはないので、是非そちらもご確認ください。

![jql_sample02e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164026/e4311737-b3af-06bb-c150-8a34ea4a88bd.png)

# JQLの活用方法

## JIRAチケットに含まれる情報

JIRAチケットには下記のような情報が含まれています。
特に「ラベル」「コメント」はある程度自由に設定できるので作業者の権限でも活用できる。

![jql_sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164026/0a33f5fc-13e7-be15-7aa1-896dbdbd982f.png)

:::note warn
プロジェクトの設定にもよるので本記事内で挙げた要素(フィールド)が必ず存在するわけではありません。
:::

|  |各項目の日本語表示|JQLで利用するときには・・・|
|:-:|:-:|:-:|
|1   |プロジェクト   |project   |
|2   |要約   |summary   |
|3   |説明   |description   |
|4   |作成日   |created, createdDate   |
|5   |更新日   |updated, updatedDate   |
|6   |ステータス   |status   |
|7   |ラベル   |labels   |
|8   |コメント   |comment   |
|9   |担当者   |assignee   |
|10   |報告者   |reporter   |

## JQLの基本的な書き方

### 1. プロジェクト名を指定する

```sql:プロジェクトを指定
project = HOGE
```

### 2. 絞り込みたい条件を追加する

**フィルタリング内容**
a. 項目名XがXXX
b. 項目名Yの数値が数値Yより小さい
c. 項目名ZがZZZと一致しない

上の3つの条件すべてに一致させる場合は下記のように書くことができる。

```sql:全て一致する場合
project = HOGE AND 項目名X = XXX AND 項目名Y < 数値Y AND 項目名Z != ZZZ
```

上の3つの条件どれかに当てはまる場合は下記のように書くことができる。

```sql:どれかに当てはまる場合
project = HOGE OR 項目名X = XXX OR 項目名Y < 数値Y OR 項目名Z != ZZZ
```

https://www.atlassian.com/ja/software/jira/guides/expand-jira/jql#jql-syntax



## 例えば・・・

### コメント内容で絞り込む

特定のキーワード『@営業チーム』がある
※ 擬似的なグループメンションのような感じの使い方。

#### ■ コメント

```txt:コメント内容
@営業チーム
お疲れ様です。
先日お問い合わせいただいた件ですが、
~中略~
ということなのでご連絡お願い致します。
```

#### ■ JQL

先月の営業チームへの連絡件数を知りたい

```sql:JQL
project = HOGE AND created >= startOfMonth("-1") AND created < startOfMonth() AND comment ~ 営業チーム
```

### ラベルで絞り込む

問い合わせの内容に応じてラベルを付与してある。

#### ■ ラベル

![jql_sample03e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164026/2db6529a-ab58-c231-0ba1-bfacb27fc795.png)

```text:ラベルの内容
掲載内容問い合わせ, 掲載終了依頼
```

#### ■ JQL

```sql:JQL
project = HOGE AND labels = 掲載終了依頼
```

## さらに・・・

ConfluenceとJIRAの両方を利用しているのであれば、ConfluenceのマクロにJIRAチケットの件数を集計するものがあります。このマクロを活用すれば簡単にプロジェクトの状況を集計して、二次元テーブル・円・折線などのスタイルでグラフ化することができます。

https://ja.confluence.atlassian.com/confcloud/use-jira-and-confluence-together-724765436.html

# 最後に

今回は非エンジニアっぽい使い方を想定しましたが、実際にはエンジニア・非エンジニアの両方が使うシチュエーションが多いのではないでしょうか。
実際のJQLを色々書きましたが、詳細検索フォームのサジェストが優秀なのでそれっぽいのを選んでいけば書けるので初心者でも心配はいらないかと思います。
関数を使い始めると公式リファレンスを読まないと難しい部分が出てきます・・・。
非エンジニアはJQLを使う機会は少ないと思いますが、コメントやラベルの使い方を工夫すればエンジニアが喜ぶ使い方ができるかもしれません。

（ユーザーとして改善してほしい点を挙げるとすれば、日本語が文字化けするマクロがある点でしょうか。使い方を工夫すれば回避できるのであまり気にしていませんが・・・。）

# おまけ

> Jiraは、外部からJiraの課題データにアクセスするためのREST APIを備えています。これにより、異なる課題トラッカーからデータを引き出して処理したり、課題のコメントだけ抽出するなど、Jiraのデータ活用の幅が広がります。このREST APIのコマンド内でJQLを使用できます。例えば、プロジェクト「Pipeline」で重複している課題を、REST APIで呼び出したい場合、MacかLinuxワークステーションのターミナル（Windowsの場合はcurl）で下記コマンドを入力します。

*『なんだってー!!』*

https://www.atlassian.com/ja/blog/jql-for-beginners-3