静かな革命がUnixコマンドラインを再形成しています。何十年もの間私たちに仕えてきたクラシックなCベースのユーティリティが、一つずつ、より高速で、より安全で、格段にユーザーフレンドリーなRustの代替ツールに置き換えられています。これはUnix哲学を放棄することではありません。モダンなツールと、バグのカテゴリ全体を排除する言語で、それをより良く実装することです。
このトレンドは、ripgrepのような個別プロジェクトが、Rustで書かれたgrepの代替がGNU grepより意味のある速さを持ちながら、より良いデフォルト設定も持てることを証明したことから始まりました。その成功は開発の波を引き起こしました。今日、日常のワークフローのほぼすべてのコアユーティリティをRustの代替に置き換えることができ、その結果は、より生産的で、より視覚的に情報豊富で、より楽しく使えるターミナル体験です。
このガイドでは、必須のRust CLIツール、オリジナルに対する利点、各ツールの実践的な設定、そしてそれらを統合されたモダンなターミナルセットアップにまとめる方法を紹介します。
RustがCLIツール分野で勝利している理由
モダンCLIツールにおけるRustの優位性は偶然ではありません。この言語のいくつかの特性が、この領域に特別に適しています。
ガベージコレクションなしのパフォーマンス。 RustはCのパフォーマンスに匹敵するか、それを超えるバイナリを生成します。ランタイムなし、ガベージコレクタなし、JITのウォームアップなし。CLIツールは即座に起動し、ディスクが配信できる速度でデータを処理する必要があります。Rustはこれを実現します。
デフォルトでメモリ安全。 クラシックなCユーティリティはCVEの着実な発生源でした。strings、file、tarなどの基本ツールのバッファオーバーフローが実際のエクスプロイトにつながりました。Rustの所有権モデルはコンパイル時にこれらのバグを排除します。信頼されない入力を処理するツール(ほぼすべてのツール)にとって、これは重要です。
恐れのない並行性。 現代のマシンには多くのコアがありますが、ほとんどのクラシックUnixツールはシングルスレッドです。Rustの型システムは並列処理を安全かつ簡単にします。ripgrepやfdのようなツールはデフォルトで並列ディレクトリ走査と検索を使用し、大規模コードベースで劇的な高速化を実現します。
優れたCLIライブラリ。 clapクレートは、自動生成されるヘルプ、シェル補完、バリデーション付きの引数パーシングを提供します。crosstermとratatuiはクロスプラットフォームのターミナルUIを提供します。indicatifはプログレスバーを提供します。エコシステムは成熟し、よくメンテナンスされています。
簡単な配布。 cargo install ツール名がどこでも動きます。autoconfなし、システムライブラリ依存なし、バージョン競合なし。すべてのLinux、macOS、またはWindowsマシンで動作する単一の静的バイナリです。
ファイル表示:bat(catの代替)
batはシンタックスハイライト、Git統合、自動ページングを備えたcatクローンです。一度使うと、プレーンなcatはモノクロモニターでコードを読んでいるように感じます。
# Install
cargo install bat
# Or via package manager
brew install bat # macOS
sudo apt install bat # Debian/Ubuntu (binary name: batcat)
# Basic usage - syntax highlighting is automatic
bat src/main.rs
# Show specific lines
bat --line-range 10:20 config.yaml
# Show non-printable characters
bat --show-all data.bin
# Plain output (for piping, disables paging and decorations)
bat --plain --pager=never data.csv | head -20
# Use as a man page colorizer
export MANPAGER="sh -c 'col -bx | bat -l man -p'"
# Diff integration
bat --diff old_file.py new_file.py
設定は~/.config/bat/configにあります:
# ~/.config/bat/config
--theme="Catppuccin Mocha"
--style="numbers,changes,header,grid"
--italic-text=always
--map-syntax "*.conf:INI"
--map-syntax ".env*:Dotenv"
--map-syntax "*.dockerfile:Dockerfile"
batはGitと統合して、ガターに変更マーカーを表示します。Gitインデックスに対して追加、変更、または削除された行にはカラーマーカーが付きます。これにより、単純なファイル表示が即座のコードレビューツールに変わります。
シェル設定でalias cat='bat --paging=never'を設定すると、パイプ互換性を維持したシームレスな置き換えになります。
ファイル一覧:eza(lsの代替)
eza(旧exa)は、Gitステータス、アイコン、ツリービュー、合理的なカラーデフォルトを備えたlsのモダンな代替です。exaがアーカイブされた後、標準的な推奨となり、アクティブにメンテナンスされています。
# Install
cargo install eza
# Basic listing with icons and Git status
eza --icons --git
# Long format with headers
eza -lh --icons --git --header
# Tree view with depth limit
eza --tree --level=3 --icons
# Sort by modification time, newest first
eza -l --sort=modified --reverse
# Show only directories
eza -D --icons
# Grid view for wide terminals
eza --grid --icons
# Comprehensive alias
alias ll='eza -lah --icons --git --header --group-directories-first'
alias lt='eza --tree --level=3 --icons --git'
alias la='eza -a --icons --git'
ezaのGit統合はリスト内で各ファイルのステータスを直接表示します:
Permissions Size User Date Modified Git Name
drwxr-xr-x - nick 21 May 10:30 -I src/
.rw-r--r-- 4.2k nick 21 May 09:15 M README.md
.rw-r--r-- 890 nick 20 May 14:22 -- Cargo.toml
.rw-r--r-- 2.1k nick 21 May 10:30 N new_module.rs
Mは変更されたファイル、Nは新しい未追跡ファイル、--はクリーンなファイルを示します。ファイルシステムレベルでのこのGitステータスの可視性により、lsとgit statusの間の絶え間ない行き来が排除されます。
ファイル検索:fd(findの代替)
fdはfindの高速でユーザーフレンドリーな代替です。デフォルト設定が95%の場合に実際に必要なものと一致します:正規表現パターン、.gitignore認識、スマートな大文字小文字の区別、並列実行。
# Install
cargo install fd-find
# Find files by name (regex by default)
fd "\.rs$"
# Case-insensitive search
fd -i readme
# Find by extension
fd -e py
# Find and execute a command
fd -e log --exec gzip {}
# Parallel execution with all results
fd -e test.js --exec-batch prettier --write
# Exclude directories
fd -E node_modules -E target "config"
# Find only directories
fd --type d "test"
# Find files modified in the last 24 hours
fd --changed-within 1d
# Show results with full details
fd -e rs --exec-batch eza -l
# Find files larger than 10MB
fd --size +10m
# Find empty files
fd --type f --type empty
大規模モノレポ(100,000ファイル)でのパフォーマンス比較:
# GNU find
time find . -name "*.rs" -type f
# real 0m0.520s
# fd
time fd -e rs
# real 0m0.087s
# fd is ~6x faster due to parallel directory traversal
# and automatic .gitignore filtering (skips target/, node_modules/, etc.)
fdの.gitignore認識は開発作業におけるキラー機能です。典型的なプロジェクトでは、findはnode_modules、target、.git、ビルドアーティファクトから何千もの結果を返します。fdはデフォルトでこれらすべてをスキップし、気になるファイルだけを表示します。
コンテンツ検索:ripgrep(grepの代替)
ripgrep(rg)はRust CLI革命を始めたと言えるツールです。利用可能な最速のコード検索ツールであり、即座に生産的にするスマートなデフォルト設定を備えています。
# Install
cargo install ripgrep
# Basic search (recursive by default, respects .gitignore)
rg "fn main"
# Search specific file types
rg -t rust "async fn"
rg -t py "import torch"
# Search with context lines
rg -C 3 "TODO|FIXME|HACK"
# Count matches per file
rg -c "unwrap()"
# Replace text (preview)
rg "old_function" --replace "new_function"
# Search compressed files
rg -z "error" logs.gz
# Fixed strings (no regex interpretation)
rg -F "user.name?.first"
# Multiline search
rg -U "struct.*\{[^}]*name.*\}"
# Search hidden files and ignored files
rg --hidden --no-ignore "SECRET_KEY"
# Output as JSON for programmatic use
rg --json "pattern" | python3 process_results.py
# Files that do NOT match
rg --files-without-match "Copyright" --type rust
ripgrepは正規表現マッチングに有限オートマトンを使用するため、すべての入力で予測可能なO(n)パフォーマンスを提供します。PCREベースのツールで壊滅的なバックトラッキングを引き起こす病的な正規表現パターンが、ripgrepでは線形時間で実行されます。
~/.config/ripgrep/configでの設定:
--smart-case
--hidden
--glob=!.git
--glob=!node_modules
--glob=!target
--colors=match:fg:magenta
--colors=match:style:bold
ディスク使用量:dust(duの代替)
dustは、大きなディレクトリを即座に明確にするバーチャートインターフェースで、ディスク使用量の即時の視覚的な概要を提供します。
# Install
cargo install du-dust
# Basic usage (shows visual bars)
dust
# Limit depth
dust -d 2
# Show apparent size (not disk usage)
dust -s
# Reverse sort (smallest first)
dust -r
# Ignore specific directories
dust -X node_modules -X .git
# Show only N items
dust -n 15
# Show full file paths
dust -p
# Analyze a specific directory
dust -d 3 /var/log
出力例:
4.2G ┌── node_modules │████████████████████████████ │ 52%
1.8G ├── target │████████████ │ 22%
890M ├── dist │██████ │ 11%
420M ├── .git │███ │ 5%
380M ├── data │██ │ 5%
180M ├── assets │█ │ 2%
92M ├── src │ │ 1%
45M ├── docs │ │ 1%
8.0G ┌── . │████████████████████████████████│ 100%
この視覚的な出力は「ディスクスペースはどこに消えているのか?」という質問に一目で答え、典型的なdu -sh * | sort -hパイプラインを置き換えます。
プロセス表示:procs(psの代替)
procsは、Dockerコンテナ認識とツリービューを含む、カラフルで機能豊富なプロセスビューアでpsを置き換えます。
# Install
cargo install procs
# Basic process list
procs
# Search by process name
procs firefox
# Tree view
procs --tree
# Watch mode (refresh every 2 seconds)
procs --watch
# Show specific columns
procs --insert TcpPort,Docker
# Sort by memory usage
procs --sortd mem
# Show only processes by current user
procs --or "user=$(whoami)"
procsは自動的にDockerコンテナを検出し、プロセスがどのコンテナに属しているかを表示します。また、root権限なしでTCP/UDPポートをプロセスにマッピングし、一般的なlsof -iやss -tlnpパターンを置き換えます。
システム監視:bottom(topの代替)
bottom(btm)は、CPU、メモリ、ネットワーク、ディスク、温度、プロセスのウィジェットを含むリッチなTUIを備えたクロスプラットフォームのシステムモニターです。
# Install
cargo install bottom
# Launch with default layout
btm
# Launch with specific refresh rate
btm --rate 500
# Basic mode (simpler, top-like interface)
btm --basic
# Battery widget
btm --battery
# Configuration file
btm --config ~/.config/bottom/bottom.toml
~/.config/bottom/bottom.tomlの設定:
[flags]
rate = 1000
dot_marker = false
temperature_type = "c"
color = "gruvbox"
[colors]
table_header_color = "LightBlue"
widget_title_color = "Gray"
[[row]]
[[row.child]]
type = "cpu"
[[row]]
ratio = 2
[[row.child]]
type = "mem"
[[row.child]]
type = "net"
[[row]]
[[row.child]]
type = "proc"
default = true
bottom内のキーボードショートカット:ddでプロセス終了、/で検索、tでツリーモード切替、Tabでウィジェットフォーカス切替。システム監視のためのモダンIDEのような感覚です。
差分比較:difftastic(diffの代替)
difftasticはコード構造を理解します。行を比較する代わりに、ファイルをシンタックスツリーにパースし、ツリーを比較します。結果は、どの行が変更されたかだけでなく、意味的に何が実際に変わったかを示すdiffです。
# Install
cargo install difftastic
# Compare two files
difft old.py new.py
# Use as git diff tool
git config --global diff.tool difftastic
git config --global difftool.difftastic.cmd 'difft "$LOCAL" "$REMOTE"'
git config --global difftool.prompt false
# Use inline with git diff
export GIT_EXTERNAL_DIFF=difft
git diff HEAD~1
# Limit display width
difft --display inline old.rs new.rs
# Color output control
difft --color always file_a.go file_b.go
difftasticは50以上のプログラミング言語をサポートしています。ファイル内で関数をある場所から別の場所に移動すると、difftasticはそれを削除+追加ではなく移動として表示します。関数全体で変数名を変更すると、変数が現れるすべての行ではなく、名前の変更だけをハイライトします。
この構造的理解はコードレビューを劇的に効率化します。リファクタリングコミットにおけるdiffのシグナル対ノイズ比がオーダーオブマグニチュード改善します。
ベンチマーク:hyperfine
hyperfineは、統計分析、ウォームアップ実行、パラメータスイープ、複数形式へのエクスポートを提供するコマンドラインベンチマークツールです。
# Install
cargo install hyperfine
# Basic benchmark
hyperfine 'fd -e py'
# Compare two commands
hyperfine 'find . -name "*.py"' 'fd -e py'
# With warmup runs
hyperfine --warmup 5 'rg pattern large_file.txt'
# Parameter sweep
hyperfine --parameter-scan threads 1 8 'parallel -j {threads} process_file ::: *.dat'
# Export results
hyperfine --export-markdown results.md 'command1' 'command2'
hyperfine --export-json results.json 'command1' 'command2'
# Set minimum number of runs
hyperfine --min-runs 20 'my_program'
# Prepare and cleanup commands
hyperfine \
--prepare 'sync; echo 3 | sudo tee /proc/sys/vm/drop_caches' \
'grep -r pattern /usr/src/linux' \
'rg pattern /usr/src/linux'
# Shell selection
hyperfine --shell=none './my_binary --flag'
出力例:
Benchmark 1: find . -name "*.py" -type f
Time (mean +/- sd): 512.3 ms +/- 24.1 ms [User: 89.2 ms, System: 421.1 ms]
Range (min ... max): 478.9 ms ... 556.7 ms 10 runs
Benchmark 2: fd -e py
Time (mean +/- sd): 86.4 ms +/- 5.3 ms [User: 152.8 ms, System: 298.4 ms]
Range (min ... max): 79.1 ms ... 95.2 ms 34 runs
Summary
fd -e py ran 5.93 +/- 0.46 times faster than find . -name "*.py" -type f
シェル拡張:starship、zoxide、atuin
シェル自体を変革する3つのツール。
Starshipは高速でミニマル、無限にカスタマイズ可能なクロスシェルプロンプトです:
# Install
curl -sS https://starship.rs/install.sh | sh
# Add to shell
echo 'eval "$(starship init bash)"' >> ~/.bashrc
echo 'eval "$(starship init zsh)"' >> ~/.zshrc
~/.config/starship.tomlの設定:
[character]
success_symbol = "[>](bold green)"
error_symbol = "[>](bold red)"
[directory]
truncation_length = 3
truncation_symbol = ".../"
[git_branch]
symbol = " "
[rust]
symbol = " "
[python]
symbol = " "
[nodejs]
symbol = " "
[docker_context]
symbol = " "
zoxideはあなたの習慣を学習するスマートなcdです:
# Install
cargo install zoxide
# Initialize
eval "$(zoxide init bash)"
# Usage
z projects # Jump to most-used directory matching "projects"
z src test # Jump to directory matching both "src" and "test"
zi # Interactive selection with fzf
atuinはシェル履歴をSQLiteデータベース、同期、ファジー検索で置き換えます:
# Install
cargo install atuin
# Initialize
eval "$(atuin init bash)"
# Search history (Ctrl+R replacement)
# Shows full-text fuzzy search with timestamps,
# directory context, and exit codes
# Import existing history
atuin import auto
# Search with filters
atuin search --after "2026-05-01" --exit 0 "docker"
Gitワークフロー:lazygitとdelta
lazygitはGit操作のための完全なターミナルUIを提供します:
# Install
go install github.com/jesseduffield/lazygit@latest
# Or
brew install lazygit
# Launch in current repo
lazygit
# Key bindings within lazygit:
# Space - stage/unstage file
# c - commit
# p - push
# P - pull
# b - branch operations
# m - merge
# r - rebase interactively
deltaはGit、diff、grepの出力用のシンタックスハイライトペイジャーです:
# Install
cargo install git-delta
# Configure in ~/.gitconfig
# [core]
# pager = delta
# [interactive]
# diffFilter = delta --color-only
# [delta]
# navigate = true
# side-by-side = true
# line-numbers = true
# syntax-theme = Catppuccin-mocha
モダンなターミナルセットアップの構築
これらすべてのツールを統合した完全なシェル設定です:
# ~/.bashrc or ~/.zshrc - Modern Rust CLI toolkit
# Core replacements
alias cat='bat --paging=never'
alias ls='eza --icons --group-directories-first'
alias ll='eza -lah --icons --git --header --group-directories-first'
alias lt='eza --tree --level=3 --icons --git'
alias la='eza -a --icons --git'
alias find='fd'
alias grep='rg'
alias du='dust'
alias ps='procs'
alias top='btm'
alias diff='difft'
# Git enhancements
alias lg='lazygit'
export GIT_EXTERNAL_DIFF=difft
# Shell enhancements
eval "$(starship init bash)"
eval "$(zoxide init bash)"
eval "$(atuin init bash)"
# bat as man pager
export MANPAGER="sh -c 'col -bx | bat -l man -p'"
# ripgrep config
export RIPGREP_CONFIG_PATH="$HOME/.config/ripgrep/config"
# fzf integration with fd
export FZF_DEFAULT_COMMAND='fd --type f --hidden --follow --exclude .git'
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
export FZF_ALT_C_COMMAND='fd --type d --hidden --follow --exclude .git'
一つのコマンドですべてインストール:
cargo install bat eza fd-find ripgrep du-dust procs bottom difftastic hyperfine zoxide atuin git-delta starship
パフォーマンス比較:Rust vs C実装
Rust CLIツールのパフォーマンス上の利点は3つのソースから来ています:より良いデフォルト設定(無関係なファイルの無視)、並列処理、モダンなアルゴリズム。200,000ファイルのモノレポでの代表的なベンチマークです:
| タスク | クラシックツール | Rustツール | 高速化 |
|---|---|---|---|
| 拡張子でファイル検索 | find 520ms |
fd 87ms |
6.0x |
| 再帰テキスト検索 | grep -r 4.2s |
rg 0.31s |
13.5x |
| ディスク使用量分析 | du -sh 1.8s |
dust 0.9s |
2.0x |
| ファイル一覧(大きなディレクトリ) | ls -la 340ms |
eza -la 290ms |
1.2x |
最大の高速化は検索ツール(ripgrep、fd)から来ています。並列処理とインテリジェントなファイルフィルタリングを組み合わせているからです。より単純なツール(eza vs ls)での小さな高速化は、オリジナルのツールがすでにその単純なタスクに対して十分に最適化されていたことを反映しています。
一部のベンチマークは正確な比較ではないことに注意してください。fdがfindより速いのは、部分的にはデフォルトで.gitignoreにマッチするファイルをスキップするためです。fdにすべてを検索させると(fd --no-ignore --hidden)、差は縮まります。ポイントは、Rustツールのデフォルトの動作が開発者が実際に望むものと一致しており、生のスループットが似ていても実際にはより速くなるということです。
これらのツールは日々の開発者体験における真の改善を表しています。実験的ではありません。安定し、よくメンテナンスされ、スタートアップから大手テクノロジー企業まで幅広い組織でプロダクションで使用されています。まだクラシックなcoreutilsを使用しているなら、1週間Rustの代替を試してみてください。ほとんどの人は元に戻りません。