atlassian-cli はコミュニティによる独立したオープンソースプロジェクトです。Atlassian と提携・関連しておらず、Atlassian による承認、推奨、後援のいずれも受けておらず、Atlassian が提供する公式 CLI(acli)でもありません。製品名は互換性を示す目的でのみ使用しています。

JQL クエリとは、フィールドと値を照合して課題を探す Jira Query Language の式です。どのクエリも形は同じで、フィールド演算子の 3 つからなります。たとえば status = Done です。句は ANDORNOT でつなぎ、ORDER BY で並べ替えます。このページは純粋なリファレンスです。必要な演算子、キーワード、関数、フィールドを 1 か所にまとめ、Jira の検索バーやコマンドラインの atlassian-cli にそのまま貼り付けられる例を添えています。

ブックマークしておくと便利です。チュートリアルや意見で水増ししてはいません。ターミナルからの検索を作業別に追いたい場合は、末尾にリンクした関連記事をご覧ください。~ の働きや closedSprints() の挙動を思い出したいだけなら、このまま読み進めてください。

JQL クエリ構文のあらまし

JQL クエリは、論理演算子でつないだ 1 つ以上のと、任意で続く並べ替えからなります。SQL ではありません。SELECTFROM も結合もなく、対象は常に課題です。

# field    operator   value
project    =          DEV

# two clauses joined with AND, then sorted
project = DEV AND status = "In Progress" ORDER BY priority DESC

次のいくつかのルールを守るだけで、デバッグの手間のほとんどが減ります。

演算子

演算子はフィールドと値を比較します。比較演算子はほとんどのフィールドで使えます。テキスト演算子の ~ は自由記述のフィールドでのみ使えます。履歴演算子(WASCHANGED)は、フィールドが過去にどうなっていたかを検索します。

演算子意味
=値が完全に一致するstatus = Done
!=等しくないstatus != Done
> >= < <=範囲の比較(日付、数値)created >= -7d
~CONTAINS(テキスト検索)summary ~ "login"
!~含まないsummary !~ "wip"
INリスト内のいずれかの値に一致status IN (Open, Reopened)
NOT INリスト内のどの値にも一致しないpriority NOT IN (Low, Lowest)
ISEMPTY / NULL と組み合わせて使うassignee IS EMPTY
IS NOT値があるfixVersion IS NOT EMPTY
WAS過去のいずれかの時点でその値だったstatus WAS "In Progress"
WAS IN過去にリスト内のいずれかの値だったstatus WAS IN (Open, Reopened)
CHANGEDフィールドが変更された(AFTER/BY を追加可)status CHANGED AFTER -1w

最もよくある間違いは、テキストのフィールドに = を使ってしまうことです。summary = "login" は、要約がちょうど login という語だけの課題にしか一致しません。login を含む要約をすべて探すには summary ~ "login" を使います。履歴演算子(WASWAS INCHANGED)は、AFTERBEFOREONDURINGBYFROMTO の述語でさらに絞り込めます。

キーワードと論理演算子

キーワードは句をつなぎ、並び順を制御します。あらゆる JQL クエリをつなぐ結合組織のような存在です。

キーワード用途
ANDすべての句が一致する必要があるproject = DEV AND status = Open
ORいずれかの句が一致すればよいpriority = High OR priority = Highest
NOT句を否定するNOT status = Done
EMPTYフィールドに値がないfixVersion IS EMPTY
NULLEMPTY のエイリアスresolution = NULL
ORDER BY結果を並べ替える(必ず最後)ORDER BY created DESC
ASC / DESC並び順ORDER BY priority DESC, created ASC

未解決の課題を表すなら、status != Done ではなく resolution = EMPTY(または resolution IS EMPTY)が最適です。ステータス名はワークフローごとに異なりますが、resolution フィールドは課題が本当にクローズされた時点で設定されるため、「まだ open か」を問う移植性の高い方法になります。

関数

関数は、Jira がクエリ実行時に評価する動的な値を生成します。保存したフィルターが使われ続けるのはこの仕組みのおかげです。assignee = currentUser() は実行する人ごとに異なる意味になり、sprint IN openSprints() はその日に進行中のスプリントを常に指し続けます。

