概要
lstr はRust製の高速・ミニマルなディレクトリツリービューア tree コマンドを現代的に進化させたインタラクティブTUIモード搭載 Git連携 やアイコン表示、ファイルサイズ・権限表示など多機能 パイプやfzf連携、シェル統合によるcd機能もサポート オープンソースでGitHub・Crates.ioにて公開中
lstr: Rust製高速ディレクトリツリービューア
- Rust製 のコマンドラインツリービューア
- treeコマンド を現代的に進化させたプロジェクト構造表示
- インタラクティブTUIモード によるキーボード操作・ファイルオープン対応
- 並列処理 による高速なディレクトリスキャン
- 最小限主義 設計で余計な機能を排除したシンプル体験
主な特徴
- 並列ディレクトリスキャン で最大限の速度を実現
- クラシックモード と 対話的TUIモード の2つを提供
- lstr: 通常のツリー表示
- lstr interactive: インタラクティブなTUI
- ファイルアイコン (Nerd Font必須)、 権限 (-p)、 サイズ (-s)表示に対応
- Git連携 (-G)でファイルのステータスをツリー内に表示
- .gitignore対応 (-g)で不要なファイルを自動除外
- 再帰深度制御 (-L)、 ディレクトリのみ表示 (-d)も可能
インストール方法
- Rustツールチェーン のインストールが必要
- または nix develop で開発環境構築
- リポジトリをクローン
- git clone https://github.com/bgreenwell/lstr.git
- cd lstr
- Cargoでビルド&インストール
- cargo install --path .
基本的な使い方
- lstr [OPTIONS] [PATH]
- lstr interactive [OPTIONS] [PATH]
- PATH省略時はカレントディレクトリ(.)を対象
主なオプション一覧
- -a, --all: 隠しファイル 含む全ファイル表示
- --color <WHEN>: カラー出力 のタイミング指定
- -d, --dirs-only: ディレクトリのみ 表示
- -g, --gitignore: .gitignore 等を尊重
- -G, --git-status: Gitステータス 表示
- --icons: ファイルアイコン 表示(Nerd Font必須)
- -L, --level <LEVEL>: 最大再帰深度 指定
- -p, --permissions: ファイル権限 表示(Unix系のみ)
- -s, --size: ファイルサイズ 表示
- --expand-level <LEVEL>: インタラクティブモード用 初期展開深度
インタラクティブモードのキー操作
- ↑ / k: 上へ移動
- ↓ / j: 下へ移動
- Enter:
- ファイル上: $EDITORで開く
- ディレクトリ上: 展開/折り畳み切替
- q / Esc: 正常終了
- Ctrl+s: 選択パスをstdoutへ出力して終了 (シェル統合向け)
使用例
- カレントディレクトリ一覧:
- lstr
- .gitignoreを無視してプロジェクトを対話的に探索:
- lstr interactive -g --icons
- ファイルサイズ・権限付きでディレクトリ表示:
- lstr -sp
- Gitステータス付きで全ファイル表示:
- lstr -aG
- すべての情報を表示してインタラクティブ起動:
- lstr interactive -gG --icons -s -p
シェル連携・パイプ活用
- クラシックモード は他のコマンドラインツールとパイプ連携可能
- 例: fzfと連携したインタラクティブ検索
- lstr -a -g --icons | fzf
- 例: lessやbatでページング
- lstr -L 10 | less -R
- lstr --icons | bat
- 例: fzfと連携したインタラクティブ検索
lstrによるディレクトリ移動(lcd関数)
- シェルの起動ファイル(~/.bashrcや~/.zshrc)に以下を追加
lcd() {
local selected_dir
selected_dir="$(lstr interactive -g --icons)"
if [[ -n "$selected_dir" && -d "$selected_dir" ]]; then
cd "$selected_dir"
fi
}
- 反映後、lcdコマンドで インタラクティブUI起動→Ctrl+sでディレクトリ選択→即座にcd
パフォーマンスと並列処理
- デフォルトで並列ディレクトリ走査 (rayonスレッドプール利用)
- RAYON_NUM_THREADS 環境変数でスレッド数制御可能
- シングルスレッド実行例:
- RAYON_NUM_THREADS=1 lstr .
- シングルスレッド実行例:
開発思想・インスピレーション
- C言語製treeコマンド に着想を得てRustで再実装
- 高速・安全・最小限・インタラクティブ を追求
- オープンソース として公開、フィードバック歓迎
- GitHub: https://github.com/bgreenwell/lstr
- Crates.io: https://crates.io/crates/lstr
HN向けメッセージ(作者コメント要約)
- treeコマンド に現代的機能(インタラクティブ・Git連携等)を追加したくて Rustで自作
- v0.2.0で以下を追加
- インタラクティブTUIモード (lstr interactive)
- Gitステータス連携 (-G)
- シェル統合 (Ctrl+sでパス出力→cd等に利用可能)
- Nerd Font対応アイコン・サイズ・権限表示・.gitignore対応 も充実
- オープンソース で公開中、ぜひ試してフィードバックを
- GitHub: https://github.com/bgreenwell/lstr
- Crates.io: https://crates.io/crates/lstr