eza で ls を置き換えてから戻れなくなった話と実用Tips
朝、Raspberry Pi に SSH で繋いで ls -la を叩いた瞬間、ターミナルが色付きで返ってくる。ファイル種別ごとに色が違い、Git の状態まで一目で分かる。これが eza の世界だ。
標準の ls に戻ろうとした日が何度かあった。結果、半日で挫折した。色も無いし、サイズも読みづらい。「あ、もう戻れないやつだ」と気づいた瞬間の話を共有したい。
eza は exa の後継
eza は Rust で書かれた ls 代替コマンドだ。元々は exa という有名プロジェクトがあったのだが、2023 年に開発がストップ。フォーク版の eza がコミュニティ主導でメンテナンスを引き継いだ、というのが歴史的経緯になる。
機能はざっくり以下の通り。
- ファイル種別ごとのカラー表示
- Git ステータスを
--gitで表示 --treeで再帰ツリー表示(treeコマンド不要)- アイコン対応(Nerd Font 必要)
- サイズ・更新日のフォーマットが人間に優しい
後発ゆえに「自分が欲しかった ls」がそのまま実装されている、という印象。痒い所に手が届く。
インストールから最初の動作確認まで
Raspberry Pi OS や Ubuntu 24.04 なら apt で入る。バージョンが古いことがあるので、最新版が欲しい場合は cargo か公式バイナリで入れる。
# Debian/Ubuntu 系
sudo apt install eza
# cargo で最新版
cargo install eza
# 動作確認
eza --version
eza -la
初回 eza -la を叩いた瞬間、画面がカラフルになる。それだけで「あ、これは違う」と感じるはず。
日々使う実用オプション
1. 詳細表示はこれが鉄板
eza -lah --git --time-style=long-iso --icons
長くて覚えられないので、後述するエイリアスに入れている。--git を付けると Git で変更されたファイルの左横にマーカーが出る。リポジトリのルートで叩くと、ステージ済・未ステージ・新規ファイルが一目で分かる。これが一番嬉しい。
2. Tree 表示で tree コマンドが不要に
eza --tree --level=2 --git-ignore
--git-ignore を付けると node_modules や .venv などを自動で省く。tree コマンドを別途入れる必要がなくなり、依存が減る。地味だが効く。
3. サイズでソート
eza -lah --sort=size --reverse
「どのファイルがディスク食ってるんだっけ」を一瞬で確認できる。du -sh * より見やすいケースが多い。
4. 最新更新のファイルを上に
eza -lah --sort=modified --reverse
「さっきいじったファイルどこだっけ」が頻繁にあるので、これは別エイリアスで用意している。
5. アイコン表示は好み次第
--icons オプションは Nerd Font が入っている前提。フォントが対応していないと豆腐(□)が出る。自分は Starship でプロンプトをカスタマイズした記事で書いた通り Nerd Font を使っているので、自然に有効化している。
エイリアスで日常に溶け込ませる
毎回オプションを打つのは現実的じゃない。~/.zshrc もしくは ~/.bashrc に以下を入れている。
# ls 系を全部 eza に寄せる
alias ls='eza --icons'
alias ll='eza -lah --git --time-style=long-iso --icons'
alias la='eza -a --icons'
alias lt='eza --tree --level=2 --git-ignore --icons'
alias llt='eza -lah --tree --level=2 --git-ignore --icons'
これで ls を打っても勝手に eza が呼ばれる。ll は完全に体に染み付いているので、これだけは譲れない。
ちなみに
lsをエイリアスで上書きするのを嫌う人もいる。スクリプト内でlsの出力をパースしているとオプションが効かず壊れる、という話。自分は対話シェルでしか使わないのでそこは割り切っている。スクリプト内ならcommand lsで本物を呼べる。
ハマったポイントと正直な感想
1 つだけハマった話。Raspberry Pi 5 で cargo install eza したとき、ビルドに 8 分かかった。aarch64 環境では apt のバイナリが軽いのでそっちが楽。クロスコンパイル済みのリリースバイナリも GitHub Releases にあるので、curl で落とす手もある。
もう一つは色の問題。デフォルトの配色が淡い背景だと見づらい。EZA_COLORS 環境変数で調整できるが、最初は何をどう書けばいいのか分からなかった。結局 LS_COLORS と互換の書式なので、既存の dotfiles を流用して落ち着いた。chezmoi で dotfiles を管理している人なら、この設定もそのまま複数マシン間で同期できる。
パフォーマンスは想像より速い。hyperfine でベンチを取る記事でも書いたが、軽く測ったところ eza -lah は ls -lah より約 1.3 倍遅い程度。ファイル数が万単位だと差が見えるが、日常の数百ファイル程度では誤差。Git ステータス取得を有効にすると遅くなるので、巨大リポジトリでは --git を外す運用にしている。
他のモダン CLI と組み合わせる
eza 単体でも十分便利だが、他のツールと組み合わせると体験が一段上がる。自分の手癖はこんな感じ。
eza --treeでディレクトリ構造を眺める → ripgrep で中身を grep- 気になるファイルを見つけたら
batでシンタックスハイライト付き表示(bat の使い方参照) - 別ディレクトリに飛びたくなったら zoxide で
z <keyword> - ファイル名で fuzzy 検索したくなったら fzf でインクリメンタルに絞る
この 4 つはほぼセットで動く。ターミナルでの作業速度が体感で 2 倍くらいになった、と言うと盛りすぎだが、それくらいの実感はある。
VPS や開発サーバーでも同じ環境を作る
Raspberry Pi の手元環境だけで完結しないので、VPS にも eza を入れている。お名前.comの高性能VPS
のような Ubuntu ベースの VPS なら apt install eza 一発で同じ感覚に揃う。ローカルと本番で ls の出力が違うとストレスなので、ここは合わせておきたい。
結論っぽいこと
eza は派手な機能はない。ただ「ls がちょっと賢くなった」という地味な改善が、毎日 100 回叩くコマンドに乗っかると、累積で効いてくる。実は、入れた直後より 1 ヶ月後の方が「無いと困る」感が強くなった。それくらい馴染んだ。
まだ ls 派の人は、エイリアスを使わず eza を素のまま呼ぶ運用から試すといい。気に入ったらエイリアス、というステップで導入すれば後悔は少ないはず。