13
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AI⇔人間 がdiff上にコメントを書き合える「hunk」がすごい

13
Last updated at Posted at 2026-07-13

はじめに

AIが生成したコードに質問や修正依頼をするとき、
わざわざファイルパスやコードをコピーしてAIに渡した経験はないですか?

私もまさにそうでした。なにを隠そう、究極のめんどくさがり屋なので、このひと手間が地味にストレスだったんです。

それだけではありません。
逆にAIが説明している内容がコードのどこの話なのかを、
IDEのファイル検索や単語検索で特定しに行くのも手間だと感じていました。

そんな悩みを解決してくれたのが「hunk」でした。
hunkは、AIエージェントが書いたコードのレビューに特化した、ターミナルで動くdiffビューアです。

今回は、最近X(Twitter)で絶賛ポストをよく見かけるhunkについて紹介します。

前提

  • AIエージェント(Claude Codeなど)にコードを書かせている人を想定
  • Node.js 18以上が動く環境が必要(macOS / Linux / Windows対応)

この記事の流れ

  1. hunkとは何か
  2. インストールと基本操作
  3. AIエージェントとの双方向レビュー(この記事の中心です)
  4. 類似ツールとの違い
  5. 現時点の制限と便利設定

ゴール

読み終わる頃には、hunkを導入して、AIエージェントと同じdiff画面を見ながらレビューできるようになります。

hunkとは

hunkは、AIエージェントが書いた変更セットのレビューを第一に設計された、ターミナルベースのインタラクティブなdiffビューアです。
ただdiffをきれいに表示するだけのツールではなく、エージェントのコメント(アノテーション)をコードの横に直接表示したり、エージェント側から画面を操作したりできる点が最大の特徴です。

著名な開発者からの評価も高く、GhosttyやVagrantの作者であるMitchell Hashimoto氏は次のようにコメントしています。

Hunk is very good. It has replaced any other local diff viewer for me.

(Hunkはとても良い。私の中で他のあらゆるローカルdiffビューアを置き換えた。)

Honoの作者である和田裕介さん(@yusukebe)もポストしています。

インストールと起動

npmでインストールできます。

npm i -g hunkdiff

パッケージ名は hunk ではなく hunkdiff です。

Homebrewでもインストールできます。

brew install hunk

インストールできたら、Gitリポジトリ内で次のコマンドを実行するだけです。

hunk diff

現在の作業ツリーの変更が、インタラクティブなdiff画面で表示されます。

02_hunk_diff_initial.png

コミット済みの変更を見たいときは hunk show を使います。

hunk show          # 最新コミット
hunk show HEAD~1   # 1つ前のコミット

基本操作

Hunkはキーボードだけで直感的に操作できます(マウスにも対応しています)。

表示モードの切り替え(1 / 2 / 0)

  • 1: サイドバイサイド(左右分割)表示
  • 2: スタック(上下)表示
  • 0: 画面サイズに合わせて自動選択

↓↓ split表示とstack表示の切り替え

03_split_stack_toggle.gif

変更箇所の移動

  • [ / ]: 前後のhunk(変更のかたまり)へ移動
  • , / .: 前後のファイルへ移動
  • { / }: 前後のコメント(アノテーション付きhunk)へ移動

↓↓ [ ] キーでhunk間を移動

04_hunk_navigation.gif

サイドバーとファイル検索

  • s: ファイル一覧のサイドバーを表示/非表示
  • /: ファイル名でフィルター

変更ファイルが多いときは、サイドバーを出しておくと全体像を把握しやすいです。

05_sidebar.png

そのほかの表示設定

キー 動作
l 行番号の表示/非表示
w 長い行の折り返し
m hunkヘッダー(@@ ... @@)の表示/非表示
t テーマの切り替え
e 選択中のファイルを $EDITOR で開く
q 終了

? キーでヘルプが表示されるので、キーバインドを覚えていなくても大丈夫です。

AIエージェントとの双方向レビュー

正直、ここまでの内容なら「見やすいdiffビューア」で終わりです。
Hunkの真価は、AIエージェントと双方向にやり取りできるところにあります。

仕組み: スキルファイルを読ませるだけ

エージェント連携のセットアップは簡単です。
次のコマンドで、Hunkに同梱されているスキルファイルのパスを取得します。

hunk skill path

このパスをコーディングエージェント(Claude Codeなど)に読み込ませるだけで、エージェントがHunkのセッションを操作できるようになります。
公式が推奨しているプロンプトはこちらです。

Load the Hunk skill and use it for this review. Run hunk skill path to get the skill path.

裏側の仕組みも面白いので少し補足します。
HunkのTUIは、起動時にローカルのデーモンにセッションとして登録されます。
エージェントは hunk session というCLIコマンド群で、このデーモン経由で起動中の画面を直接操作します。

image

