🎩

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

1. 初期化と .gh-pm.yml

まずは設定ファイルを作成します。

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 コマンドを生成&実行
  • 「優先度 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 などを改良し、公開していく予定です。

ぜひ使ってみて、フィードバックやプロンプトのアイデアを共有してください!あと、スターも歓迎です🙏(オラにモチベを分けてくれ)
https://github.com/yahsan2/gh-pm/

まとめ

gh-pm は次の特徴を持った拡張です。

  • GitHub Projects の日常的な操作を CLI で簡略化
  • GraphQL API の複雑さを隠蔽
  • .gh-pm.yml を活用して直感的にフィールド指定
  • LLM との組み合わせで自然言語による操作が可能

日々のプロジェクト運用を「手早く、壊さず、伝わる形で」進めるための、実用的な相棒になれば幸いです。

GitHubで編集を提案

Discussion