Claude Media
Claude CodeでArch Linuxの検索が効かない原因と直し方

Claude CodeでArch Linuxの検索が効かない原因と直し方

Arch LinuxでSearch・@file・カスタムスキルが効かないのは同梱ripgrepの起動失敗が原因です。pacman導入とUSE_BUILTIN_RIPGREP設定、claude doctorでの確認手順をまとめます。

Arch LinuxでClaude Codeを使っていると、Searchツールや@fileメンション、カスタムサブエージェント、カスタムスキルが対象のファイルを見つけてくれないことがあります。公式のトラブルシューティングが挙げる原因は、Claude Codeに同梱されているripgrepバイナリがその環境で動かないことです。pacmanでシステム側のripgrepを入れ、同梱版の代わりに使わせれば直ります。

検索が効かないとき、どの順で切り分けるか

Claude CodeはSearchツール、@fileメンション、カスタムエージェントやカスタムスキルの検出にripgrep(rg)を使います。通常はインストーラーに同梱されたバイナリが動くので意識する場面はありません。同梱版が動かない環境では、検索が失敗する形で症状が現れます。

手順

検索が効かないときの切り分け

  1. 1

    まず検索が少ないだけか、見つからないのかを分ける

    WSLで/mnt/c配下のプロジェクトを検索しているなら、ripgrepの起動失敗とは別の問題です。後半の「よくあるつまずき」を先に読んでください。

  2. 2

    システム側のripgrepを入れる

    pacman -S ripgrepがwhich rgで見える状態にします。この時点では、まだ同梱版が使われます。

  3. 3

    USE_BUILTIN_RIPGREPを0にする

    シェルの環境変数かsettings.jsonのenvのどちらかに書きます。ここまで終えて初めて、システム側のrgが使われます。

  4. 4

    claude doctorのSearch行を見る

    OK (bundled)がrgのパスに変わっていれば切り替え済みです。変わっていなければ、手順2と3の両方がそろっているかを見直します。

  5. 5

    それでも見つからないなら別の原因を疑う

    実際に@メンションで検索を試し、権限やプロジェクトディレクトリの指定などripgrep以外を見ます。

OSごとのripgrepインストールコマンド

公式ドキュメントのtroubleshootingページには、主要な環境ごとにripgrepのインストールコマンドがタブで並んでいます。

環境インストールコマンド注意点
macOSインストールコマンドbrew install ripgrep注意点特になし
Ubuntu/Debianインストールコマンドsudo apt install ripgrep注意点特になし
Alpineインストールコマンドapk add ripgrep注意点communityリポジトリにあり、apkがパッケージを見つけられない場合は追加手順が必要
Archインストールコマンドpacman -S ripgrep注意点特になし
Windowsインストールコマンドwinget install BurntSushi.ripgrep.MSVC注意点特になし

Archのタブには追加の注記がなく、pacman -S ripgrepの1行だけが載っています。この後のUSE_BUILTIN_RIPGREPの設定は、インストールコマンドが変わってもすべての環境で共通です。

pacmanでripgrepを導入する

Arch Linuxではpacmanでripgrepを導入します。

pacman -S ripgrep

Alpineのタブには「apkがパッケージが無いと言ったらcommunityリポジトリを足す」という案内がありますが、Archのタブには同種の案内がありません。Alpine側の事情はClaude Code Alpine Linuxセットアップの手順と注意点にまとめています。

導入できたかどうかはwhich rgで確認できます。

which rg

パスが表示されれば、システム側のripgrepは使える状態です。

USE_BUILTIN_RIPGREPで同梱版からシステム版に切り替える

環境変数USE_BUILTIN_RIPGREPを0にすると、Claude Code同梱のrgの代わりにシステムにインストールされたrgが使われます。env-varsページの定義は「Set to 0 to use system-installed rg instead of rg included with Claude Code」の1行です。

設定方法は2つあります。1つはシェルの環境変数です。

export USE_BUILTIN_RIPGREP=0

もう1つはsettings.jsonのenvキーです。チームで設定を共有したい場合や、シェルの起動ファイルを触りたくない場合に向いています。

{
  "env": {
    "USE_BUILTIN_RIPGREP": "0"
  }
}

Alpineのようなmusl系ディストリビューションでも、setupページは同じUSE_BUILTIN_RIPGREP=0を指示しています。そちらではlibgcc・libstdc++・ripgrepが実行時に必要な依存として挙がっており、Alpineではripgrepの導入が前提条件です。Archのtroubleshootingタブにこうした前提の記載はなく、検索が失敗したときの対処としてripgrepが案内されています。

claude doctorのSearch行は何を示すか

設定が反映されたかどうかは、ターミナルからclaude doctorを実行して確認します。

claude doctor

claude doctorはセッションを開かず、--helpによればカレントディレクトリの設定ファイルを信頼確認なしで読む診断コマンドです。セッション内の/doctorが自動修正まで行う点は、Claude Codeの/doctorが自動修正までするチェックアップになった仕組みで扱っています。

v2.1.289(macOS)で、空の作業ディレクトリと空の設定ディレクトリを使って実行すると、冒頭は次のように出ます。Search行が、同梱版かシステム版かを示します。

Claude Code doctor
 
Running: native (2.1.289)
Platform: darwin-arm64
Path: ~/.local/share/claude/versions/2.1.289
Search: OK (bundled)
Auto-updates: enabled
claude doctor

