はじめに

この資料は Rust 製のコマンドラインツール nuについて紹介するものです。

Rustの環境構築やツールのインストール方法については以下を参照してください

Rust開発環境を整える

nuについて

nuは、モダンで柔軟なクロスプラットフォームシェルです。プロジェクト名は nushell です。

GitHub - nushell/nushell: A new type of shell

デモ

https://github.com/nushell/nushell/raw/main/images/nushell-autocomplete6.gif

パイプライン

Unixでは、洗練されたコマンドを複数のステップに分割するために、コマンド間にパイプを通すことが一般的です。Nu はパイプラインの考え方を取り入れて、これをさらに大きく進めたものです。Unixの思想と同様に、Nuではコマンドはstdoutに出力し、stdinから読み込むことができます。さらに、コマンドは表など構造化されたデータを出力することができます(これは第3の種類のストリームと考えることができます)。パイプラインで動作するコマンドは、3つのカテゴリのいずれかに当てはまります。

> ls | where type == "dir" | table
╭────┬──────────┬──────┬─────────┬───────────────╮
│ #  │   name   │ type │  size   │   modified    │
├────┼──────────┼──────┼─────────┼───────────────┤
│  0 │ .cargo   │ dir  │     0 B │ 9 minutes ago │
│  1 │ assets   │ dir  │     0 B │ 2 weeks ago   │
│  2 │ crates   │ dir  │ 4.0 KiB │ 2 weeks ago   │
│  3 │ docker   │ dir  │     0 B │ 2 weeks ago   │
│  4 │ docs     │ dir  │     0 B │ 2 weeks ago   │
│  5 │ images   │ dir  │     0 B │ 2 weeks ago   │
│  6 │ pkg_mgrs │ dir  │     0 B │ 2 weeks ago   │
│  7 │ samples  │ dir  │     0 B │ 2 weeks ago   │
│  8 │ src      │ dir  │ 4.0 KiB │ 2 weeks ago   │
│  9 │ target   │ dir  │     0 B │ a day ago     │
│ 10 │ tests    │ dir  │ 4.0 KiB │ 2 weeks ago   │
│ 11 │ wix      │ dir  │     0 B │ 2 weeks ago   │
╰────┴──────────┴──────┴─────────┴───────────────╯

パイプラインの出力を見たい場合がほとんどなので、表形式を想定して。上記のように table で実現できます。

> ls | where type == "dir"

同じコマンドを使いながら、異なる構成にすることができるのは、Nuの重要な哲学です。例えば、内蔵のpsコマンドを使って、上記と同じ場所で、実行中のプロセスの一覧を取得することができます。

> ps | where cpu > 0
╭───┬───────┬───────────┬───────┬───────────┬───────────╮
│ # │  pid  │   name    │  cpu  │    mem    │  virtual  │
├───┼───────┼───────────┼───────┼───────────┼───────────┤
│ 0 │  2240 │ Slack.exe │ 16.40 │ 178.3 MiB │ 232.6 MiB │
│ 1 │ 16948 │ Slack.exe │ 16.32 │ 205.0 MiB │ 197.9 MiB │
│ 2 │ 17700 │ nu.exe    │  3.77 │  26.1 MiB │   8.8 MiB │
╰───┴───────┴───────────┴───────┴───────────┴───────────╯

ファイルの読み込み