ReviewItにインスパイアされてNeovimプラグイン「ReviewThem.nvim」を作った
こんにちは、@key60228です。
CursorやDevinに加え、Claude CodeやGemini CLIの登場によって、実装コストよりもレビューコストがますます高まっていっているのを感じる今日この頃です。
最近は専らClaude Codeをgit worktreeを使って並列で走らせているため差分が大きくなりがちで、コードレビューの辛みが増してきています。
Cursorを使っていた頃[1]はGitLensのSearch & Compareを使っていたんですが、ちょっとした変更をAIに伝えるのが難しい…!
かと言ってGitHubに毎回PRを上げるわけにもいかないし…[2]
何か良い方法はないものか…と思っていた時によしこさん (yoshiko_pg) のツイートを見かけました
これだ…!でも出来ればターミナル上で、さらに出来ればNeovimで完結できないだろうか…![3]
作ってみた
というわけで、Neovim上でref間の差分をレビューできるプラグイン「ReviewThem.nvim」を作ってみました。
lazy.nvimを使っていれば以下でインストール可能です。
{
"KEY60228/reviewthem.nvim",
dependencies = {
"sindrets/diffview.nvim",
"nvim-telescope/telescope.nvim",
},
config = function()
require("reviewthem").setup({
diff_tool = "diffview", -- Currently only "diffview" is supported. More tools will be added soon!
comment_sign = "💬",
submit_format = "markdown", -- "markdown" or "json"
submit_destination = "clipboard", -- "clipboard" or file path relative to project root
ui = "builtin", -- "builtin" or "telescope"
keymaps = {
start_review = "<leader>rtstart",
add_comment = "<leader>rtc",
submit_review = "<leader>rtsubmit",
abort_review = "<leader>rtabort",
show_comments = "<leader>rtsc",
toggle_reviewed = "<leader>rtmr",
show_status = "<leader>rtss",
},
command_aliases = {
review_start = "rts", -- Alias for ReviewThemStart
},
})
end,
}
レビュー対象のbase branchとcompare branchを以下のように指定することで、差分ツールが開きます
:ReviewThemStart main feature/xxx
コメントしたい箇所を選択して
:ReviewThemAddComment
とすることでコメントを残すことができます。
レビュープロセスが終わったら
:ReviewThemSubmit
とコマンド入力すると差分ツールが閉じ、クリップボードにレビュー内容が保存されます。
レビュー内容の出力先はクリップボードとファイルのどちらかを選択することができ、形式もMarkdownとJSONを選択することができます。
出力結果は以下のような形になります。
Markdown
# Code Review
**Base:** main
**Compare:** feature/xxx
**Date:** 2025-07-04 18:25:49
## Comments
### alacritty/alacritty.toml
- **Lines 47-127:** アルファベット順に並び替えてください。
JSON
{
"review": {
"comments": [
{
"file": "alacritty/alacritty.toml",
"line_start": 47,
"line_end": 127,
"comment": "アルファベット順に並び替えてください"
}
],
"timestamp": "2025-07-04 18:28:14",
"base_ref": "main",
"compare_ref": "feature/xxx"
}
}
他にも以下のコマンドを用意しています
-
ReviewThemShowComments
: コメントの一覧 -
ReviewThemMarkAsReviewed
/ReviewThemUnmarkAsReviewed
: ファイルをレビュー済みとしてmark/unmark -
ReviewThemStatus
: ファイルごとのレビュー状況の一覧 -
ReviewThemAbort
: レビュープロセスの終了
今後やりたいこと
現時点では差分ツールとしてDiffview、UI/ファジーファインダーとしてtelescopeに依存する形になっていますが、将来的には色んなツールに対応できるようにしたいなと考えています。
また、まだまだ荒削りで個人的に手の届いていない箇所 (コメントのUXやファジーファインダーの挙動) が多いのでその辺も改善していきたい…
所感
Neovimのプラグイン実装の知見ほぼ0だったんですが、Claude Codeがあれば形になるもんだなあとありがたいやら恐ろしいやら…
是非使ってみていただけると嬉しいです!!
IssueやStarも何卒…!
Discussion