Skip to content

feat(gh): gh pr-graph を導入し herdr の gh dash keybind を置き換える - #53

Merged
thinceller merged 2 commits into
masterfrom
claude/herdr-gh-dash-replace-7gncx4
Aug 23, 2026
Merged

feat(gh): gh pr-graph を導入し herdr の gh dash keybind を置き換える#53
thinceller merged 2 commits into
masterfrom
claude/herdr-gh-dash-replace-7gncx4

Conversation

@thinceller

Copy link
Copy Markdown
Owner

概要

記事「AI時代のPR管理画面 gh pr-graph を激推ししている」で紹介されている orangain/gh-pr-graph を導入し、herdr の prefix+ctrl+pgh dash から gh pr-graph に置き換える。

gh pr-graph は自分が author / assignee / reviewer になっている PR をリポジトリ横断で集め、base/head ブランチを再帰的にたどって stacked PR の依存関係を有向グラフとして描く gh 拡張。フラットな PR 一覧では見えないレビュー順や下流の作業が一目で分かる。

変更内容

gh pr-graph のパッケージング

nixpkgs に未収録なので nvfetcher + buildGoModule で自前ビルドする(tcmux と同じ形)。

  • nvfetcher.toml / _sources/generated.nix: orangain/gh-pr-graph v0.14.5 を追加
  • home-manager/programs/gh/gh-pr-graph.nix: 新規。go.mod に require が無い(依存ゼロ)ため vendorHash = null
  • home-manager/programs/gh/default.nix: sources を受け取って extensions に追加

home-manager の programs.gh.extensions は package の pname をそのまま ~/.local/share/gh/extensions/<pname> に link farm する。gh<dir>/gh-pr-graph という実行ファイルを探すため、pname$out/bin のバイナリ名を両方 gh-pr-graph に揃えている。

gh dash 自体は CLI から使えるよう extensions には残している。

herdr keybind の置き換え

configs/.config/herdr/config.tomlprefix+ctrl+p:

before after
command gh dash gh pr-graph
type popup pane

gh pr-graph は TUI ではなく 127.0.0.1 にローカルサーバを立ててブラウザを開き、Ctrl-C まで前面に居座るタイプ。herdr の popup は session-modal なので、ブラウザでグラフを見ている間ずっと herdr 側がブロックされてしまう。pane(コマンド終了で自動的に閉じる一時ペイン)なら他のペインを触りながらサーバを生かしておけるため、こちらを使う。

herdr の keybind type は shell / pane / popup / plugin_action の 4 種類で、pane は「一時ペインを開きコマンド終了時に閉じる」挙動(herdr src/config/keybinds.rs, src/main.rs のコメントで確認)。width / height は popup 専用のため削除した。

検証

このクラウドセッションでは egress policy により GitHub の tarball 取得がブロックされ、flake input を fetch できないため nix eval .#darwinConfigurations...(CLAUDE.md 記載の検証コマンド)は実行できなかった。代わりに channel の nixpkgs を使って以下を確認している。darwin / oberon 構成の eval は手元で再確認してほしい。

  • sha256 の正当性: v0.14.5 のチェックアウトを nix-store --add-fixed --recursive sha256 で store に追加したところ、derivation が要求する fixed-output path と完全に一致した
  • ビルド: buildGoModule でビルド成功。$out/bin/gh-pr-graph が生成され、checkPhase も通る
  • バイナリの動作: GH_PR_GRAPH_DEMO=1 gh-pr-graph --no-open --port 0 で起動し、gh pr-graph v0.14.5 と version が正しく埋め込まれていること、/(embed された web asset、<title>PR Graph</title>)と /api/v1/graph が 200 を返すことを確認
  • gh 拡張のレイアウト: home-manager と同じ linkFarm を組み立ててビルドし、gh-extensions/gh-pr-graph/gh-pr-graph が生成されることを確認(gh が拡張を発見できる配置)
  • フォーマット: 変更した nix ファイルに対し nixfmt --check が通る
  • herdr config: TOML としてパースでき、prefix+ctrl+p | pane | gh pr-graph になっていることを確認

適用後の手順

gh pr-graphgh auth login 済みの gh CLI 経由で GitHub にアクセスする(認証情報はブラウザには渡らない)。追加の設定は不要。


Generated by Claude Code

gh pr-graph (orangain/gh-pr-graph) は自分が author / assignee / reviewer の
PR を横断で集め、base/head ブランチを再帰的にたどって stacked PR の依存関係を
グラフとして描く gh 拡張。フラットな PR 一覧では見えないレビュー順や下流の
作業が一目で分かるので、herdr の `prefix+ctrl+p` を gh dash から置き換える。

- nixpkgs 未収録なので nvfetcher + buildGoModule で自前ビルドする (tcmux と同形)。
  go.mod に require が無いため vendorHash = null。
- home-manager の programs.gh.extensions は pname をそのまま
  ~/.local/share/gh/extensions/<pname> に link farm するため、
  pname と $out/bin のバイナリ名を "gh-pr-graph" に揃えている。
- gh pr-graph は TUI ではなく 127.0.0.1 にサーバを立ててブラウザを開き、
  Ctrl-C まで居座る。popup は session-modal でブラウザ閲覧中ずっと herdr を
  ブロックしてしまうため、keybind の type は popup ではなく pane にした。
- gh dash 自体は CLI から使えるよう extensions には残す。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QYmZcVLWwWwJ1MvuTSy2xs
@github-actions

This comment has been minimized.

Copy link
Copy Markdown
Owner Author

CI 状況

job 結果
build (kohei-m4-mac-mini)
build (SC-N-843)
diff
build-nixos (oberon) base でも赤(この PR とは無関係)

