aqua経由でripgrepをインストールしているとClaude Codeのファイルパス補完が動かない
この記事ではCalude Codeのファイルパス補完が動かなかったときのメモです。
TL;DR
-
Calude Codeのファイルパス補完が動かない -
aquaを使ってripgrep(rgコマンド)をインストールしていたのが原因だった -
USE_BUILTIN_RIPGREP環境変数を設定すると動くようになる-
~/.claude/settings.jsonにenvとして書くと良さそう
-
{
"permissions": {
"allow": ["Read(~/.zshrc)"],
"deny": ["Bash(curl:*)"]
},
"env": {
"USE_BUILTIN_RIPGREP": 1
}
}
環境
$ claude -v
1.0.17 (Claude Code)
$ aqua -v
aqua version 2.50.0
Claude Codeを使い始めた
Claude Maxプランを使えることになったのでClaude Code を使い始めました。
何が要因でこの性能が出ているのか私はよくわかっていないのですが、プロンプトやルールを頑張らなくてもかなり精度がよいので今週はAI系のコーディングツールとしてはClaude Codeしか使いませんでした。
個人的に感じたのは以下です。
- 定額なので「とりあえずやらせてみる」みたいな使い方ができる
- 「こんな雑な依頼の仕方では伝わらないな…(少なくても人間には)」みたいな指示でも自力で調べて対応してくれる
- なので複数ターミナルで雑に指示を出しながら並列で作業を進めることが可能
ライブラリのバージョンアップ的な「やらなきゃいけないけど直接的な顧客価値が薄いから優先度上がらないタスク」もガシガシ潰せてよいです。
ccusageで確認するとかなりの額になっていたので、従量課金では躊躇していたトークン量と上級モデルの使用が功を奏しているのかもしれません。
…というのは前置き(余談)なのですが、Claude Codeを使っていて1つ困っていたのがファイルパス補完が動かないことでした。
Claude Codeのファイルパス補完が動かない
Claude Codeは@を入力するか、文字入力に続けてTABキーを入力するとファイル名を補完してくれる機能があります。
╭─────────────────────────────────────────────────────────────────────────╮
│ > Try "write a test for <filepath>" │
╰-────────────────────────────────────────────────────────────────────────╯
! for bash mode double tap esc to undo
/ for commands shift + tab to auto-accept edits
@ for file paths ctrl + r for verbose output
# to memorize backslash (\) + return (⏎) for newline
この機能が私の環境では動きませんでした。
同僚に聞いても「デフォルトで動いているよ」と言われるし、他に同様の現象に悩んでいたのが周りには一人だけで、よくわからないままとりあえずIDE連携なので誤魔化していました。
aqua を使ってripgrep(rgコマンド)をインストールしていたのが原因だった
会社PC、私物PCで再現したので、自分の設定ファイルが問題だと思い、~.zshrcを一部ずつコメントアウトしながら検証したところ、ripgrepのインストール方法が原因でした。
Calude Codeはファイルパス補完にripgrepを利用しています。
私はripgrepをCLIツールのバージョン管理を行えるaquaを使ってグローバルインストールして使っていました。
aquaに定義したripgrepをアンインストールするとファイルパス補完が正しく動くのを確認しました。
Calude CodeにUSE_BUILTIN_RIPGREP環境変数を設定する
ドキュメントには載っておらず、以下のissueにしか言及されていないのですが、Calude CodeにはUSE_BUILTIN_RIPGREPという環境変数が存在します。
これを有効にすると、vendoerディレクトリ以下にビルドインされているripgrepを使うようになります。
$ ls ~/.claude/local/node_modules/@anthropic-ai/claude-code/vendor/ripgrep
arm64-darwin arm64-linux COPYING x64-darwin x64-linux x64-win32
環境変数名が"グローバル"すぎるのが気になるので、~/.calude/settings.jsonに指定して解決しました。
{
"permissions": {
"allow": ["Read(~/.zshrc)"],
"deny": ["Bash(curl:*)"]
},
"env": {
"USE_BUILTIN_RIPGREP": 1
}
}
おわりに
やっと他のみなさんと同じようにClaude Codeでファイルパス補完もできるようになりました。
IDE連携機能を使ってCursorからファイルパスをClaude Codeに送っていたのですが、これでClaude Codeに完結しそうです。
2025年になってからGoLandからCursorに移行し、Roo Codeも使っていたのですが、これならGoLandに戻れる[1]気がしますし、ターミナルで完結するならばNeovimまで戻っていいのでは?という気持ちになってます。
-
有償ツールなので当然と言えば当然なのかもしれませんが、JetBrainsIDEのファイル探索系のパフォーマンスはVSCode系ツールより圧倒的に高速です ↩︎
Discussion
こんにちは。 aqua の作者です。
aqua をご利用いただきありがとうございます。
など詳細が読み取れないのでなんとも言えませんが、もしかするとこちらの記事が参考になるかもしれません。
https://zenn.dev/shunsuke_suzuki/scraps/73914f56f3f860Claude Code は使ったことがないのでよくわかっていませんが、 ripgrep を AQUA_GLOBAL_CONFIG でインストールしているとしたら、
USE_BUILTIN_RIPGREPをenvで設定しているようにAQUA_GLOBAL_CONFIGをenvで設定すると解決するかもしれません。aqua大変便利に使わせていただいております。ありがとうございます!
ご助言ありがとうございます!ご推測の通り
ripgrepコマンドをAQUA_GLOBAL_CONFIGでインストールしていました。早速試してみたのですが、うまくいきませんでした…。
設定しなくても
AQUA_GLOBAL_CONFIGも見えているようなのですが 😢(問題自体は記事のやり方で解決できていて、どちらもちゃんと使えているので今後もaqua使わせていただきます!!)
お返事ありがとうございます。なるほど。そうなんですね。
自分の方でも時間あるときに Claude Code 試して再現するか確認してみます。
追記: 再現しました。
原因は分かりました。
$(aqua root-dir)/bin/rgが$(aqua root-dir)/aqua-proxyへの symbolic link なんですが、それを hard link にしてみたら解決しました。
根本解決策は検討中です。
詳細: https://zenn.dev/link/comments/6526d99cd4756f
ありがとうございます!!
同じsymbolic linkなHomebrewの
ripgrepだと動くのでこのへんが理由なんですかね 🤔もし問題ないなら https://github.com/anthropics/claude-code にも「こういうことがあるよ」とreportだけissueとして立ち上げてもいいでしょうか。
原因がaquaであることを知っていると、作ってもらったaquaのissueを見てわかるのですが、「
Claude Codeのファイルパス補完が動かない」しか知らない状態で調べると( https://github.com/anthropics/claude-code のissueしか調べないと)全然なぜなのかわからないので 😇そうだと思います。
ありがとうございます。助かります。
ただ aqua とその仕組みを知らないと理解が難しいかもしれませんね。
通常、 aqua は以下のようにツールをインストール・実行します。
$(aqua root-dir)/pkgs配下にインストールされ、$(aqua root-dir)/bin/rgに symbolic link が作られる$(aqua root-dir)/bin/rgが実行され、それが aqua-proxy への symbolic になっているので、 aqua-proxy が実行される。このとき $0 はrgaqua exec -- $0 "$@"を実行し、 aqua が実行される$0のバージョンを動的に決定し、実行するあとは説明した通り。
symbolic link を解決しつつコマンドのパスを取得してから絶対パスを指定してコマンドを実行すると aqua は現状動きません ($0 が期待されたものではないので)。
「対応策の共有[1]」という意味でissueは書いておきました。調査・検討ありがとうございました!
まず
USE_BUILTIN_RIPGREPが公式ページやclaude -hでも出てこない隠し環境変数だったりするので… ↩︎1.0.84から
USE_BUILTIN_RIPGREPがデフォルト有効になるので起きなくなりそう