TechQuant Blog

eza で ls を置き換えてから戻れなくなった話と実用Tips

6分で読める

朝、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 -lahls -lah より約 1.3 倍遅い程度。ファイル数が万単位だと差が見えるが、日常の数百ファイル程度では誤差。Git ステータス取得を有効にすると遅くなるので、巨大リポジトリでは --git を外す運用にしている。

他のモダン CLI と組み合わせる

eza 単体でも十分便利だが、他のツールと組み合わせると体験が一段上がる。自分の手癖はこんな感じ。

  • eza --tree でディレクトリ構造を眺める → ripgrep で中身を grep
  • 気になるファイルを見つけたら bat でシンタックスハイライト付き表示(bat の使い方参照)
  • 別ディレクトリに飛びたくなったら zoxidez <keyword>
  • ファイル名で fuzzy 検索したくなったら fzf でインクリメンタルに絞る

この 4 つはほぼセットで動く。ターミナルでの作業速度が体感で 2 倍くらいになった、と言うと盛りすぎだが、それくらいの実感はある。

VPS や開発サーバーでも同じ環境を作る

Raspberry Pi の手元環境だけで完結しないので、VPS にも eza を入れている。お名前.comの高性能VPS のような Ubuntu ベースの VPS なら apt install eza 一発で同じ感覚に揃う。ローカルと本番で ls の出力が違うとストレスなので、ここは合わせておきたい。

結論っぽいこと

eza は派手な機能はない。ただ「ls がちょっと賢くなった」という地味な改善が、毎日 100 回叩くコマンドに乗っかると、累積で効いてくる。実は、入れた直後より 1 ヶ月後の方が「無いと困る」感が強くなった。それくらい馴染んだ。

まだ ls 派の人は、エイリアスを使わず eza を素のまま呼ぶ運用から試すといい。気に入ったらエイリアス、というステップで導入すれば後悔は少ないはず。