この PR が触る部分はすべて緑です。diff の結果も追加は gh-pr-graph-v0.14.5 と herdr config の source 差分のみで、意図どおりでした。

build-nixos について

error: attribute 'gh-stack' missing
  at home-manager/programs/gh/default.nix:13:7

これは master でも同じ理由で落ちていますrun #1109build-nixos。当時のエラーは undefined variable 'gh-stack')。原因は oberon が nixpkgs-stable (nixos-25.11) を使うのに対し gh-stack は unstable にしか無いことです。25.11 channel で確認:

{ gh-dash = true; gh-poi = true; gh-stack = false; }

本 PR でエラー文言が undefined variableattribute missing に変わったのは、with pkgs; を明示的な pkgs.X に書き換えたためで、原因も箇所も同一です。base 側の赤なのでこの PR では修正せず、提案のみ残します。

提案(別 PR)

このリポジトリには既に claude-code / fish / git / opencodeserver.nix を分ける慣習があるので、gh も同じ形に分けるのが筋だと思います。

  • gh/common.nixgh-dash / gh-poi + settings(stable にも存在する分)
  • gh/default.nix … darwin 用に gh-stackgh-pr-graph を追加
  • gh/server.nix … oberon 用(hosts/oberon/home.nix の import 先を差し替え)

oberon の赤を直すと同時に、ヘッドレスサーバに不要な gh-pr-graph(ブラウザを開くツール)を載せない、という副次効果もあります。


Generated by Claude Code

oberon (nixpkgs-stable / nixos-25.11) の `build-nixos` が
`attribute 'gh-stack' missing` で落ちていた。gh-stack は nixpkgs unstable に
しか無く、unstable を使う darwin 2 host では通るが stable の oberon では
評価に失敗する。master から続く既存の問題。

claude-code / fish / git / opencode と同じ common.nix / server.nix の慣習に
合わせて gh モジュールを分割する。

- gh/common.nix: stable にも存在する gh-dash / gh-poi + settings + gh-prism
- gh/default.nix: common.nix を import し、darwin 用に gh-stack と
  gh-pr-graph を追加 (extensions は list なのでマージされる)
- gh/server.nix: oberon 用。common.nix だけ
- hosts/oberon/home.nix: import 先を gh/server.nix に変更

副次効果として、ローカルサーバを立ててブラウザを開く gh-pr-graph が
ヘッドレスな oberon に載らなくなる。これも意図した挙動。


Claude-Session: https://claude.ai/code/session_01QYmZcVLWwWwJ1MvuTSy2xs

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

Nix Diff

Compare changes

kohei-m4-mac-mini

Attribute: darwinConfigurations.kohei-m4-mac-mini.system

Diff Output
<<< /nix/store/28nzjqagig0bjlcnnw41pghh0j0y6ai6-darwin-system-26.11.d8a6661.drv
>>> /nix/store/f70b42yx05z95wfizlcj23fyp5s91bln-darwin-system-26.11.d8a6661.drv

CHANGED
[C.] source              <none> ×1405 -> <none> ×1406

ADDED
[A.] gh-pr-graph-v0.14.5 <none>

PATHS: 14449 -> 14451 (+7, -5)
SIZE: 411 MiB -> 411 MiB
DIFF: 9.52 KiB

SC-N-843

Attribute: darwinConfigurations.SC-N-843.system

Diff Output
<<< /nix/store/wymcisaga8x14hnkprlwqx9z5zv8481a-darwin-system-26.11.d8a6661.drv
>>> /nix/store/z206ifhdfr8ilg4fdch8hbvmpsr0vn2s-darwin-system-26.11.d8a6661.drv

CHANGED
[C.] source              <none> ×1181 -> <none> ×1182

ADDED
[A.] gh-pr-graph-v0.14.5 <none>

PATHS: 12737 -> 12739 (+7, -5)
SIZE: 292 MiB -> 292 MiB
DIFF: 9.52 KiB

📄 View diff as HTML in the Artifacts section


Generated by nix-diff-action using dix

Copy link
Copy Markdown
Owner Author

CI 全ジョブ緑になりました

先のコメントで報告した build-nixos の赤(oberon / nixpkgs-stable に gh-stack が無い問題)は、#54 のマージで解消しました。head 5430696 での結果:

job 結果 所要
build (kohei-m4-mac-mini) 6m16s
build (SC-N-843) 4m22s
build-nixos (oberon) 2m30s
diff 3m51s

build-nixos は従来 47 秒で eval エラーになっていたので、master から続いていた赤がこの PR で解消したことになります。

本文の検証セクションについての補足

PR 本文には「egress policy で nix eval .#darwinConfigurations... が実行できなかったので手元で再確認してほしい」と書いていますが、CI が macOS / ubuntu ランナーで darwin 2 host と oberon を実際にビルドして通ったため、この注意書きはもう実質的に不要です。

nix-diff の結果も、#54 のマージ後で master に対する darwin の差分は変わらず gh-pr-graph-v0.14.5 の追加と source 変更のみでした:

CHANGED
[C.] source              ×1405 -> ×1406

ADDED
[A.] gh-pr-graph-v0.14.5

gh モジュールの分割が darwin に対して no-op であることが CI 側でも裏付けられています。


Generated by Claude Code

@thinceller
thinceller marked this pull request as ready for review August 23, 2026 13:09
@thinceller
thinceller merged commit deab0ef into master Aug 23, 2026
4 checks passed
@thinceller
thinceller deleted the claude/herdr-gh-dash-replace-7gncx4 branch August 23, 2026 13:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant