AIのコード全部チェックしてる?difitで『目が滑る』問題を解決

Claude CodeやCodexなどを使いAIにコードを書かせる機会が多くなりました。ゆえにレビューする機会も増えました。

レビュー疲れで目が滑り 、「AIによる説明のためのコメント」「動作確認用に自分で追加したconsole.log」など 不要なコードが残っていることもしばしば

ロジックの変更をAIに伝えるときも@/path/to/file のfooFunctionのBを……みたいな 「どの部分なのか」を入力するのもかなり面倒 です。

これを解決できるツールdifitを解説します。

※この記事はv2.2.2のdifitで検証して書いています。

difitとは

difitはコードレビュー用ツールです。GitHubのPull Requestみたいな画面でコードの差分を表示して コメントを付けながらレビュー できます。

difitの使用例

推しポイントを書いていきます。

ファイルごとにチェックマークを付けられる

ファイルごとにチェックマークを付けられます。変更が多くても、 どのファイルが見終わったのか一目瞭然 です。

チェックボックスViewedがある

レビュー中にSlackでメンションされて対応後に戻ってきたとき 、「どこまでやったんだっけ」っていうのが無くなります。

「この関数は別の場所で定義しているから 後でもう一度見よう」っていうときはチェックを付けずにいったんステイ、みたいなこともできてレビューしやすいです。

あと個人的には、 残りのファイル数が分かる のでモチベを保ちやすいのもうれしいです。

コメントがそのままAIへのプロンプトになる

difitでは、書いたコメントがAIへのプロンプトになります。

しくみは単純です。「ファイル名と範囲+コメント」がクリップボードに入るだけなので どのAIツールへのプロンプトでも使えます

実際にコピーされるプロンプトの例
src/index.ts:L97
ここの分岐いらないかも

@/path/to/file のfooFunctionのBを……みたいな入力を自分で書かなくていいので楽です。

うっかりタブを閉じても問題ない

こういうツールは「一度間違えて終了したら、もう一度〇〇を入力しないと……」みたいなことが起こりがちですが、difitは問題ないです。

localStorageに保存しているため、同じコミットに対してのレビューであれば前回のコメントやチェックマークが維持されます。

導入方法

npxでサクッと使えます。こだわりがある人はグローバルインストールなりエイリアスを貼りましょう。

Terminal window
npx difit

筆者はBunで使ってます。

Terminal window
bunx difit

使い方

まず起動時の引数について。引数なしだと 最後のコミットの差分 になります。

Terminal window
npx difit

コミットしてない変更を見たいなら、.を指定します。

Terminal window
npx difit .

その他、「コミットハッシュの指定」「ブランチ同士の比較」「GitHubのPull Requestの指定」などなど 柔軟に指定できます 。詳しい指定方法はREADMEをご覧ください。

ブラウザが立ち上がったら

コマンド実行後、ブラウザが立ち上がります。体験としてはGitHubと変わりません。ファイルを見たらチェックマークをつけ、物申したいならコメントします。

difitの使用例

コメントがあればCopy All Promptをクリックしてプロンプトとしてコピーしてから終了します。

プロンプトとしてコピーするボタン

もしボタンを押し忘れても ターミナルに出力 してくれますし、もう一度同じ引数で立ち上げれば また同じ画面 になります。

他のツールとの使い分け

筆者は普段、Git操作をlazygitかコマンドでやってます。使い分けはこんな感じ。

  • lazygit
    • 差分が少ない・単純な変更と分かりきっているとき
  • difit
    • AIにフィードバックするとき
    • 差分が多い・複雑な変更かもなと思ったとき

キーボード操作できる

jで「次の行へ移動」、nで「次の変更箇所に移動」のようなキーボード操作ができます。

単にキーボードで操作ができるってだけじゃなく、 ちょうど今見ている行をハイライトできる ため、目が滑りにくくなります。読書定規みたいな感じで使えます。

?を押せばショートカット一覧が表示されます。

ショートカットキー一覧

zeno.zshでの設定

zeno.zshを使っている人は次のように設定しておくと便利です。

snippets:
- name: "difit"
keyword: "difit"
snippet: "bun x difit ."

difit<CR>bun x difit .の実行、difit<Space>で実行はせず展開されます。引数の.の部分はお好みで変更しましょう。

「zeno.zshって何?」という方は別の記事をご覧ください。


以上、difitの紹介でした。AIを使っていない人でもおすすめです。

difitを使っても目が滑るときは 相当疲れている ので目を休めましょう。

他にもテーマやフォントサイズの変更などが設定できたり、サイドバーのサイズや開閉など細かい部分まで使いやすいです。