2025-01-25

現在行に変更を与えた Pull Request を追跡する Neovim プラグイン trace-pr.nvim を作った

trace-pr.nvim という Neovim プラグインを作りました。

trace-pr.nvim demo

何ができるか

上の gif アニメのように、Neovim 上でカーソルがあたっている行の上で :TracePR コマンドを実行すると、直近でその行に変更を加えた GitHub の Pull Request を探索し、ブラウザで開くことができます。

GitHub の Pull Request にはマージ方法として Create a merge commitSquash and merge などいくつか存在しますが、どの方式でマージされた場合でも PR の追跡ができるようにしています。

さらに、Pull Request を経由せず直接 commit されたケースにおいては、Pull Request の代わりに commit の詳細ページ github.com/{username}/{repository}/commit/{commit_hash} に遷移するフォールバック機構も備えています。

モチベーション

作られてから一定の歴史があるプロダクトに開発者として携わっていると、修正を加えようとする箇所の変更の背景や経緯をあとから知りたくなるシーンが頻繁にあります。
変更の背景を理解せずに自分の目的だけで修正を加えてしまうと、予期せぬ不具合を起こしてしまうこともあるため、多かれ少なかれ調査をする必要が出てきます。

git のおかげで、コミットログから歴史をたどることは容易になりましたが、多くの場合、詳細な情報は GitHub の Pull Request の説明欄か、説明欄にリンクされたプロジェクト管理ツールのチケット内部に存在していると思います。

実際、私は git blame をしてコミットを特定 -> そのコミットメッセージから Pull Request を特定 -> Pull Request に書かれている説明文あるいはリンクされた JIRA 等のチケットから背景を理解するという手順で調べることが非常に多いです。

trace-pr.nvim は、これらの調査にかかる手数を減らす目的で開発しています。

仕組み

仕組みは単純で、モチベーションのところにある手順を自動化したようなものになっています。

  1. まず、現在カーソルがあたっている行に対して git blame を実行し、コミットハッシュを特定
  2. 次に、取得したコミットハッシュから、gh コマンドを使い、関連する Pull Request を取得
  3. Pull Request 番号を取得できた場合は、この番号を gh browse コマンドに渡すことで Pull Request の画面が開く
  4. Pull Request 番号を取得できなかった場合は、コミットハッシュを gh browse コマンドに渡すことでコミットの詳細画面が開く

これだけです。gh コマンドに依存してしまっていますが、その分関連する Pull Request の取得は比較的正確になっているかなと思います。

おわりに

インストールや細かな使い方については リポジトリ の README に記載しています。同じようなワークフローで開発をされている方は少しだけ便利になると思います。