クイックツアー

Nu で何ができるかを知るための最も簡単な方法は、例をいくつか見ることです。では始めましょう。

ls などのコマンドを実行してまず気づくことは、テキストブロックの代わりに構造化されたテーブルが返ってくることです。

> ls
╭────┬───────────────────────┬──────┬───────────┬─────────────╮
 #  │         name          │ type │   size    │  modified   │
├────┼───────────────────────┼──────┼───────────┼─────────────┤
  0 404.html file     429 B 3 days ago
  1 CONTRIBUTING.md file     955 B 8 mins ago
  2 Gemfile file   1.1 KiB 3 days ago
  3 Gemfile.lock file   6.9 KiB 3 days ago
  4 LICENSE file   1.1 KiB 3 days ago
  5 README.md file     213 B 3 days ago
...

このテーブルは、ただ別の形でディレクトリを表示しているだけではありません。スプレッドシートのように、このテーブルではデータをより対話的に扱うことができます。

はじめに、テーブルをサイズでソートしてみましょう。 ls の出力を取得し、カラムの値に基づいてテーブルをソートするコマンドに渡してみます。

> ls | sort-by size | reverse
╭────┬───────────────────────┬──────┬───────────┬─────────────╮
 #  │         name          │ type │   size    │  modified   │
├────┼───────────────────────┼──────┼───────────┼─────────────┤
  0 Gemfile.lock file   6.9 KiB 3 days ago
  1 SUMMARY.md file   3.7 KiB 3 days ago
  2 Gemfile file   1.1 KiB 3 days ago
  3 LICENSE file   1.1 KiB 3 days ago
  4 CONTRIBUTING.md file     955 B 9 mins ago
  5 books.md file     687 B 3 days ago
...

これをするのに、 ls にコマンドライン引数を渡してはいないことが確認できます。代わりに、 Nu が ls コマンドの出力をソートするために提供している sort-by コマンドを使用しています。また、最も大きいファイルが一番上に来るように、 reverse も使用しています。

Nu はテーブルを操作するコマンドを多数提供しています。例えば、 where を使用して ls テーブルのコンテンツをフィルターすることができるので、1キロバイトを超えるファイルのみを表示することができます。

> ls | where size > 1kb
╭───┬───────────────────┬──────┬─────────┬────────────╮
 # │       name        │ type │  size   │  modified  │
├───┼───────────────────┼──────┼─────────┼────────────┤
 0 Gemfile file 1.1 KiB 3 days ago
 1 Gemfile.lock file 6.9 KiB 3 days ago
 2 LICENSE file 1.1 KiB 3 days ago
 3 SUMMARY.md file 3.7 KiB 3 days ago
╰───┴───────────────────┴──────┴─────────┴────────────╯

Unix の哲学と同様、互いに対話可能なコマンドにより、さまざまな異なる組み合わせの使用が可能になります。では、別のコマンドを見てみましょう。

> ps
╭─────┬───────┬───────┬──────────────────────────────────────────────┬─────────┬───────┬──────────┬──────────╮
   # │  pid  │ ppid  │                     name                     │ status  │  cpu  │   mem    │ virtual  │
├─────┼───────┼───────┼──────────────────────────────────────────────┼─────────┼───────┼──────────┼──────────┤
   0 87194     1 mdworker_shared Sleep  0.00  25.9 MB 418.0 GB
   1 87183  2314 Arc Helper (Renderer)                        │ Sleep   │  0.00 │  59.9 MB │   1.6 TB │
   2 87182  2314 Arc Helper (Renderer)                        │ Sleep   │  0.23 │ 224.3 MB │   1.6 TB │
   3 87156 87105 Code Helper (Plugin)                         │ Sleep   │  0.00 │  56.0 MB │ 457.4 GB │
...

もし Linux を使用したことがあるなら、 ps コマンドは馴染みがあるでしょう。これを使用して、システム上で現在実行されている全てのプロセスのリストと、それらのステータス、名前を取得することができます。プロセスのCPU使用率を見ることもできます。

いま表示したいのは、CPUをたくさん使用しているプロセスですか? ls コマンドで以前したのと同じように、 ps コマンドが返したテーブルに対しても操作することができます。

> ps | where cpu > 5
╭───┬───────┬───────┬─────────────────────────────────────────┬─────────┬───────┬──────────┬──────────╮
 # │  pid  │ ppid  │                  name                   │ status  │  cpu  │   mem    │ virtual  │
├───┼───────┼───────┼─────────────────────────────────────────┼─────────┼───────┼──────────┼──────────┤
 0 86759 86275 nu Running  6.27  38.7 MB 419.7 GB
 1 89134     1 com.apple.Virtualization.VirtualMachine Running 23.92   1.5 GB 427.3 GB
 2 70414     1 VTDecoderXPCService Sleep 19.04  17.5 MB 419.7 GB
 3  2334     1 TrackpadExtension Sleep  7.47  25.3 MB 418.8 GB
 4  1205     1 iTerm2 Sleep 11.92 657.2 MB 421.7 GB
