ターミナル生産性ツール集|starship・fzf・ripgrep・bat・exa活用術

kento_morota 16分で読めます

エンジニアにとってターミナルは最も長い時間を過ごす場所の一つです。しかし、デフォルトのコマンドをそのまま使っていませんか。従来のls、grep、catなどのコマンドには、より高速で高機能なモダン代替ツールが存在します。

本記事では、starship、fzf、ripgrep、bat、ezaといったモダンCLIツールの導入方法と実践的な活用テクニックを解説し、ターミナル作業の生産性を劇的に向上させる方法を紹介します。

モダンCLIツールとは?従来コマンドとの違い

近年、Rustをはじめとした高速な言語で書き直された次世代のCLIツールが数多く登場しています。これらのツールは、従来のUnixコマンドの機能を踏襲しつつ、大幅な速度向上と使い勝手の改善を実現しています。

なぜモダンCLIツールが注目されるのか

圧倒的な速度:RustやGoで書かれたツールは、C言語ベースの従来ツールと同等かそれ以上のパフォーマンスを発揮します。特に大規模なプロジェクトでの検索やファイル操作で差が顕著です。

優れたデフォルト設定:シンタックスハイライト、カラー出力、Gitとの統合など、追加設定なしで便利な機能が使えます。

直感的なインターフェース:分かりやすいエラーメッセージ、ヘルプテキスト、対話的な操作など、ユーザー体験が大幅に改善されています。

クロスプラットフォーム:Windows、macOS、Linuxのすべてで同じように動作するため、環境による差異を気にする必要がありません。

導入の前提と全体像

本記事で紹介するツールは以下の5つです。それぞれが従来のどのコマンドの代替になるかを整理します。

starship:プロンプトのカスタマイズ(従来のPS1設定の代替)

fzf:ファジーファインダー(対話的な検索・選択)

ripgrep(rg):grep の高速代替

bat:cat の高機能代替

eza:ls の高機能代替(旧exa の後継)

これらのツールは独立して使用できますが、組み合わせることで相乗効果を発揮します。

starship:美しくカスタマイズ可能なプロンプト

starshipは、Rustで書かれた高速でカスタマイズ可能なシェルプロンプトです。Bash、Zsh、Fish、PowerShellなど主要なシェルすべてに対応しています。

インストールと基本設定

# macOS(Homebrew)
brew install starship

# Linux(インストールスクリプト)
curl -sS https://starship.rs/install.sh | sh

# Windows(Scoop)
scoop install starship

インストール後、シェルの設定ファイルに以下を追加します。

# Bash(~/.bashrc)
eval "$(starship init bash)"

# Zsh(~/.zshrc)
eval "$(starship init zsh)"

# Fish(~/.config/fish/config.fish)
starship init fish | source

これだけで、Gitブランチ名、プログラミング言語のバージョン、コマンドの実行時間などが自動的にプロンプトに表示されるようになります。

starship.tomlでカスタマイズ

設定ファイルは~/.config/starship.tomlに配置します。

# 全体設定
format = """
$directory\
$git_branch\
$git_status\
$nodejs\
$python\
$rust\
$cmd_duration\
$line_break\
$character"""

# ディレクトリ表示
[directory]
truncation_length = 3
truncate_to_repo = true

# Git ブランチ
[git_branch]
symbol = " "
format = "on [$symbol$branch]($style) "

# Git ステータス
[git_status]
conflicted = "="
ahead = "⇡"
behind = "⇣"
untracked = "?"
modified = "!"

# コマンド実行時間(2秒以上で表示)
[cmd_duration]
min_time = 2000
format = "took [$duration]($style) "

# Node.js
[nodejs]
format = "via [$symbol($version)]($style) "

# プロンプト文字
[character]
success_symbol = "[❯](green)"
error_symbol = "[❯](red)"

starshipはプロジェクトのディレクトリに応じて自動的に表示内容を切り替えます。Node.jsプロジェクトではNode.jsのバージョンが、Pythonプロジェクトではnのバージョンが表示され、不要な情報は非表示になります。

fzf:対話的ファジーファインダー

fzfは、コマンドラインでの対話的なファジー検索を実現するツールです。ファイル検索、コマンド履歴の検索、プロセスの選択など、あらゆる場面で活用できます。

インストールと基本機能

# macOS
brew install fzf
# シェル統合のインストール
$(brew --prefix)/opt/fzf/install

# Linux(apt)
sudo apt install fzf

# Linux(git clone)
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

fzfをインストールすると、以下のキーバインドが自動設定されます。

Ctrl+R:コマンド履歴のファジー検索。過去に実行したコマンドを曖昧検索で素早く見つけられます。これだけでもfzfを導入する価値があります。

