ちょっと話題の記事

Rust製コマンドでTerminal操作を快適にしよう!

2019.08.16

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

CX事業本部のshuntakaです。

Terminalで作業をする人に馴染みの深いlsfindといった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で分量を確認しましょう)