エージェントのコメントはファイル経由ではなくデーモンへの直接注入なので、--watch オプションを付けていなくても即座に画面へ反映されます
--watch が監視するのはあくまでdiffの入力元(ファイルやGitの状態)です。

AI → 人間: エージェントがdiffを「案内」してくれる

個人的に一番驚いたのがこの方向です。
エージェントに「この変更をレビューして」と依頼すると、エージェントはhunkの画面内に直接コメントを書き込みます。

さらにコメントを書くだけではなく、navigate コマンドで**「いまどこの話をしているか」に画面を誘導**してもらうことも出来ます。

06_agent_comment_navigate.gif

エージェントが残した複数の指摘は、{ / } キーでジャンプしながら順番に確認できます。
a キーでエージェントのコメント表示をオン/オフできるので、コードだけ見たいときも邪魔になりません。

人間 → AI: 画面にメモを書いて実装させる

逆方向もできます。
c キーを押すと、いま見ているコードの行に自分のメモ(レビューノート)を書き込めます。

たとえば「リセット用のAPIとボタンを追加して」のようなメモを残しておき、エージェントに「Hunkに残したコメントを拾って対応して」と指示するだけで、エージェントがメモを回収して実装してくれます。

07_user_note_to_implement.png

diffを見ながら気になった点をその場でメモすると、それがそのままエージェントへの指示になります。
チャット欄に「〇〇ファイルの△△行目なんだけど…」と場所を説明する手間がなくなるのは、体験としてかなり新しいです。

類似ツールと何が違うの?

ターミナルのdiff表示ツールというと、delta や difftastic、Web UIなら difit など、すでにいろいろあります。
「また新しいdiffツール?何が違うの?」と思う方も多いはずです。

一番の違いは、ここまで紹介してきた起動中の画面をAIエージェントがリアルタイムに操作できる点です。

実はdifitにも、AIのコメントを起動時に読み込ませる仕組みはあります。
しかしhunkの場合は、すでに開いている画面に対して、エージェントが後からライブでやり取りできます。

調べた範囲では、次の機能はhunkにしかありませんでした。

  • 稼働中の画面へのコメントのライブ注入(起動後でもエージェントがコメントを追加・削除できる)
  • navigate / reload による画面の誘導・表示内容の差し替え
  • 人間が画面に残したメモ(c キー)のエージェントによる回収
  • watchモード(ファイルやGitの変更を検知してdiffを自動更新)
  • マルチVCS対応(Git / Jujutsu / Sapling を自動検出)

delta や difftastic など他のツールとの機能比較は、公式READMEの比較表にまとまっているので、詳しく知りたい方はそちらを見てみてください。

現時点の制限: 複数行コメントはできない(v0.17.0時点)

触っていて気づいた制限も共有しておきます。

hunk v0.17.0では、コメントのアンカーは1行単位かhunk単位のみです。
GitHubのPRレビューのような複数行の範囲選択コメントには対応していません。

  • hunk session comment add--old-line または --new-line をちょうど1つ指定する必要があり、範囲指定のオプションは存在しません
  • バッチ投稿の comment apply も、各コメントのターゲットは oldLine / newLine / hunk / hunkNumber のいずれか1つです

代替としては、次のような運用になります。

  • hunk全体に対する指摘なら、hunkNumber を指定してhunk単位でコメントを付ける
  • 数行にまたがる指摘なら、範囲の先頭行(または一番重要な行)にアンカーして、コメント本文に「この行から〇行下まで」のように範囲を書く

もっと良い運用をご存知の方がいたら、ぜひコメントで教えてください。

おまけ: 入れておくと便利な設定

設定ファイルは ~/.config/hunk/config.toml に置きます。
私は watch = true を入れています。

~/.config/hunk/config.toml
watch = true   # ファイル変更で画面を自動リロード

これを入れておくと、--watch オプションを付けなくても、hunk diff だけで常に自動リロードが有効になります。
エージェントと一緒に使うなら自動リロードは実質必須なので、configで常時オンにしておくと、付け忘れて起動し直す手間がなくなります。

最後に

冒頭に書いた「ファイルパスやコードをコピーしてAIに渡す」「AIの説明している場所を検索で探しに行く」という手間は、hunkを導入してからまるごと消えました。
diff画面を開いておくだけで、AIとのやり取りがその上で完結するからです。

私と同じめんどくさがり屋の方は、ぜひ一度試してみてください。

参考文献

株式会社シンシア

株式会社シンシアでは、実務未経験のエンジニアの方や学生エンジニアインターンを採用し一緒に働いています。
※ シンシアにおける働き方の様子はこちら

弊社には年間100人以上の実務未経験の方に応募いただき、技術面接を実施しております。
この記事が少しでも学びになったという方は、ぜひ wantedly のストーリーもご覧いただけるととても嬉しいです!

13
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?