╰───┴───────┴───────┴─────────────────────────────────────────┴─────────┴───────┴──────────┴──────────╯

いま、lsps を使用してファイルとプロセスのリストを表示しました。Nu はほかにも有用な情報をもつテーブルを作成するコマンドを提供しています。次は、 datesys について見てみましょう。

date now を実行すると、現在の日時に関する情報が得られます。

> date now
2022-03-07 14:14:51.684619600 -08:00

テーブルとして取得したい場合は、これを date to-table に渡します。

> date now | date to-table
╭───┬──────┬───────┬─────┬──────┬────────┬────────┬──────────╮
 # │ year │ month │ day │ hour │ minute │ second │ timezone │
├───┼──────┼───────┼─────┼──────┼────────┼────────┼──────────┤
 0 2022     3   7   14     45      3 -08:00
╰───┴──────┴───────┴─────┴──────┴────────┴────────┴──────────╯

sys を実行すると、 Nu が実行されているシステムに関する情報が得られます。

> sys
╭───────┬───────────────────╮
 host {record 6 fields}
 cpu [table 4 rows]
 disks [table 3 rows]
 mem {record 4 fields}
 temp [table 1 row]
 net [table 4 rows]
╰───────┴───────────────────╯

これはいままでに見たテーブルと少し異なります。 sys コマンドは、単純な値の代わりに構造化されたテーブルをセルに持つテーブルを返します。このデータを覗くには、カラムを get する必要があります。

> sys | get host
╭────────────────┬────────────────────────╮
 name Debian GNU/Linux
 os version 11
 kernel version 5.10.92-v8+
 hostname lifeless
 uptime 19day 21hr 34min 45sec
 sessions [table 1 row]
╰────────────────┴────────────────────────╯

get コマンドを使用すると、テーブルのカラムの内容にジャンプすることができます。この例では、 Nu が実行されているホストに関する情報が含まれる "host" カラムを見ています。OSの名前、ホスト名、CPUなどです。では、システム上に存在するユーザーの名前を取得してみましょう。

> sys | get host.sessions.name
╭───┬────╮
 0 st
╰───┴────╯

いま、システムには "sophiajt" という名前のユーザー一人だけがいます。ここで、ただのカラム名ではなく、カラムのパス( host.sessions.name の部分)を渡していることに気づくでしょう。Nu はカラムのパスを受け取って、テーブル中の対応する部分に移動します。

もう一つ違いがあることに気づいたかもしれません。データのテーブルではなく、文字列 "sophiajt" という、ただ一つの要素を受け取っています。Nu はデータのテーブルでも、文字列でも動作します。文字列は Nu の外部コマンドで作業する際の重要な役割を担います。

実際に Nu の外部での文字列の働きを見てみましょう。先程の例にならい、echo コマンド( ^ は Nu に、ビルトインの echo コマンドを使用しないことを伝えます)を実行してみます

> sys | get host.sessions.name | each { |it| ^echo $it }
sophiajt

これが前に試したものとよく似ているように見えるなら鋭いです!これは似ていますが、一つ重要な違いがあります。先程の値で ^echo を呼び出しました。これで、データをNu から echo (あるいは git のような、あらゆる Nu の外部のコマンド)に渡すことができるのです。

ヘルプの取得

Nu のビルトインコマンド全てのヘルプテキストは、 help で見つけることができます。すべてのコマンドを見たい場合は、 help commands を実行してください。また、 help -f <topic> を実行すれば、あるトピックについて検索することもできます。

> help path
Explore and manipulate paths.

There are three ways to represent a path:

* As a path literal, e.g., '/home/viking/spam.txt'
* As a structured path: a table with 'parent', 'stem', and 'extension' (and
* 'prefix' on Windows) columns. This format is produced by the 'path parse'
  subcommand.
* As an inner list of path parts, e.g., '[[ / home viking spam.txt ]]'.
  Splitting into parts is done by the `path split` command.

All subcommands accept all three variants as an input. Furthermore, the 'path
join' subcommand can be used to join the structured path or path parts back into
the path literal.

Usage:
  > path

Subcommands:
  path basename - Get the final component of a path
  path dirname - Get the parent directory of a path
  path exists - Check whether a path exists
  path expand - Try to expand a path to its absolute form
  path join - Join a structured path or a list of path parts.
  path parse - Convert a path into structured data.
  path relative-to - Get a path as relative to another path.
  path split - Split a path into parts by a separator.
  path type - Get the type of the object a path refers to (e.g., file, dir, symlink)

Flags:
  -h, --help
      Display this help message