Neovim で自分にあったブックマークプラグインがなかったので fusen.nvim を開発

に公開

zenn 初投稿です。

背景

最近、コードレビューに費やす時間が増えてきました。レビュー中は「ここは early return できる」「ここは要改善」「xxx の考慮がされていない」といった一時的なコメントを残したい場面が多々ありました。それができるブックマークプラグインがあれば、レビュー時間を大幅に短縮できると考えました。

レビューをしていると、複数のレビュー対象ブランチと自分が開発しているブランチを頻繁に切り替える必要があります。例えば、 feature/payment のレビュー中に feature/auth の修正依頼が来て、さらに自分の feature/notification の開発も並行して進める、といった状況です。このような状況では、各ブランチのコンテキストに応じた付箋(マーク)を管理できることが非常に重要です。レビュー中のブランチには「要改善」のマーク、開発中のブランチには「 TODO 」のマーク、といった具合に、ブランチごとに異なる視点でコードを見ているからです。

そこで既存のブックマークプラグインをいくつか試してみました。優れたプラグインは存在しますが、これらのプラグインの多くは ** Git ブランチに紐づいたブックマーク管理機能を持っていません** でした。ブランチを切り替えると全てのマークが混在してしまい、「このマークはどのブランチのものだっけ?」「さっきレビューで付けたマークはどこ?」と混乱することが頻繁にありました。

そこで、自分のワークフローに最適化したブックマークプラグイン「 fusen.nvim 」を開発することにしました。

プラグイン名は、既に「 bookmark 」という名前のプラグインが多数存在するため、日本語の「付箋(ふせん)」から名前を取りました。コードに付箋を貼るような感覚で使えるプラグインを目指しています。

既存プラグインの課題

既存のブックマークプラグインの課題について、もう少し詳しく説明します。主な課題は以下の3つでした。

1. Git ブランチ切り替え時のコンテキスト喪失

背景でも触れましたが、最も大きな問題は、ブックマークが Git ブランチと連動していないことでした。

例えば、 feature/new-api ブランチで開発中に重要な箇所をブックマークしておいても、急なバグ修正で hotfix/critical-bug に切り替えると、関係ないブックマークが表示されてしまいます。なので、マークしたものがあるブランチ上でスイッチする心理的なストレスが大きかったです。

2. アノテーションの視認性の問題

他のプラグインにもアノテーション機能は存在しました。例えば、「 TODO: エラーハンドリングを追加」や「要リファクタリング」といったメモをマークと一緒に保存できます。

しかし、マークした行にカーソルを合わせても、そのアノテーションが表示されないのが非常に不便でした。アノテーションを確認するには、別のコマンドを実行する必要がありました。

理想的には、コードを読みながら自然にアノテーションが目に入る方が効率的です。行末に表示されたり、ホバー時にポップアップで表示されたりすれば、わざわざ確認のアクションを挟まずに済みます。

3. Telescope 連携の不足

既存のプラグインの中には、Telescope 連携を提供しているものもありました。プロジェクト全体のマークを一覧表示できるのは便利です。

しかし、単にマーク一覧を表示できるだけで、Telescope 上で削除操作ができないプラグインがほとんどでした。マークを削除したい場合、わざわざ該当ファイルに移動してコマンドを実行する必要があり、効率的ではありません。

fusen.nvim の特徴

上記の課題を解決するために、fusen.nvim を開発しました。 Git ブランチごとに独立してブックマークを管理 し、ブランチを切り替えると自動的に付箋も切り替わります。具体的な特徴は、GitHub の README を見ていただければと思いますが、簡単に説明します。

登録するときは me と打つと、floating window が立ち上がり、アノテーションを残すことができます。
Adding/Editing an annotation

登録したアノテーションは、カーソルを合わせるとポップアップで表示されます。また、モードによっては、文末にアノテーションを表示することも可能です。
Viewing annotation

以下のように Telescope で一覧表示し、削除も可能です。
Listing marks in Telescope

まとめ

fusen.nvim は、コードレビューの生産性を向上させるために開発したブックマークプラグインです(もちろん、レビュー意外の用途でも使えます)。

従来のプラグインでは実現できなかった「 ** Git ブランチごとのコンテキスト管理** 」を実現し、さらにアノテーションの視認性や Telescope 連携を強化することで、レビュー作業をより効率的にします(git 管理外のファイルの場合は、global として保存されます)。

こんな人におすすめ

  • 複数のブランチを並行してレビュー・開発している
  • レビュー中に一時的なメモを残したいが、コミットはしたくない
  • ブックマークを視覚的に確認しながら効率的に管理したい
  • Telescope を使った高速な検索・操作を活用したい

ぜひ一度試していただき、フィードバックをいただけると嬉しいです!

リンク

Discussion