Search行の読み方

  • OK (bundled)

    同梱のrgを使っています。USE_BUILTIN_RIPGREPが未設定のとき、この表示になります。

  • OK (rg のパス)

    システム側のrgに切り替わっています。USE_BUILTIN_RIPGREP=0にしてPATH上にダミーの実行ファイルrgを置いたところ、Search: OK (<そのパス>)と出ました。

  • OK (bundled) のまま

    USE_BUILTIN_RIPGREP=0でも、PATHにrgが無い環境ではOK (bundled)のままでした。pacmanの導入と環境変数は、両方そろって初めて表示が変わります。

pacman -S ripgrepを実行したのに表示が変わらないときは、まず環境変数が実行時のシェルまで届いているかを疑います。settings.jsonのenvに書いた場合は、そのファイルが読まれる場所(ユーザー設定かプロジェクト設定か)も確認してください。

検索が直ったかを実際に試す

claude doctorのSearch行が変わったら、Claude Codeを起動して実際に検索を試します。適当なキーワードで@メンションを打ち、対象のファイルが候補に出るかを見るのが手早い方法です。カスタムスキルやカスタムサブエージェントを使っているなら、/skillsや該当のサブエージェント名が一覧に出るかも合わせて確認します。

CLAUDE_CODE_USE_NATIVE_FILE_SEARCHとの違い

環境変数を探していると、似た名前のCLAUDE_CODE_USE_NATIVE_FILE_SEARCHに行き当たります。これは対象が違う別の設定です。

くらべる

似た名前の2つの環境変数

rgの実体を選ぶ

USE_BUILTIN_RIPGREP

0でシステムのrgを使います。Searchツールや@fileメンションが使うrgそのものを差し替えるので、同梱版が動かないときはこちらを使います。

検出方法を選ぶ

CLAUDE_CODE_USE_NATIVE_FILE_SEARCH

1で、カスタムコマンド・サブエージェント・出力スタイルの検出をripgrepではなくNode.jsのファイルAPIで行います。env-varsページには「Does not affect the Grep or file search tools」とあり、Searchツールの検索結果は変わりません。

env-varsページは後者を「同梱のripgrepが使えない、またはブロックされている環境向け」と位置付けています。カスタムコマンドやサブエージェントが見つからないだけなら試す余地がありますが、@fileやSearchまで直すにはUSE_BUILTIN_RIPGREP側が必要です。

サンドボックスを使っている場合のsandbox.ripgrep

Bashツールのサンドボックスを有効にしている場合、サンドボックスが使うripgrepはsettings.jsonのsandbox.ripgrepで別に指定できます。settings-referenceでは、このキーは既定で未設定です。その場合、サンドボックスはClaude Codeと同じバイナリを使います。同梱版か、USE_BUILTIN_RIPGREP=0のときのシステム版かは、環境変数で決まります。

sandbox.ripgrepが要るのは、サンドボックスにだけ別ビルドのrgを使わせたいときです。commandにrgのパスを書き、必要ならargsで先頭に付ける引数を足します。

{
  "sandbox": {
    "ripgrep": {
      "command": "/usr/local/bin/rg"
    }
  }
}

上の/usr/local/bin/rgはsettings-referenceの例の値です。自分の環境のパスはwhich rgの出力に合わせます。このキーのスコープは、settings-referenceにユーザー設定または管理設定と記されています。

Arch Linuxはシステム要件の一覧にない

setupページのシステム要件に並ぶOSは、macOS 13.0以降、Windows 10 1809以降またはWindows Server 2019以降、Ubuntu 20.04以降、Debian 10以降、Alpine Linux 3.19以降の5系統です。Arch Linuxは入っていません。一方、同じ公式ドキュメントのtroubleshootingには、Arch向けのpacmanタブが用意されています。サポートOSの一覧と不具合の対処手順で、扱いが非対称です。

ハードウェア(4GB以上のRAM、x64またはARM64プロセッサ)、シェル(Bash・Zsh・PowerShell・CMD)、ネットワーク接続は、OSを問わない共通の要件です。setupページの追加依存の欄は、ripgrepを「通常はClaude Codeに含まれる」と書き、検索が失敗するときはトラブルシューティングへ誘導しています。Arch向けの個別の下限バージョンは定義されていません。

よくあるつまずき

WSLで検索結果が少ないのはripgrepの問題ではない

WSLでファイルシステムをまたぐと、ディスク読み取り性能の影響で、期待より少ない件数しか返らないことがあります。公式によれば検索自体は動き、claude doctorのSearch行もOKと表示されます。対処はプロジェクトをLinux側のファイルシステム(/home/)に置くことと、ディレクトリやファイル種別を絞った検索を依頼することです。WSL固有の設定はClaude Code WSL2セットアップ — パスとNode.js、sandboxの落とし穴を参照してください。

まとめ

Arch Linuxで検索が効かないときは、pacman -S ripgrepとUSE_BUILTIN_RIPGREP=0をセットで入れ、claude doctorのSearch行がrgのパスに変わったかで成否を判断します。

参照した一次ソース

この記事の記述は、次の一次ソースと照合しています。更新時に参照先が変わった場合は一覧も更新します。

  1. code.claude.com/docs/en/troubleshooting
  2. code.claude.com/docs/en/setup
  3. code.claude.com/docs/en/env-vars
  4. code.claude.com/docs/en/settings-reference
この記事を共有:XはてブLinkedIn