
nushell v0.115.0
新しいタイプのシェル
Nushell
新しいタイプのシェル。

Table of Contents
- Status
- Learning About Nu
- Installation
- Configuration
- Philosophy
- Goals
- Officially Supported By
- Contributing
- License
Status
このプロジェクトは、最小限の実用可能な製品レベルの品質に達しています。多くの人が日常的に使用していますが、一部のコマンドでは不安定な場合があります。Nuの設計は、成熟するにつれて変更される可能性があります。
Learning About Nu
Nushell book は、Nushellドキュメントの主要な情報源です。ブック内にNuコマンドの完全なリスト があり、クックブック にはNuの使用例が多数掲載されています。
また、Discord でも活動しています。ぜひ話しに来てください!
Installation
Nuをすばやくインストールするには:
# Linux and macOS
brew install nushell
# Windows
winget install nushell
GitHub ActionでNuを使用するには、詳細について setup-nu を確認してください。
詳細なインストール手順は、ブックのインストールの章 にあります。Nuは多くのパッケージマネージャーから利用できます:
Nushellチームが積極的にサポートしているプラットフォームの詳細については、プラットフォームサポートポリシー を参照してください。
Configuration
デフォルトの設定は sample_config にあります。これらは、Nushellを初めて起動したときに取得される設定ファイルです。
Nushellを実行するためのすべてのデフォルト設定が設定されています。ここから、このファイルを自分の特定のニーズに合わせてカスタマイズできます。
システム上の config.nu の場所を確認するには、次のコマンドを入力するだけです。
$nu.config-path
Nushellのドキュメントのすべてについては、ブック を参照してください。
Philosophy
Nuは、PowerShell、関数型プログラミング言語、最新のCLIツールなどのプロジェクトから着想を得ています。 ファイルやデータをテキストの生のストリームとして考えるのではなく、Nuは各入力を構造を持つものとして見ます。 たとえば、ディレクトリの内容を一覧表示すると、各行がそのディレクトリ内のアイテムを表すテーブルが返されます。 これらの値は、'パイプライン'と呼ばれる一連のコマンドで、一連のステップを通してパイプ処理できます。
Pipelines
Unixでは、複雑なコマンドを複数のステップに分割するために、コマンド間でパイプを使用するのが一般的です。 Nuはこれをさらに一歩進め、パイプライン の考え方を重視しています。 Unixの哲学と同様に、Nuはコマンドがstdoutに出力し、stdinから読み取ることを許可します。 さらに、コマンドは構造化データを出力できます(これは3番目の種類のストリームと考えることができます)。 パイプラインで動作するコマンドは、次の3つのカテゴリのいずれかに分類されます:
- ストリームを生成するコマンド(例:
ls) - ストリームをフィルタリングするコマンド(例:
where type == "dir") - パイプラインの出力を消費するコマンド(例:
table)
コマンドはパイプ記号(|)で区切られ、左から右へのパイプラインの流れを示します。
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 コマンドを使用して、上記と同じ where を使用して実行中のプロセスのリストを取得できます。
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 │
# => ╰───┴───────┴───────────┴───────┴───────────┴───────────╯
Opening files
Nuは、ファイルとURLの内容を、生のテキストまたは構造化データ(形式を認識できる場合)として読み込むことができます。 たとえば、.tomlファイルを構造化データとして読み込み、探索できます:
open Cargo.toml
# => ╭──────────────────┬────────────────────╮
# => │ bin │ [table 1 row] │
# => │ dependencies │ {record 25 fields} │
# => │ dev-dependencies │ {record 8 fields} │
# => │ features │ {record 10 fields} │
# => │ package │ {record 13 fields} │
# => │ patch │ {record 1 field} │
# => │ profile │ {record 3 fields} │
# => │ target │ {record 3 fields} │
# => │ workspace │ {record 1 field} │
# => ╰──────────────────┴────────────────────╯
これを、列の1つの内容を取得するコマンドにパイプ処理できます:
open Cargo.toml | get package
# => ╭───────────────┬────────────────────────────────────╮
# => │ authors │ [list 1 item] │
# => │ default-run │ nu │
# => │ description │ A new type of shell │
# => │ documentation │ https://www.nushell.sh/book/ │
# => │ edition │ 2018 │
# => │ exclude │ [list 1 item] │
# => │ homepage │ https://www.nushell.sh │
# => │ license │ MIT │
# => │ metadata │ {record 1 field} │
# => │ name │ nu │
# => │ repository │ https://github.com/nushell/nushell │
# => │ rust-version │ 1.60 │
# => │ version │ 0.72.0 │
# => ╰───────────────┴────────────────────────────────────╯
必要に応じて、さらに掘り下げることもできます:
open Cargo.toml | get package.version
# => 0.72.0
Plugins
Nuは、シェルに追加機能を提供し、組み込みコマンドと同じ構造化データモデルに従うプラグインをサポートしています。crates/nu_plugins_* ディレクトリにいくつかの例があります。
プラグインは、パス上で利用可能なバイナリであり、nu_plugin_* の命名規則に従います。
これらのバイナリは、コマンドが自身を識別して設定を渡し、使用可能にする単純なJSON-RPCプロトコルを介してnuと対話します。
プラグインがフィルターの場合、データは一度に1要素ずつストリーミングされ、stdin/stdoutを介してデータを返すことができます。
プラグインがシンクの場合、最終データの完全なベクトルが渡され、stdin/stdoutを自由に使用できます。
awesome-nuリポジトリ にはさまざまなnuプラグインがリストされており、showcaseリポジトリ では、Nushellについて書かれた有益なブログ記事と、技術的なトピックを紹介するビデオが紹介されています。
Goals
Nuは、その設計哲学を構成する一連の目標に厳密に従っています。機能が追加される際には、これらの目標に対してチェックされます。
-
何よりもまず、Nuはクロスプラットフォームです。コマンドとテクニックはプラットフォーム間で動作する必要があり、NuはWindows、macOS、Linuxをファーストクラスでサポート しています。
-
Nuは、既存のプラットフォーム固有の実行可能ファイルとの互換性を保証します。
-
Nuのワークフローとツールは、2022年(およびそれ以降)の最新ソフトウェアに期待される使いやすさを備えている必要があります。
-
Nuはデータを構造化または非構造化のいずれかとして見ます。PowerShellのような構造化シェルです。
-
最後に、Nuはデータを関数的に見ます。ミューテーションを使用する代わりに、パイプラインは可変状態なしでデータを読み込み、変更し、保存する手段として機能します。
Officially Supported By
このリストに追加されるには、issueまたはPRを送信してください。
- zoxide
- starship
- oh-my-posh
- Couchbase Shell
- virtualenv
- atuin
- clap
- Dorothy
- Direnv
- x-cmd
- vfox
- Windmill
- Lacy
Contributing
詳細については Contributing を参照してください。すでに貢献してくれたすべての人に感謝します!
License
このプロジェクトはMITライセンスの下で利用可能です。詳細については、LICENSE ファイルを参照してください。