お雑煮研究会

好きな焼肉は魚

Claude Code の Hooks をTypeScript で軽快に書く

Claude Code の Hooks をかなり使っている。

Hooks は Context File や Slash Command に頼らず、AI に対して機械的・自動的に介入できるしくみだ。 静的解析の自動実行など、特定の状況で素早くフィードバックを返したいケースに向いており、世間でも活用プラクティスが紹介されている。

azukiazusa.dev

zenn.dev

ただ、公式ドキュメント(https://code.claude.com/docs/en/hooks)にもあるように、Hooks を真面目に書こうとすると次の処理が必須になる。

  • stdin に渡される JSON をパース
  • Hook でやりたい任意の処理を走らせる
  • AI へのフィードバック内容に応じて適切な終了コードと出力でプロセスを終了させる

このあたりを素朴に書くと、どうしてもボイラープレートが多くなる。
「便利だが毎回書きたくはない」という状態だったため、仕様に対する軽量な wrapper ライブラリを作って数カ月使っている。

github.com

とにかく公式が求める挙動を手早く書ければよいので、シュッと作れて楽しかった。

PreToolUse / PostToolUse イベントに関してはツール固有の型定義が欲しくなりそうだったのでユーザー側で型を自由に拡張できるようにしてある。 個人的にかなり入れてよかったしくみで、実際この機能を使っていただいたブログも上がっているので読みは悪くなさそうだと思う。

suntory-n-water.com

Claude Code 本体との型の差分チェックも自動化してあるので、メンテナンスも既存の CI さえ通せれば安心してバージョンを上げられることになっていてかなり効率よく作れたと感じる。型プログラミング / 型テストのいい勉強になった。

実は @berlysia さんがこのライブラリを結構使っている気配を感じているので、今週あたりで使い方を見ながら export してあると嬉しい型を export するなど改善していこうと思っている。

おわり

おわり