atlassian-cli はコミュニティによる独立したオープンソースプロジェクトです。Atlassian と提携・関連しておらず、Atlassian による承認、推奨、後援のいずれも受けておらず、Atlassian が提供する公式 CLI(acli)でもありません。製品名は互換性を示す目的でのみ使用しています。
なぜ一括操作なのか
Jira の課題 500 件を手作業で動かすのは苦痛です。1 件ずつ開き、遷移ボタンをクリックし、ステータスの変更を確認して、また繰り返します。1 件 2 分としても、クリックだけで 16 時間を超えます。スプリント 1 回分の整理のために、です。
Jira の Web UI は個々の課題を扱うために設計されており、大量更新のためのものではありません。しかし実際の Jira 運用では、一括操作が絶えず求められます。完了したエピックのクローズ、チーム変更後の作業の再割り当て、四半期レビュー用の課題のエクスポート、リリースサイクル終盤での放置された課題の整理などです。
コマンドラインからの Jira の一括操作は、この問題を解決します。atlassian-cli なら、コマンド 1 つで数百件の課題を数秒で遷移、担当者変更、ラベル付け、エクスポートできます。jira bulk サブコマンドが並列実行、レート制限、エラーからの復帰を自動で処理するため、操作につきっきりになったり API のスロットル制限に当たったりすることなく、バックログ全体を処理できます。
一括遷移
最もよく使われる一括操作は、課題をあるワークフローのステータスから別のステータスへ遷移させることです。手順はいつも同じです。まずドライランで確認し、それから実行する。
ステップ 1: ドライランでプレビューする
まずは JQL クエリに一致する課題を確認するところから始めます。--dry-run フラグを付けると、何も変更せずに、何がどう変わるかだけが表示されます。
# Preview: see which issues would be transitioned
atlassian-cli jira bulk transition \
--jql "project = DEV AND status = 'In Progress'" \
--transition "Done" \
--dry-run
これは一致するすべての課題を検索し、件数とサンプルの一覧を表示して終了します。課題は変更されません。何かを確定する前に、影響範囲をはっきり把握できます。
ステップ 2: 遷移を実行する
対象の課題が正しいことを確認できたら、--dry-run を外して実行します。
# Execute the transition for real
atlassian-cli jira bulk transition \
--jql "project = DEV AND status = 'In Progress'" \
--transition "Done" \
--profile prod
CLI はレート制限の処理を内蔵したうえで、課題を並列に処理します。各課題の遷移にあわせて進捗が表示されます。失敗した遷移(対象のワークフローのステータスを持たない課題など)はログに記録され、バッチ全体は止まりません。
一括での担当者割り当て
プロジェクト内で担当者が設定されていない課題を、特定のメンバーにまとめて割り当てます。
# Assign all unassigned issues to a team member
atlassian-cli jira bulk assign \
--jql "project = DEV AND assignee is EMPTY" \
--assignee admin@example.com
組織変更のあと、新しいエンジニアがチームに加わったとき、作業を素早く分配したいトリアージの場面などで役立ちます。
一括エクスポート
課題を JSON や CSV にエクスポートすると、Jira の外で Jira のデータを分析できます。関係者向けのレポートとしてスプレッドシートに取り込む、jq に渡して独自に絞り込む、コンプライアンスのために保管する、といった使い方ができます。
# Export all project issues to JSON
atlassian-cli jira bulk export \
--jql "project = DEV" \
--output issues.json \
--format json
# Export to CSV for spreadsheet analysis
atlassian-cli jira bulk export \
--jql "project = DEV AND type = Bug AND created >= -30d" \
--output recent-bugs.csv \
--format csv
JSON のエクスポートは、課題の構造をそのまま保持します。フィールド、コメント、遷移、メタデータが含まれます。CSV のエクスポートはデータを行と列に平坦化し、Excel や Google スプレッドシートですぐ扱えます。どちらの形式もページネーションを自動で処理し、件数にかかわらず一致するすべての課題を取得します。
ファイルに書き出さずに、検索結果を直接ほかのツールへ渡すこともできます。
# Count bugs by priority using jq
atlassian-cli jira issue search \
--jql "project = DEV AND type = Bug" \
--format json | jq 'group_by(.fields.priority.name) | map({priority: .[0].fields.priority.name, count: length})'
ドライランモード
atlassian-cli の破壊的な一括コマンドは、すべて --dry-run に対応しています。これは後付けではなく、中心的な設計方針です。ドライランモードは実際の実行と同じクエリ処理を行い、一致する課題を見つけ、遷移を検証し、権限を確認したうえで、実際の変更だけを行いません。
安全第一の手順は次のようになります。
- ドライラン。
--dry-runを付けてコマンドを実行します。出力に含まれる課題の件数、サンプルのキー、遷移先のステータスを確認します。 - 検証。 JQL が正しい課題に一致しているか確認します。一致したすべての課題タイプで、対象の遷移が存在するかを確かめます。
- 実行。
--dry-runを外して再実行します。CLI は進捗を表示しながら変更を処理します。
この手順は、遷移、担当者の割り当て、ラベルの更新、削除でも同じです。一括操作で最もよくある失敗、つまり意図しない課題まで拾ってしまう広すぎる JQL クエリを防げます。
# Dry-run: preview which issues would get labeled
atlassian-cli jira bulk transition \
--jql "project = DEV AND status = 'Open' AND created < -90d" \
--transition "Closed" \
--dry-run
# Output shows count and sample issues
# [DRY-RUN] Found 147 issues matching criteria
# Sample: DEV-401, DEV-388, DEV-372, DEV-365, ...
# Would transition 147 issues to: Closed
並列数の制御
一括操作は既定で並列に実行され、複数の課題を同時に処理して時間を節約します。--concurrency フラグで、同時に発行する API リクエストの数を制御します。
# Default concurrency (4 parallel requests)
atlassian-cli jira bulk transition \
--jql "project = DEV AND status = 'Open'" \
--transition "In Progress"
# Lower concurrency for rate-limited instances
atlassian-cli jira bulk transition \
--jql "project = DEV AND status = 'Open'" \
--transition "In Progress" \
--concurrency 2
# Higher concurrency for large batches
atlassian-cli jira bulk transition \
--jql "project = DEV AND status = 'Open'" \
--transition "In Progress" \
--concurrency 8
既定の並列数 4 は、ほとんどの Atlassian Cloud インスタンスでうまく動きます。レート制限が厳しいプランなら 2 に下げてください。API のクォータが大きいエンタープライズのインスタンスなら、8 以上まで上げられます。CLI は 429(Too Many Requests)のレスポンスを受け取ると自動でバックオフするため、積極的な並列設定でも恒久的な失敗にはなりません。
レート制限は透過的に処理されます。Atlassian の API がレート制限のレスポンスを返すと、CLI は必要な時間だけ待ってから再試行します。つまり 2,000 件の課題の遷移を投入して、その場を離れても構いません。必要に応じて自分で速度を落としながら、手を加えずに完了します。
実例: スプリントの整理
複数の一括操作を組み合わせた、スプリント整理の一連の流れを紹介します。Jira のボードをきれいに保つために、スプリントの終わりごとに実行するようなスクリプトです。
#!/bin/bash
# Sprint cleanup: close stale issues, reassign, export report
set -euo pipefail
PROFILE="prod"
PROJECT="DEV"
# Step 1: Close issues that have been "Done" for 7+ days
atlassian-cli jira bulk transition \
--profile "$PROFILE" \
--jql "project = $PROJECT AND status = 'Done' AND updated < -7d" \
--transition "Closed" \
--dry-run
# Step 2: Reassign unassigned bugs to the triage lead
atlassian-cli jira bulk assign \
--profile "$PROFILE" \
--jql "project = $PROJECT AND type = Bug AND assignee is EMPTY" \
--assignee triage-lead@company.com
# Step 3: Export the sprint's completed work for the retro
atlassian-cli jira bulk export \
--profile "$PROFILE" \
--jql "project = $PROJECT AND sprint in closedSprints() AND status = Done" \
--output sprint-report.json \
--format json
# Step 4: Count remaining open issues
atlassian-cli jira issue search \
--profile "$PROFILE" \
--jql "project = $PROJECT AND status != Done AND status != Closed" \
--format json | jq '. | length'
echo "Sprint cleanup complete."
このスクリプトは、ほとんどのプロジェクトで 1 分以内に終わります。ステップ 1 のドライランで遷移先を確認してから、フラグを外して本番実行できます。ステップ 3 のエクスポートは、ふりかえり用のデータになります。最後の件数は、まだ残っている作業量を示します。
引数の解析、確認プロンプト、エラー処理まで備えた本番向けのスクリプト全文は、Jira 一括遷移のランブックをご覧ください。
よくある質問
コマンドラインから Jira の課題を一括遷移するにはどうすればよいですか?
atlassian-cli jira bulk transition を JQL クエリとあわせて使います。まず --dry-run で対象の課題をプレビューし、それからフラグを外して実行します。例: atlassian-cli jira bulk transition --jql "project = DEV AND status = 'In Progress'" --transition "Done" --dry-run。並列実行とレート制限は CLI が自動で処理します。
Jira の一括変更を適用する前にプレビューできますか?
はい。atlassian-cli の一括コマンドはすべて --dry-run フラグに対応しています。ドライランモードは一致する課題を検索し、何がどう変わるか(課題の件数、サンプルのキー、遷移先のステータス)を正確に表示して、何も変更せずに終了します。この安全第一の考え方によって、Jira インスタンス全体での意図しない大量更新を防げます。
一括処理を行う Jira CLI は API のレート制限を扱えますか?
はい。atlassian-cli は自動バックオフによるレート制限の処理を内蔵しています。並列度は --concurrency フラグで制御できます(既定は同時 4 リクエスト)。Atlassian Cloud の API が 429 を返すと、CLI は必要な時間だけ待ってから自動で再試行します。数千件の課題を処理する場合でも、スロットルによる失敗を防げます。