Rust製コマンドでTerminal操作を快適にしよう!
はじめに
CX事業本部のshuntakaです。
Terminalで作業をする人に馴染みの深いls
やfind
といったOSコマンドの改善や拡張を目的としたRust製CLIが多く公開されています。
本記事は、自分がTerminal操作で利用しているRust製CLIとその利用例を紹介したいと思います。
Rust製ですが、紹介するツールは基本brewでインストール可能なので、気軽に試せます。
お盆が終わる前に入れておくと、お盆開けから一味違う自分になれます。
コマンド紹介
exa
該当するOSコマンド
ls, tree
特徴
出力の色付けに加え、Gitのステータス表示もしてくれます(後述)
利用例1
lsを使う局面
exa -ahl --git
aliasに登録しています
alias ls='exa' alias ll='exa -ahl --git'
動作イメージ
Gitのステータス上差分があるファイルのディレクトリにcdしたいときに、分かりやすいです(cdしたらexaが実行されるように設定するのが良いと思います)
利用例2
treeするときに、.gitignoreに記載のディレクトリ・ファイルを表示して欲しくないとき
exa -T --git-ignore # -T: ツリー表示 # --git-ignore: .gitignoreに記載のディレクトリ・ファイルを無視する
動作イメージ
node_modulesの中身は、.gitignoreに記載されているので表示されません
lsd
該当するOSコマンド
ls
特徴
exaと同じlsコマンドの拡張ですが、こちらは色とアイコン表示が特徴です
動作イメージ
bat
該当するOSコマンド
cat
特徴
syntaxハイライトやGitのステータス表示をしてくれます
利用例1
catを使う局面
bat [file名]
動作イメージ
Gitで管理されているファイルの場合、変更部に~
、追加部に+
マークが付いてます
利用例2
tab、スペース、改行の状態を確認するとき
bat -A [file名]
動作イメージ
tokei
該当するOSコマンド
wcの拡張
特徴
言語ごとのファイル数、ステップ数、コード数、空行数、コメント数を出力してくれます
動作イメージ
この記事を書いているときに見つけましたが、対応言語も多く便利ですね
余談ですが、Pythonのステップ数はこんな感じで数えてましたが、もう必要ありませんね。。。
find . -type d \( -name ".git" -o -name ".venv" -o -name ".mypy_cache" \) -prune -o -type f -print| xargs wc -l
fd
該当するOSコマンド
find
特徴
オプションがわかりやすいのと、出力が色付けされており、見やすい
利用例
fzf(tmux-fzf)と合わせて、$HOMEからfuzzyな検索をしつつ特定のディレクトリにcdするときに利用しています。
$ fd -t d -I -H -E ".git" # オプションがシンプル! # -t(--type) filetype: filetypeを指定、今回はディレクトリを表すdを指定 # -I(--no-ignore): .gitignoreに記載のディレクトリ・ファイルを出力対象とする # -H(--hidden): 隠しファイルも含める # -E(--exclude) pattern: patternのfiles/directoryを出力対象から除外
zshのスニペットはこんな感じです(Ctrl-nで起動)
function fd-fzf() { local target_dir=$(fd -t d -I -H -E ".git"| fzf-tmux --reverse --query="$LBUFFER") local current_dir=$(pwd) if [ -n "$target_dir" ]; then BUFFER="cd ${current_dir}/${target_dir}" zle accept-line fi zle reset-prompt } zle -N fd-fzf bindkey "^n" fd-fzf
動作イメージ
fuzzyな検索の後、選択したディレクトリにcdできます
starship
該当するOSコマンド
shellのプロンプト部分
特徴
プロンプト画面を設定できます。カスタマイズ可能とのこと。bash
fish
zsh
に対応しています。設定方法はリンクを確認してください。
動作イメージ
fishのthemeであるspacefishが、zshでも設定出来るのは便利です。
ripgrep
該当するOSコマンド
grep
特徴
.gitignoreに記載のディレクトリ・ファイルを検索対象としない機能があります
利用例
neovimから、ファイルをfuzzyな検索で選択して開くdenite.nvimというプラグインを利用する際のコマンドに使っています。 検索対象に、隠しファイルは入れたいが、.gitignoreに記載のディレクトリ・ファイルは無視したい場合以下のコマンドになります。
rg --files --hidden --glob '!.git' # --files: 後にPATHを指定可、指定なしの場合カレント # --hidden: 隠しファイルを表示するオプション # --glob: 検索対象に含める or 含めないディレクトリを指定できます
動作イメージ
最後に
今回紹介したツール以外でも、多くのRust製CLIがあります。 本記事は、awesome-rustから引用しており、他にも使えそうなものがないか探してみると良いかもしれません! Rustを使っている人は、ソースリードの材料として使うのもいいかもしれません。(ソースを読む前にtokeiで分量を確認しましょう)