日本の山岳一覧・百名山 API を開発しましたCLICK !

Rust で実装された OSS の CLI ツールたちを見てみよう

  • URLをコピーしました!

Rust は CLI ツールの実装というユースケースでも使用されるプログラミング言語の 1 つです!

Meta 社も Programming languages endorsed for server-side use at Meta という記事で、CLI ツールの開発なら Rust がおすすめであるとしています。

私も Rust で mocks というツール実装して、楽しんでいます!

目次

CLI Tools written in Rust

OSS で公開されている Rust 実装の CLI ツールたちを見ていきましょう!

bat

batcat の代替コマンドです。

ファイルをターミナル上でシンタックスハイライトを効かせた状態で表示できて、Git の情報も表示してくれます。

bat command and cat command

bottom

btmtop の代替コマンドです。

gtopgotophtop にインスパイアされたプロセスやシステムリソースを監視するためのツールです。

bottom

delta

Git での差分表示でシンタックスハイライトして見やすくしてくれるツールです。

delta をインストールして、~/.gitconfig の設定を変更することで色々とカスタマイズできます。

[core]
    pager = delta

[interactive]
    diffFilter = delta --color-only

[delta]
    navigate = true
    line-numbers = true
    side-by-side = true

[merge]
    conflictstyle = diff3

[diff]
    colorMoved = default

変更差分が非常に分かりやすくなります!

delta git diff

dust

dustdu の代替コマンドで、du + rust というところから命名されているようです。

ディレクトリやファイルのサイズを確認することができます。

カレントディレクトリ配下のファイルやディレクトリのサイズ、サブディレクトリのリスト(ツリー)、容量の占有率(バーチャート)を表示することができます!

dust

eza

ezals の代替コマンドです。

exa というコマンドがメンテナンスされなくなり、フォークされて開発が進められいます。

ls にはない便利なパラメータがたくさんあります!

eza

fd

fdfind の代替コマンドです。

ファイルやディレクトリの検索ができ、--max-depth で最大の階層数を指定できたり、--type でファイルの種類を指定できたり、シンプルで使いやいかつ高速に動作するコマンドです。

fd main.rs and fd momento
fd md

genact

genact は忙しいふりをしてするためのコマンドです。

実際は何も起こっていないのに、何かエキサイティングなことや役に立つことをしているふりができます笑

genact

P.S. なんともふざけたコマンドですね…笑

git-cliff

git cliff は CHANGELOG 自動生成してくれるコマンドです。

git cliff

git cliff は CHANGELOG.md を生成しません。

ファイルまで生成したい場合は以下のコマンドを実行します。

git cliff -o CHANGELOG.md

gobang

gobang は TUI データベース マネジメント ツールです。

Rust コントリビュータの TaKO8Ki さん が開発されています。

gobang

jless

jless はコマンドラインの JSON ビューワーです。

jless storage.json
jless

cat や bat と組み合わせて使うことも可能です。

cat storage.json | jless
bat storage.json | jless

jql

jql は JSON クエリ言語ツールで、「ジャッカル🐺」 と発音します。

bat and jql

HTTPie CLIhttps コマンドなどと組み合わせて使うこともできます。

日本の山岳一覧を取得後、mountains の配列に含まれる山岳データを id396 で絞り込んだ結果の 0 番目を出力しています。

https https://mountix.codemountains.org/api/v1/mountains | jql '"mountains"|={"id"=396}[0]'
HTTPoe https and jql

just

just は、make にインスパイアされたツールです。

プロジェクトの様々なタスクを簡単に管理・実行することができます。

recipe-name:
  echo 'This is a recipe!'

# this is a comment
another-recipe:
  @echo 'This is another recipe.'
justfile

Rust で実装されたツールということもあって、Rust の OSS で導入されていることが多い印象です!

lsd

lsdls の代替コマンドで、LSDeluxe の意味です。

色、アイコン、ツリービューなど、より多くの書式設定オプションなどの多くの追加機能が提供されています。

lsd

monolith

monolith は Web ページ全体を単一の HTML ファイルとして保存することができるコマンドです。

CSS、画像、JavaScript アセットをすべて一度に埋め込み、保存して共有しやすい単一の HTML5 ドキュメントを生成してくれます。

monolith https://dottrail.codemountains.org/lp/mountix-api/ -o lp-mountix-api.html
monolith

procs

procsps の代替コマンドです。

色付きで非常に見やすく、検索やツリー表示も可能です!

procs --tree

rip

