木曜日, 8月 14, 2025
木曜日, 8月 14, 2025
- Advertisment -
ホームニューステックニュースClaude Code で git-grep を使うと幸せになれる、かもしれない

Claude Code で git-grep を使うと幸せになれる、かもしれない


私たちのチームでは 6 月から全面的に Claude Code を使った開発をスタートしています。

https://x.com/na0x2c6/status/1930386098058113182

本記事では筆者が 2 ヶ月間 Claude Code を触りながら行き着いた、シンプルながら効果的な git-grep の使い方を紹介します

この記事で書くこと

  • Claude Code で git-grep を活用する例
  • (おまけ)新しいフックを追加するときの Tips

この記事で書かないこと

  • フック定義(python コード)の解説
  • Claude Code やフックの説明

いきなり結論ですが、PreToolUse フックで Grep ツールの呼び出しを禁じ、 git grep --function-contextを強制するフック を定義しています。

もちろん Bash ツールで grep を使ったコンテンツ検索も禁じています。ripgrep も断固として禁じています。

なおフックの python コードは Claude Code のドキュメント を少し改変して利用しています。

git-grep の何がよいのか

LSP サーバー を使うよりフットプリントが小さく、また後述のフラグ利用でコード調査をスムーズに進められる利点があります。

思想が強いのは否定しません。

--function-context--show-function

そのまま git-grep を使うのではなく、 基本は --function-context フラグも利用します。

    (
        lambda cmd: cmd.strip().startswith("grep "),
        "grep の変わりに git grep --function-context [--and|--or|--not|(|)|-e ...] -- ... を使ってください。--function-context フラグにより出力行が多すぎる場合、 --show-function と -C フラグを利用してください",
    ),
    
    (
        lambda cmd: (
        re.match(r"^git\s+grep\s+", cmd) and
        not re.search(r"-W|-p|--function-context|--show-function", cmd)
    ),
    "git grep では --function-context か --show-function フラグを使ってください。まず --function-context フラグを利用し、結果行が多すぎる場合、 --show-function と [ -C | -A | -B ] フラグを利用してください",
    ),

--function-context フラグは、マッチしたパターンを含む 関数全体 を grep 結果に出力します。

つまり、調べたい関数やコンポーネント検索したとき、その使われ方 と一緒に確認することができます。

--function-context 利用サンプル
引用:facebook/react

これを Claude Code に使わせることで、Claude Code に任意の関数やコンポーネントの使い方を効率よく調べさせることができます。

ただこの「関数全体を出力する」機能はときに出力サイズが大きくなるので、--show-function フラグも許容しています。こちらは関数全体ではなく、マッチしたパターンと 関数名 を出力します。

--show-function 利用サンプル
引用:facebook/react

なお --function-context フラグの省略表記で -W が、--show-function フラグでは -p が使えますが、Claude Code がより意図を理解してくれる気がするのであえて長いフラグを使っています。

独自のフックを定義する Tips

筆者は WebFetch ツール用のフック も定義しています。

当時 WebFetch でどういった json 入力がフックに与えられるかがわからず、ドキュメントや Web 上でも見つけられなかったので、独自で調べる必要がありました。

現時点ではベストプラクティスがあるかもしれませんが、簡単に json の形式を確認する Tips を紹介します。

結論からいうと次のようなコマンドを使います。

jq . ~/.claude/projects/*/*.jsonl | grep -C 10 WebFetch | less

簡単に解説すると、 ~/.claude/projects/ 配下には、ワークスペース(Claude Code を起動したディレクトリ)ごとにディレクトリが作成されます。

~/.claude/projects// 配下には、セッションごとに jsonl ファイルで、ユーザーと Claude Code がやりとりしたプロンプトデータが保存されています。

上記コマンドでは、これらを jq コマンドで整形してから grep で任意のツール(上記例では WebFetch)の周辺行を確認しています。

WebFetch の json 抜粋
jq . | grep WebFetch -C 10 の例

この例では url という入力があることがわかります。これをフックで検証に利用することができます。


try:
    input_data = json.load(sys.stdin)
except json.JSONDecodeError as e:
    print(f"Error: Invalid JSON input: {e}", file=sys.stderr)
    sys.exit(1)

tool_name = input_data.get("tool_name", "")
tool_input = input_data.get("tool_input", {})


url = tool_input.get("url", "")
issues = validate_url(url)

あとがき

本記事で紹介した効果は筆者の 経験に基づく感覚であり、計測したものではない ということにご留意ください。

クセのある Claude Code の使い方をネタとして紹介したかった という動機で書き始めた記事でした。

ただ git-grep はとても高機能であり、人間が使う上でも役立つ 場面が多いので、もし参考になれば幸いです。



Source link

Views: 0

RELATED ARTICLES

返事を書く

あなたのコメントを入力してください。
ここにあなたの名前を入力してください

- Advertisment -