Ctrl+T:ファイルのファジー検索。カレントディレクトリ以下のファイルを検索し、選択したパスがコマンドラインに挿入されます。

Alt+C:ディレクトリのファジー検索。選択したディレクトリにcdします。

実践的な活用例

fzfの真価は、パイプと組み合わせたときに発揮されます。

# Gitブランチの選択と切り替え
git branch | fzf | xargs git checkout

# プロセスの検索と終了
ps aux | fzf | awk '{print $2}' | xargs kill

# docker コンテナの選択
docker ps | fzf | awk '{print $1}' | xargs docker logs

# 検索してVS Codeで開く
fzf --preview 'bat --color=always {}' | xargs code

--previewオプションを使うと、選択中の項目のプレビューをリアルタイムで表示できます。後述するbatと組み合わせると、シンタックスハイライト付きのファイルプレビューが実現します。

シェルエイリアスの設定

よく使う組み合わせはエイリアスとして登録しておくと便利です。

# ~/.bashrc or ~/.zshrc

# fzf でファイルを検索してエディタで開く
alias fe='fzf --preview "bat --color=always {}" | xargs -r code'

# fzf で Git ブランチを切り替え
alias gb='git branch -a | fzf | sed "s/remotes\/origin\///" | xargs git checkout'

# fzf でコミット履歴を表示
alias gl='git log --oneline | fzf --preview "git show {1}"'

ripgrep(rg):超高速テキスト検索

ripgrep(コマンド名:rg)は、grepの代替として開発されたRust製の高速テキスト検索ツールです。

インストールと基本的な使い方

# macOS
brew install ripgrep

# Linux(apt)
sudo apt install ripgrep

# Windows(Scoop)
scoop install ripgrep

基本的な使い方はgrepとほぼ同じですが、デフォルトの挙動がはるかに便利です。

# 基本検索(カレントディレクトリ以下を再帰的に検索)
rg "pattern"

# 特定のファイルタイプに限定
rg "useState" --type ts

# 大文字小文字を無視
rg -i "error"

# 正規表現で検索
rg "function\s+\w+\("

# 特定のディレクトリを除外
rg "TODO" --glob '!node_modules'

# ファイル名のみ表示
rg -l "import React"

grepとの比較とripgrepの優位性

速度:大規模なコードベースでの検索で、grepの数倍から数十倍の速度を実現します。Rustの並列処理と最適化されたアルゴリズムによるものです。

.gitignoreの自動適用:デフォルトで.gitignoreに記載されたパスを除外します。node_modulesdistなどが自動的にスキップされるため、ノイズのない検索結果が得られます。

バイナリファイルのスキップ:画像やコンパイル済みファイルなどのバイナリファイルを自動的にスキップします。

Unicodeサポート:日本語を含むマルチバイト文字の検索も正確に行えます。

設定ファイルによるカスタマイズ

環境変数RIPGREP_CONFIG_PATHで設定ファイルを指定できます。

# ~/.ripgreprc
--smart-case
--hidden
--glob=!.git
--glob=!node_modules
--glob=!*.min.js
--glob=!package-lock.json
# ~/.bashrc or ~/.zshrc
export RIPGREP_CONFIG_PATH="$HOME/.ripgreprc"

bat:シンタックスハイライト付きcat

batは、catコマンドの高機能代替です。シンタックスハイライト、行番号表示、Git差分表示などを標準で備えています。

インストールと基本的な使い方

# macOS
brew install bat

# Linux(apt)
sudo apt install bat
# 注:Ubuntuではbatcatという名前になる場合があります
# その場合はエイリアスを設定
alias bat='batcat'

# Windows
scoop install bat

基本的な使い方はcatと同じですが、出力が格段にリッチになります。

# ファイルの表示(シンタックスハイライト+行番号)
bat src/index.ts

