LLM と組み合わせて GitHub Projects を効率管理するために gh cli 拡張 gh-pm を作ったよ
これからのAI時代。PdM などがやってるチケット管理も、LLM と人の協働が前提になりますよね?!
自然言語で意図を伝えれば、作成・更新・移動・集計などを自動化できる世界です。GitHub Projects (v2) は柔軟なフィールドと強力なクエリ/自動化を備えており、LLM との相性がとても良い基盤です。gh-pm はその組み合わせを CLI から実務に落とし込むための GitHub CLI 拡張です。
作った背景
GitHub Projects (v2) は柔軟で強力ですが、実運用では次の課題に直面しがちです。
- issue を Project に紐づける作業が面倒
- フィールド更新や移動など、細かい操作が多い
- GraphQL API を直接書くのは複雑すぎる
これを解決するために開発したのが gh-pm です。GitHub CLI の拡張として動作し、LLM と組み合わせることで自然言語による操作も可能になります。
機能紹介(主要機能とコマンド例)
0. インストール
gh extension install yahsan2/gh-pm
.gh-pm.yml
1. 初期化と まずは設定ファイルを作成します。
gh pm init
これでプロジェクトを検出し、.gh-pm.yml
が自動生成されます。このファイルには「Status」「Priority」などのフィールド情報がキャッシュされ、以降のコマンドでフィールド名を省略して直感的に使えるようになります。
例:.gh-pm.yml
の一部
fields:
status:
backlog: "Backlog"
in_progress: "In Progress"
done: "Done"
priority:
high: "P0"
medium: "P1"
low: "P2"
deadline: "Due Date"
2. Project への issue 作成と更新
プロジェクトに issue を作成し、必要なフィールドを同時に設定できます。
gh issue create
と同じインタフェースで、プロジェクトに issue 作成ができるシンプルなコマンドです。
# 優先度 P1、backend ラベル付きで新規 issue を作成
gh pm create --title "Implement authentication" --priority p1 --label backend
通常の cli だとめんどくさい 既存の issue を Project 上で status の移動も可能です。
# issue #123 を in_progress カラムへ移動
gh pm move 123 --status in_progress
3. Issue の intake(プロジェクトへの受入れ)
Project にまだ紐づいていない issue を検索し、まとめてプロジェクトに追加できます。
# ラベルが bug の issue を backlog に追加し、優先度 p2 を設定, project は .gh-pm.yml にある設定です。
gh pm intake --label bug --apply "status:backlog,priority:p2"
.gh-pm.yml にデフォルト設定もできます。
intake:
bug:
query: "is:issue is:open -label:pm-tracked"
instruction: "Starting intake for untracked issues. This will add the pm-tracked label and set default project fields."
apply:
labels:
- pm-tracked
interactive:
status: true # 対話的に選択肢を出し、status をそれぞれ設定できる
# ラベルが bug の issue を backlog に追加し、優先度 p2 を設定
gh pm intake --label bug --apply "status:backlog,priority:p2"
4. Issue の分割(split)
大きな issue を小さなサブ issue に分解できます。
# issue #123 の本文にあるチェックリストから、サブ issue を自動生成
gh pm split 123 --from=body
# tasks.md にあるチェックリストから、サブ issue を自動生成(LLMで tasks.md などを作成した後に登録を想定)
gh pm split 123 --from=./tasks.md
# 別のLLMからテキストをコピーしてきたときや、LLM自体に分割させたいときを想定
gh pm split 123 '["Task 1", "Task 2", "Task 3"]'
この command は、筆者が別で作った gh sub-issue
に依存しますので、事前にインストールが必要です。
gh extension install yahsan2/gh-sub-issue
5. Triage(仕分け)
ルールやインタラクティブモードを使って、一括で triage が可能です。特に .gh-pm.yml
でフィールドが設定されていると便利です。
# tracked 状態の issue をまとめて処理
gh pm triage tracked
# 見積りフィールドを一覧表示
gh pm triage estimate --dry-run
triage:
tracked:
query: "is:issue is:open -label:pm-tracked"
apply:
labels:
- pm-tracked
interactive:
status: true # 対話的に選択肢を出し、status をそれぞれ設定できる
6. 柔軟な出力
取得した情報は JSON や CSV に出力できるので、LLM や他の自動化ツールと組み合わせやすい設計になっています。
# プロジェクト情報を JSON 出力
gh pm list --format json
他にできる triage 活用例
1. 放置されたタスクを一括ラベル付け
7日以上動きのないタスクに stale ラベル付けする
# .gh-pm.yml に設定
triage:
stale:
query: "is:issue is:open -label:pm-tracked updated:<@today-7d"
instruction: "Starting triage for untracked issues. This will add the pm-tracked label and set default project fields."
apply:
labels:
- stale
.gh-pm.yml に設定すると、以下のコマンドが使えます。
# 7日以上期限切れのタスクを stale ラベル付けを実行
gh pm triage stale
※ @today-7d
のフォーマットは web ui だと実装済みですが、gh issue list --search など cli では未対応だったので、中で実装してます。
不具合等あれば教えてください。
2. priority フィールドを持たない issue を抽出し、ひとつづつ優先度を設定する
triage:
priority:
query: "is:issue is:open -field:priority"
interactive:
priority: true # 対話的に選択肢を出し、priority をそれぞれ設定できる
.gh-pm.yml に設定すると、以下のコマンドが使えます。
gh pm triage priority
このように、.gh-pm.yml
に定義したルールを元に、各チームにあった日常的なタスクを自動化できます。
想定使用方法(LLM との連携)
gh-pm は Claude code や Codex CLI のような LLM と組み合わせて使って本領発揮します。
例:
- 「トラックできてない issue を自分にアサインして」
- → LLM が
gh pm triage tracked --apply @me
コマンドを生成&実行
- → LLM が
- 「優先度 P1 のタスクをすべて進行中に移して」
- →
gh pm move --query "is:issue is:open -priority:high" --status in_progress
コマンドを生成&実行
- →
人間が自然言語で意図を伝え、LLM が gh-pm コマンドを発行することで、Project 管理の自動化が一気に加速します。
今後
CLAUDE.md などにこれらのコマンドを書いて覚えてもらい、LLM に実行させるワークフローを構築するのが理想です。
ただ正直現在は LLM が適切なコマンドを実行してくれないこともあるので、「gh pm split 123 --from=body
で今登録した issue 分解して」などの指示もしてしまっています。
ですが期待通りに動いた時は、GitHub Projects と LLM の組み合わせは非常に強力なので、精度を上げるためのCLAUDE.md への指示や /hooks などを改良し、公開していく予定です。
ぜひ使ってみて、フィードバックやプロンプトのアイデアを共有してください!あと、スターも歓迎です🙏(オラにモチベを分けてくれ)
まとめ
gh-pm は次の特徴を持った拡張です。
- GitHub Projects の日常的な操作を CLI で簡略化
- GraphQL API の複雑さを隠蔽
-
.gh-pm.yml
を活用して直感的にフィールド指定 - LLM との組み合わせで自然言語による操作が可能
日々のプロジェクト運用を「手早く、壊さず、伝わる形で」進めるための、実用的な相棒になれば幸いです。
Discussion