ezaは、lsの代替となるコマンドです。前身であるexaをForkする形で開発され、2023年7月にリリースされました。exaと同様にRustで実装されており、小規模(small)、高速(fast)、シングルバイナリ(single binary)であることが掲げられています。

この記事ではlsコマンドにない機能を中心に説明します。以下では、次の環境が前提です。

  • eza v0.16.1 (執筆時点での最新バージョン)
  • git 2.39.3
  • zsh 5.9 (x86_64-apple-darwin23.0)

インストール

インストール手順は公式サイトに記載されています。Homebrewなどのパッケージマネージャでインストールできるほか、RustのパッケージマネージャであるCargoでもインストールできます。筆者はHomebrewでインストールしました。

$ brew install eza

ezaの実行

ezaでは、lsと同様にオプションやファイル/ディレクトリを指定できます。ファイル/ディレクトリの指定がない場合は、カレントディレクトリの内容が表示されます。

$ eza [options] [files...]

lsと異なり、デフォルトで色付きの表示となっている点が特徴です。

eza

lsezaのエイリアスにしておくとlsを打つ習慣を変えずに済みます。シェルの設定ファイル(.bashrc.zshrcなど)にエイリアスの設定を追加しておくとよいでしょう。

alias ls="eza"

ezaの基本オプション

ezalsが実装している-l-aなどの基本的なオプションを提供しているため、lsの代替として機能します。

ezaでは、オプションは3種類に分けられています。

  1. 表示オプション
  2. フィルタとソートのオプション
  3. ロングビューオプション

1. 表示オプション

表示オプションは、表示する内容や形式をカスタマイズするオプションです。lsにない代表的なオプションとしては、木構造で表示する-T (--tree)があります。

$ eza -T
.
├── astro.config.mjs
├── dist
  ├── about
  ├── articles
...

2. フィルタとソートのオプション

フィルタとソートのオプションには、表示対象をファイルに限定する-f (--only-files)、ディレクトリに限定する-D (--only-dirs)、ソートをするための-s (--sort=SORT_FIELD)などがあります。

# ファイルのみ表示
$ eza -f
astro.config.mjs  eslint.config.js  package-lock.json  package.json  README.md  tsconfig.json
# ディレクトリのみ表示
$ eza -D
dist  node_modules  public  src

ezaでは-sがソートのオプションですが、ls-sとは異なるので注意してください。

3. ロングビューオプション

ロングビューオプションは、-lと併用することで機能するオプションです。代表的なオプションには-h (--header)や、次節で解説するGitに関するオプションなどがあります。

また、Unix系の場合は--total-sizeでディレクトリ全体のサイズを表示することができます。

$ eza -lh --total-size
Permissions Size User   Date Modified Name
.rw-r--r--   109 username  1 1  00:00   astro.config.mjs
drwxr-xr-x  1.5M username  1 1  00:00   dist
.rw-r--r--   282 username  1 1  00:00   eslint.config.js
...

Gitに関するオプション

ezalsと異なり、Gitに関するオプションを提供しています。Gitに関する基本的なオプションは--git--git-reposの2つです。これらのオプションはロングビューオプションなので-lと併用する必要があります。

--git

--gitはGitのステータスを表示するオプションです。ezaコマンドが表示するステータスは2文字で構成されており、1文字目がstagedファイルのステータス、2文字目がunstagedファイルのステータスを表します。ステータスはそれぞれ次の文字で表現されます。

  • 変更なし: -
  • modified: M
  • new file: N
  • deleted: D
  • renamed: R
  • type-change: T
  • ignored: I
  • conflicted: U
$ eza --git -l
rw-r--r--   109 username  1 1  00:00 -- astro.config.mjs
drwxr-xr-x    - username  1 1  00:00 -I dist
.rw-r--r--  282 username  1 1  00:00 -- eslint.config.js
drwxr-xr-x    - username  1 1  00:00 -I node_modules
.rw-r--r-- 314k username  1 1  00:00 -- package-lock.json
.rw-r--r--  481 username  1 1  00:00 -- package.json
drwxrwxr-x    - username  1 1  00:00 -- public
.rw-r--r-- 2.1k username  1 1  00:00 -- README.md
drwxrwxr-x    - username  1 1  00:00 MN src
.rw-r--r--  134 username  1 1  00:00 -- tsconfig.json

--git-repos

--git-reposはGitリポジトリのステータスを表示するオプションです。リポジトリのステータスはそれぞれ次の文字で表現されます。

$ eza --git-repos -l
drwxr-xr-x  - username  1 1  00:00 | master     sample-files
drwxr-xr-x  - username  1 1  00:00 | main       sample-project
drwxr-xr-x  - username  1 1  00:00 + feature/.. blog.ueda.dev

このほか、非表示系のオプションである--git-repos-no-status--no-gitもあります。詳しくはマニュアルを参照してください。

ezaの利用例

実際にezaを使う場合、例えば-Tとフィルタオプションを組み合わせると必要な情報に絞って階層構造で可視化できるので実用的です。

# ディレクトリのみを木構造で表示
$ eza -TD
.
├── dist
  ├── about
  ├── articles
...

また、1行毎に表示する-1 (--oneline)もフィルタオプションと組み合わせるとファイルの一括処理やバッチ処理などで使えるかもしれません。

# ファイルのみを1行毎に表示
$ eza -1f
.astro
.git
.github
...

開発状況

ezaはcafkafkを中心にメンテナンスされています。公式にmaintainedであることが表明されており、2023年7月のv0.10.3から執筆時点(同11月)まで計21回リリースされています。

また、GitHubでは3.8k近いstarを獲得しており、今後の動向が注目されます。