関数返すもの
currentUser()クエリを実行しているアカウントassignee = currentUser()
membersOf("group")グループに所属するユーザーassignee IN membersOf("developers")
now()現在の日時due < now()
startOfDay() / endOfDay()日の境界(オフセットは任意)created >= startOfDay(-7)
startOfWeek() / startOfMonth()暦上の期間の開始updated >= startOfWeek()
openSprints()進行中のスプリントの課題sprint IN openSprints()
closedSprints()完了したスプリントの課題sprint IN closedSprints()
futureSprints()今後のスプリントの課題sprint IN futureSprints()
latestReleasedVersion(PROJ)最新のリリース済みバージョンfixVersion = latestReleasedVersion(DEV)
unreleasedVersions(PROJ)まだリリースされていないバージョンfixVersion IN unreleasedVersions(DEV)
linkedIssues(KEY)指定した課題にリンクされた課題issue IN linkedIssues(DEV-100)
issueHistory()最近閲覧した課題issue IN issueHistory()

スプリント関数は、スプリントを使うボードにのみ適用されます。バージョン関数は、どのリリース計画を読むかを Jira に伝えるためにプロジェクトキーを引数に取ります。すべての関数は、引数がない場合でも now() のように括弧を付けて呼び出します。

よく使うフィールド

最もよく参照するフィールドを挙げます。カスタムフィールドは名前か cf[10010] 形式の識別子で検索します。自分のインスタンスの ID を調べるには atlassian-cli jira fields list を実行してください。

フィールド一致する対象
projectプロジェクトキーまたは名前project = DEV
status現在のワークフローのステータスstatus = "In Progress"
statusCategoryTo Do / In Progress / DonestatusCategory = "In Progress"
assignee担当者assignee = currentUser()
reporter課題の報告者reporter = jane@example.com
type / issuetype課題タイプtype = Bug
priority優先度priority IN (High, Highest)
resolution解決状況(EMPTY は未解決)resolution = EMPTY
created / updatedタイムスタンプのフィールドupdated >= -1d
due期限due <= endOfWeek()
labels課題に付いたラベルlabels = backend
componentコンポーネントcomponent = "API"
fixVersion修正バージョンfixVersion = 2.1
sprintスプリント(名前または関数)sprint IN openSprints()
parent親の課題parent = DEV-100
textすべてのテキストフィールドをまとめてtext ~ "timeout"

日付での絞り込み

日付フィールドは、絶対値("2026-07-01")、相対の省略記法、関数を受け付けます。最も手早く書けるのは相対の省略記法で、符号付きの数値の後ろに単位を付けます。負の値は現在から過去にさかのぼります。

単位意味
wcreated >= -2w
dupdated >= -7d
h時間updated >= -4h
mcreated >= -30m

m は月ではなく分を意味します。ここは絶えず誤解される点です。暦に合わせた期間には、代わりに境界関数を使ってください。created >= startOfMonth() は月初以降のすべてを、due <= endOfWeek() は実行する曜日にかかわらず今週の残りを対象にします。

そのまま使えるクエリ例

繰り返し発生する用途向けの具体的なクエリです。DEV をご自身のプロジェクトキーに置き換えて、JQL クエリを受け付ける場所であればどこでも実行できます。

目的JQL クエリ
自分の未解決の作業、緊急度の高い順assignee = currentUser() AND resolution = EMPTY ORDER BY priority DESC
今週作成されたバグproject = DEV AND type = Bug AND created >= startOfWeek()
進行中のスプリントで未割り当ての課題sprint IN openSprints() AND assignee IS EMPTY
レビュー中で滞留している課題status = "In Review" AND updated <= -14d
「timeout」に言及しているものproject = DEV AND text ~ "timeout"
最近再オープンされた課題status CHANGED TO "Reopened" AFTER -30d
今後のリリース向けの作業fixVersion IN unreleasedVersions(DEV) AND resolution = EMPTY
優先度が高く期限がないものpriority IN (High, Highest) AND due IS EMPTY

コマンドラインから JQL を実行する