riprm の代替コマンドで、Rm ImProvedR I M を取って命名されています。

削除したファイルを確認でき、ロールバックして復元することもできます。

rip

ripgrep

rggrep の代替コマンドです。

非常に高速に動作することを売りにしています!

-g で GLOB 形式での対象ファイルの絞り込みができます。

例えば、以下のコマンドはカレントディレクトリ配下の README.* に該当するファイル名の中から foo を Grep 検索しています。

rg foo -g 'README.*'
ripgrep (rg)

! を付与することで、対象のディレクトリ除外することもできます。

rg Hello -g '!sub/**/*'
rg-glob

sd

sdsed の代替コマンドで、Search & DisplaceSD を取って命名されているようです。

文字リテラルや正規表現を使って対象を検索して、置換することができます。

-p, --preview はプレビューモードのオプションで実際に置換はされません。

sd

sshx

sshx はターミナルを誰とでも共有できるコマンドです。

以下のような特徴があります。詳細は sshx.io を確認してみてください!

  • 1 つのコマンドを実行するだけで、ターミナルを誰とでも共有できる。
  • 無限のキャンバス上での自由なズームとパンが可能。
  • 他の人のカーソルの動きをリアルタイムで確認できる。
  • グローバルに分散されたメッシュ内の最も近いサーバーに接続される。
  • Argon2 と AES によるエンドツーエンドの暗号化される。

チャットでやり取りもでき、とても面白いツールだと思います。

sshx

ちゃんとローカル PC にインストールした jless コマンドも使えました!

tailspin

tspin はログファイルをシンタックスハイライトしてくれるコマンドです。

tailspin のサンプルログ example1 を表示してみました。

tspin

xh

xh は HTTP リクエストを送信するための使いやすく高速なツールです。

It reimplements as much as possible of HTTPie’s excellent design, with a focus on improved performance.

HTTPie CLI の Rust 再実装版のようなツールと言えます。

xh

ちなみに、HTTPie CLI は Python で実装されています。

xsv

xsv は CSV ファイルのインデックス作成、スライス、分析、分割、結合のためのコマンドです。

サンプル CSV をダウンロードして、スライス操作を実行してみました。

curl -LO https://burntsushi.net/stuff/worldcitiespop.csv
xsv

zoxide

zzicd の代替コマンドです。

なお zi を利用するには、別途 fzf をインストールする必要があります。

本来 cd /works/mocks-storage/ と入力しないとディレクトリを移動できないケースでも、zoxide を使えば z mocks-storage で移動することができます。

これは zoxide がディレクトリへの移動頻度を記憶してくれているため、mocks-storage を指定するだけで移動できるのです。

また、zi を使うことで記憶されたディレクトリを選択して移動することができます。

「ディレクトリへの移動頻度」はスコアで管理されていて、zi でも確認することができます。

z and zi

指定したディレクトリ名のマッチングやスコアについては Algrithm を確認してください!

zzi を使えるようにするには、~/.zshrc に設定が必要です。(zsh の場合)

eval "$(zoxide init zsh)"

Rust で CLI ツールを実装するなら Clap

Rust で CLI ツールを実装するなら、Clap がデファクトスタンダードなクレートです。

Clap を使えば、コマンドライン引数を簡単に扱うことができ、--version--help といったオプション引数の出力をよしなに実装してくれます。

紹介してきたツールでも Clap が使用されているケースがほとんどでした!

まとめ

気になる CLI ツールはありましたでしょうか?

Rust で実装されたツールは総じて 高速 と謳われています。

クロスコンパイルが可能でシングルバイナリにビルドされるため、配布もしやすい点もメリットでしょう。

Clap を使えば CLI ツールの実装は簡単にできるので、ぜひ Rust で CLI ツールを実装してみてください!

なお、今回は Github の星が多いものを中心にピックアップしています!

まだまだ、紹介してきれてない CLI ツールがたくさんあると思います…。


著:Jim Blandy, 著:Jason Orendorff, 著:Leonora F. S. Tindall, 翻訳:中田 秀基
¥5,280 (2024/11/20 17:05時点 | Amazon調べ)
著:初田直也, 著:山口聖弘, 著:吉川哲史, 著:豊田優貴, 著:松本健太郎, 著:原将己, 著:中村謙弘, 著:フォルシア株式会社
¥3,208 (2024/11/15 19:47時点 | Amazon調べ)

この記事が気に入ったら
フォローしてね!

  • URLをコピーしました!

コメント

コメントする

目次