Rustのエコシステムでは、cargo install <crate> を使うことで ripgrep、bat、eza、zellij などの高性能なCLIツールを手軽にインストールできます。
しかし、様々なツールを試しているうちに不要なバイナリが溜まってしまうことがあります。これらを安全かつ綺麗に削除するにはどうすればよいでしょうか?
本記事では、Cargoがバイナリを管理する仕組み、cargo uninstall コマンドの使い方、および手動削除の手順を分かりやすく解説します。
10歳でもわかる解説 (ELI5): Cargoのバイナリ管理の仕組み#
OSのターミナルを作業場の共通ツール掛け(ツールラック)に例えてみましょう:
cargo install <crate>を実行すると:Cargoはソースコードをダウンロードしてコンパイルし、完成した実行可能ファイルを$HOME/.cargo/binという共通の棚に掛けます。同時に、管理台帳(.crates2.json)に「どのツールを掛けたか」を記録します。cargo uninstall <crate>を実行すると:Cargoは管理台帳を確認し、該当クレートに紐づく実行ファイルを棚から取り外して削除し、台帳の記録を消去します。
flowchart TD
subgraph Install["インストール (cargo install)"]
CRATES_IO["Crates.io / Gitリポジトリ"] -->|ダウンロード & コンパイル| CARGO_BUILD["Cargoコンパイラ"]
CARGO_BUILD -->|バイナリを配置| BIN_DIR["$HOME/.cargo/bin<br>(環境変数PATH内)"]
CARGO_BUILD -->|メタデータを記録| METADATA[".crates2.json<br>(メタデータ追跡)"]
end
subgraph Uninstall["アンインストール (cargo uninstall)"]
CMD["cargo uninstall <crate>"] -->|参照| METADATA
CMD -->|実行ファイルを削除| BIN_DIR
CMD -->|メタデータを更新・削除| METADATA
end
1. インストール済みバイナリの一覧表示#
パッケージを削除する前に、現在システムにインストールされているCargoバイナリを確認します。
ターミナルで以下のコマンドを実行します:
cargo install --listbash出力結果には、クレート名、バージョン、および含まれる実行ファイルが表示されます:
bat v0.24.0:
bat
ripgrep v14.1.0:
rg
cargo-update v13.3.0:
cargo-install-update
cargo-install-update-configtext[!NOTE] 1つのクレートが複数のバイナリをインストールする場合があります(例:
cargo-updateはcargo-install-updateとcargo-install-update-configの2つを生成)。また、クレート名とバイナリ名が異なる場合もあります(例:ripgrepクレートのコマンド名はrg)。
2. cargo uninstall による基本のアンインストール#
cargo install で導入したパッケージを削除する基本構文は以下のとおりです:
cargo uninstall <package_name>bash具体例:#
例えば ripgrep をアンインストールしたい場合:
cargo uninstall ripgrepbashCargoからの出力例:
Removing /Users/username/.cargo/bin/rgtext.cargo/bin ディレクトリから実行ファイル rg が即座に削除され、管理メタデータが更新されます。
3. 応用コマンドと便利なオプション#
3.1. 特定のバイナリのみを指定して削除 (--bin)#
クレートが複数の実行ファイルをインストールしており、その中の1つだけを削除したい場合は --bin フラグを使用します:
cargo uninstall <package_name> --bin <binary_name>bash例:cargo-update クレートから cargo-install-update-config のみを取り除く場合:
cargo uninstall cargo-update --bin cargo-install-update-configbash3.2. カスタムRootディレクトリからの削除 (--root)#
--root オプションを指定して特定ディレクトリにインストールしていた場合は、アンインストール時にも同じパスを指定します:
cargo uninstall --root /custom/path <package_name>bash4. 手動での削除 (Manual Removal)#
メタデータファイルが破損している場合や直接ファイルを操作したい場合は、Cargoのバイナリディレクトリから直接削除できます。
デフォルトの保存場所:#
- macOS / Linux:
$HOME/.cargo/bin/(または~/.cargo/bin/) - Windows:
%USERPROFILE%\.cargo\bin\(例:C:\Users\ユーザー名\.cargo\bin\)
手動削除コマンド:#
macOS / Linux の場合:
rm ~/.cargo/bin/rgbashWindows (PowerShell) の場合:
Remove-Item "$HOME\.cargo\bin\rg.exe"powershell[!WARNING] 手動で削除した場合、バイナリ自体は消去されますが、
.crates2.jsonのメタデータ記録に残る場合があります。そのため、メタデータが更新されるまでcargo install --listに表示され続けることがあります。
5. よくあるトラブルシューティング#
トラブル 1: error: no package found with name ...#
バイナリ名とパッケージ(クレート)名を混同している場合に発生します。
- 誤り:
cargo uninstall rg - 正しい:
cargo uninstall ripgrep
cargo install --list で正確なクレート名を確認してください。
トラブル 2: 削除したはずのコマンドがまだ実行できる#
cargo uninstall 実行後もコマンドが動く場合、以下の原因が考えられます:
- シェルのパスクラウドキャッシュ: シェル(Zsh/Bash)がメモリ内に旧パスをキャッシュしています。キャッシュをクリアしてください:
- Zsh:
rehash - Bash:
hash -r
- Zsh:
- 他のパッケージマネージャで導入されている: Homebrew (
brew)、APT、Scoop等で別途インストールされている可能性があります。以下のコマンドで確認してください:バイナリのパス確認
bashwhich <コマンド名>
コマンド一覧表#
| 操作 | 実行コマンド |
|---|---|
| インストール済み一覧の確認 | cargo install --list |
| パッケージの削除 | cargo uninstall <package_name> |
| 特定バイナリの個別削除 | cargo uninstall <package_name> --bin <binary_name> |
| カスタムパスからの削除 | cargo uninstall --root <path> <package_name> |
| バイナリ保存先パス | ~/.cargo/bin/ (Unix) または %USERPROFILE%\.cargo\bin\ (Windows) |