# 複数ファイルの表示
bat src/*.ts

# 言語を明示的に指定
bat --language=json config.txt

# 行番号なし、装飾なしで表示(パイプ用)
bat --plain file.txt

# 特定の行範囲を表示
bat --line-range=10:20 src/index.ts

# Git差分のある行をハイライト表示
bat --diff src/index.ts

batの便利な活用法

manページのカラー表示:環境変数を設定することで、manページもbatで表示できます。

export MANPAGER="sh -c 'col -bx | bat -l man -p'"

fzfのプレビューに使用:前述のfzfと組み合わせて、ファイル選択時にハイライト付きプレビューを表示できます。

export FZF_DEFAULT_OPTS="--preview 'bat --color=always --style=numbers --line-range=:500 {}'"

テーマのカスタマイズbat --list-themesで利用可能なテーマを確認し、--themeオプションやBAT_THEME環境変数で変更できます。

# 利用可能なテーマを確認(プレビュー付き)
bat --list-themes | fzf --preview="bat --theme={} --color=always src/index.ts"

# テーマを設定
export BAT_THEME="Dracula"

eza:モダンなls代替

eza(旧exa の後継プロジェクト)は、lsコマンドの高機能代替です。カラー出力、アイコン表示、Git状態の表示などが標準で利用できます。

インストールと基本的な使い方

# macOS
brew install eza

# Linux(apt - Ubuntu 24.04以降)
sudo apt install eza

# Cargo(Rustがインストール済みの場合)
cargo install eza
# 基本表示(カラー+アイコン)
eza --icons

# 詳細表示(パーミッション、サイズ、更新日時)
eza -l --icons

# ツリー表示
eza --tree --level=2 --icons

# Git状態を表示
eza -l --git --icons

# 隠しファイルも表示
eza -la --icons

# サイズ順にソート
eza -l --sort=size --icons

# 更新日時順にソート
eza -l --sort=modified --icons

エイリアス設定のおすすめ

lsコマンドの置き換えとして、以下のエイリアスを設定すると便利です。

# ~/.bashrc or ~/.zshrc
alias ls='eza --icons'
alias ll='eza -l --icons --git'
alias la='eza -la --icons --git'
alias lt='eza --tree --level=2 --icons'

これにより、普段のlsコマンドの使い方を変えずに、リッチな出力を得ることができます。

ツールの組み合わせと全体設定

個々のツールを導入するだけでなく、組み合わせて使うことで相乗効果を発揮します。

シェル設定ファイルのまとめ

すべてのツールの設定を整理した.bashrcまたは.zshrcの例を示します。

# ===== モダンCLIツール設定 =====

# starship
eval "$(starship init zsh)"

# ripgrep 設定
export RIPGREP_CONFIG_PATH="$HOME/.ripgreprc"

# bat 設定
export BAT_THEME="Dracula"
export MANPAGER="sh -c 'col -bx | bat -l man -p'"

# fzf 設定
export FZF_DEFAULT_COMMAND='rg --files --hidden --follow'
export FZF_DEFAULT_OPTS='--height 40% --layout=reverse --border --preview "bat --color=always --style=numbers --line-range=:500 {}"'
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"

# エイリアス
alias ls='eza --icons'
alias ll='eza -l --icons --git'
alias la='eza -la --icons --git'
alias lt='eza --tree --level=2 --icons'
alias cat='bat'
alias grep='rg'

# 便利な組み合わせ
alias fe='fzf --preview "bat --color=always {}" | xargs -r code'
alias gb='git branch -a | fzf | sed "s/remotes\/origin\///" | xargs git checkout'

チーム導入のためのTips

チームで統一的にモダンCLIツールを導入する際のポイントです。

Makefileやセットアップスクリプトを用意する:プロジェクトのリポジトリにインストールスクリプトを含めておくと、新メンバーのオンボーディングがスムーズになります。

dotfilesリポジトリで設定を共有する:個人の設定ファイルをGitHubで管理し、新しいマシンでもワンコマンドで環境を再現できるようにしておくと便利です。

段階的に導入する:すべてのツールを一度に導入するのではなく、まずはfzfのCtrl+R(履歴検索)だけでも導入してみましょう。効果を実感してから他のツールに広げていくのがおすすめです。

まとめ:ターミナル環境を最適化して生産性を上げよう

本記事では、starship、fzf、ripgrep、bat、ezaの5つのモダンCLIツールについて、インストール方法から実践的な活用法まで解説しました。

導入の優先度としてのおすすめは以下の順です。

1. fzf:Ctrl+Rのコマンド履歴検索だけで即効性があり、効果を最も実感しやすいツールです。

2. ripgrep:コードベースの検索速度が劇的に向上します。VS Codeの内部でも使用されているほど信頼性の高いツールです。

3. bat:ファイルの確認がリッチになり、fzfとの組み合わせでさらに威力を発揮します。

4. eza:日常的なファイル一覧表示がリッチになります。Gitの状態やアイコン表示が便利です。

5. starship:プロンプトの情報量が増え、現在の作業コンテキストが一目で分かるようになります。

これらのツールはそれぞれ数分でインストールでき、すぐに効果を実感できます。まずは1つでも試してみて、ターミナルでの作業効率の向上を体験してください。

#ターミナル#CLI#生産性
共有:
無料メルマガ

週1回、最新の技術記事をお届け

AI・クラウド・開発の最新記事を毎週月曜にメールでお届けします。登録は無料、いつでも解除できます。

プライバシーポリシーに基づき管理します

起業準備に役立つ情報、もっとありますよ。

まずは話だけ聞いてもらう