JQL 最適化の推奨事項

アトラシアンは Jira 用語の更新を行っており、「課題」から「作業項目」へ、「プロジェクト」から「スペース」へと移行しています。

現在、こうした変更をロールアウトしているため、新しい用語を使用する一部の JQL エントリがまだ機能しない場合があります。この問題が発生した場合は、代わりに古い用語の利用をお試しください。

There are no changes to existing JQL queries.

同じようには作成されない JQL クエリがあります。JQL は最も効率的な方法であるかどうかに関係なく、指示したとおりに実行する厳密なロジックを使用します。これらの非効率性が重なると、ボード、プラン、またはスペース上でパフォーマンスの問題が発生する可能性があります。

このページでは、効率的な JQL クエリを記述するための一般的なガイドラインについて説明します。

クエリの範囲を制限する

JQL クエリの作成時は、特定のスペースまたはボードを含めるか除外して作業項目を検索する場所を Jira で指定します。

クエリで検索する作業項目の数が少なくなると、結果の読み込みが速くなります。

JQL フィルターによって、自分に割り当てられたすべての作業を表示するとします。ただし、あなたが取り組んでいるスペースは組織全体で 2 つだけです。

このクエリは次のように機能します。

assignee is currentUser()

しかし、次のほうが良いでしょう。

space in (The Big Cheese, Project Kanban) and assignee is currentUser()

これには、次のような理由があります。

最初のクエリでは、割り当てられている作業項目を探すためにサイトにあるすべての作業項目が検索されます。2 番目のクエリは、自分のスペースに絞り込まれています。サイトの作業項目が 10,000 件ある場合、Jira ではそのスペース内の 500 件の作業項目を調べて、残りの 9,500 件を無視できます。結果は同じでも、絞り込む作業項目が少ないほどクエリの実行速度を速くできます。

また、他のフィールドによって、日付や最終表示日時など、JQL クエリの範囲を絞り込めます。

メイン句には OR を、サブ句には AND を使用する

Jira がクエリを解釈する方法によって一見論理的な文字列が複数の冗長な検索に分割されて、実行に時間がかかる場合があります。重複検索の一般的な原因は、メイン句で AND を使用することです。AND は主にサブ句で使用して、OR をメイン句用に取っておくことをお勧めします。つまり、簡単に言うと、OR 句は括弧の外側に、AND 句は内側に入れることをお勧めします。

JQL クエリによって、プロジェクト PMO の作業項目または担当者 A に割り当てられた作業項目と、プロジェクト TIS の作業項目または担当者 B に割り当てられた作業項目のみを表示するとします。

このクエリは次のように機能します。

(space = TIS OR assignee = A) AND (space = PMO OR assignee = B)

しかし、次のほうが良いでしょう。

space in (TIS, PMO) OR assignee in (A, B)

これには、次のような理由があります。

これは、JQL に AND 句が含まれている際に、Jira ではサブ句のどちらかではなく両方に一致する作業項目のみを返して、最初のクエリが次のように解釈されるためです。

  • in Project TIS AND in Project PMO

  • assigned to Assignee B AND in Project TIS

  • assigned to Assignee A AND in Project PMO

  • assigned to Assignee A AND assigned to Assignee B

Jira Software Cloud における JQL によるクエリの解釈方法に関する詳細



あとの 2 つの検索では結果は返されず、Jira では検索が引き続き実行されます。このような不要な検索によって、JQL クエリのパフォーマンスが低下する可能性があります。2 番目のクエリでは冗長な検索が除外されるため、大規模なデータ セットの実行時間に大きく影響する可能性があります。

繰り返しになりますが、特定のスペースやボードを含めて、クエリで不必要な作業項目が検索されないようにしてください。

問題を起こすフィールドや関数を避ける

一部のフィールドは、その複雑さのために低速になることがわかっています。たとえば、label フィールドは複数のデータ セットを参照する必要があるため、検索で使用するには複雑なフィールドです。ただし、IssueKey フィールドによって同じ結果を迅速に取得できます。

また、特定の関数が問題になる可能性があります。たとえば、portfolioChildIssuesOf 関数の使用には、データベースを介したいくつかの再帰が必要です。現状として、これには推奨できる回避策はありません。

JQL クエリは句ごとに構築する

ここで説明する 2 つのフィールドと関数は、すべてを網羅するリストではありません。クエリの遅延の原因となっているフィールドや関数を特定するには、すべてのフィールドと関数を一度に記述するのではなく句ごとに構築します。句に関数を徐々に追加してから検索を実行することで最も遅いフィールドを特定できるため、そのようなフィールドを軽減または回避できます。

さらにヘルプが必要ですか?

アトラシアン コミュニティをご利用ください。