このチートシートの JQL クエリは、いずれもそのまま atlassian-cli で実行できます。クエリを jira issue search--jql フラグに渡し、次に行う作業に合った出力形式を選んでください。

# Basic search, table output
atlassian-cli jira issue search --jql "project = DEV AND status = 'In Progress'"

# My open work, most urgent first, top 20
atlassian-cli jira issue search \
  --jql "assignee = currentUser() AND resolution = EMPTY order by priority desc" \
  --limit 20

# Export recent bugs to CSV
atlassian-cli jira issue search \
  --jql "project = DEV AND type = Bug AND created >= -30d" \
  --format csv --output recent-bugs.csv

# Pipe JSON into jq to pull just the issue keys
atlassian-cli jira issue search \
  --jql "sprint IN openSprints() AND status != Done" \
  --format json | jq '.[].key'

同じ JQL で一括操作も実行できます。まず --dry-run でプレビューし、外して実行すると、一致したすべての課題に適用されます。

# Close stale in-review tickets (preview first)
atlassian-cli jira bulk transition \
  --jql "project = DEV AND status = 'In Review' AND updated < -14d" \
  --transition "Done" \
  --dry-run

特定のサイトを対象にするには --profile <name> を追加してください。フラグの全一覧はコマンドリファレンスにあります。すべてのコマンドグループが --format table|json|csv|yaml|quiet|markdown を受け付けます。

Atlassian 自身の CLI との違い:atlassian-cli はコミュニティによる独立したオープンソースプロジェクトです。Atlassian が提供する公式 CLI(acli)ではありません。Atlassian と提携・関連しておらず、Atlassian による承認、推奨、後援、保守のいずれも受けていません。ベンダーによる一次サポートが必要なら公式の acli を使ってください。Jira、Confluence、Bitbucket、JSM をまたぐ無料の Rust バイナリを 1 つで済ませたい場合は atlassian-cli を使ってください。JQL の構文自体は、どのツールがクエリを送っても同じです。JQL は Jira のサーバー側で評価されるからです。

これらのクエリを数秒で実行する

Rust バイナリ 1 つをインストールすれば、任意の JQL クエリをそのままターミナルに貼り付けて実行できます。

atlassian-cli を試す

よくある質問

Jira の JQL クエリとは何ですか

JQL(Jira Query Language)は、Jira の課題を探すための構造化されたクエリ構文です。JQL クエリはフィールド、演算子、値という 3 つの要素で組み立てます。たとえば status = Done です。句は ANDORNOT でつなぎ、結果は ORDER BY で並べ替えます。JQL は SQL ではありません。対象は課題だけで、SELECTFROM もありません。

自分に割り当てられた課題を探す JQL クエリはどう書きますか

currentUser() 関数を使い、assignee = currentUser() AND resolution = Unresolved と書きます。これで全プロジェクトにまたがる自分の未解決の課題が返ります。緊急度の高い順に見たい場合は order by priority desc を追加し、1 つのプロジェクトに絞る場合は project = DEV AND assignee = currentUser() とします。

JQL の = と ~ の違いは何ですか

= 演算子は値の完全一致を判定するため、summary = "login bug" はその文字列と厳密に一致するものだけに一致します。~ 演算子はテキスト検索のための CONTAINS 演算子で、summary ~ "login" は login という語を含むあらゆる要約に一致します。summary、description、comment、text のような自由記述のフィールドには ~ を、status や priority のような厳密な値のフィールドには = を使ってください。

コマンドラインから JQL クエリを実行できますか

はい。atlassian-cli では、任意の JQL クエリを --jql フラグに渡します。atlassian-cli jira issue search --jql "project = DEV AND status = 'In Progress'" のように書きます。出力を整えるには --format json--format csv--limit を追加し、さらに絞り込むには JSON を jq にパイプします。

JQL で Jira の課題を日付で絞り込むにはどうしますか

created、updated、due、resolved といった日付フィールドで相対日付の省略記法を使います。たとえば created >= -7d は、直近 7 日間に作成された課題を返します。単位は w(週)、d(日)、h(時間)、m(分)です。startOfWeek()endOfMonth() のような関数を使うと、暦上の境界を基準にクエリを組み立てられます。

関連リソース