【ターミナル改造⑥】様々な機能や要素を取り入れた、高機能で便利な新規シェルの「nushell」を試用

- 白黒ターミナルを利用する生活が多くなってきた無機質生活に、少々彩りを加えるために奔走する記事第六弾。
- 改造前後のターミナル差分が、「表面変化九割」という事実資料を打ち付けられてもなお、彩りツールの調査に勤しむ。
- 今回は、「劇的な見やすさ・高機能」が評判のシェル「Nu Shell」を試用することにしよう。

## 概要
- Rust製の、高機能で便利な新規シェル。
- bashやPowershell等から影響を受け、外観や機能性を追求している。
- [公式Github](https://github.com/nushell/nushell)
- [公式マニュアル](https://book.nushell.sh/)

## 特徴

### 構造データ表示
- これまでのブロック型表示ではなく、テーブル化された構造データで、出力される。
- そのため内容を、従来のテーブル操作のように簡単に「並べ替え・フィルター操作」等が可能。

### 自動構造化
- jsonファイルやcsvファイル等のデータ型ファイルを、コマンド一発でテーブル構造表示で確認することができる。
- そのため、ファイルを直接編集することなく、「より見やすい可視化・必要な値だけのフィルタ抽出」等が可能。

### コマンド互換
- nushellで独自に扱える豊富なコマンドに加えて、これまで利用していたコマンドも利用できる。
- そのため、覚えることが少なく、より高機能なコマンド操作が可能。

## 結果
- 下記のように、構造データとして扱うため、ファイル内容がテーブル型で見やすく表示される。

<img width="854" alt="test.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336499/1c7f34d8-b6e6-0aed-2799-59e159911be5.png">

- また、jsonやcsv等のファイルを、独自の内部コマンドで、直接編集することなく「構造化・フィルタ操作」等が可能。

<img width="523" alt="test2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336499/2dd822ba-ddec-b923-6b05-9524377f8956.png">

- また、独自コマンドだけではなく、「^」をつけてのコマンド入力で、これまで利用してきたコマンドも扱える。

<img width="446" alt="test4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336499/32bee598-99ab-5c3c-cc0b-3c04cb42e373.png">

## 作業環境
- Mac OS X 10.13.4

## インストール

### リリースページからのインストール
- **※今回は試用のため、コマンドでのインストールではなく、この方法を利用。**

1. まず[こちら](https://github.com/nushell/nushell/releases/tag/0.2.0)のページにアクセスして、自分の環境(Mac,Windows)に合わせたファイルをダウンロード。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336499/087e911a-10ce-642e-7a17-3cabc3ef1f5d.png)
2. ダウンロード後、任意のフォルダに展開・解凍して、中身が下記であることを確認する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336499/67403f43-4f2e-2d16-8d82-fd4b0ba343e2.png)
3. 確認後、フォルダ内の「nu」を起動して、シェル画面が起動すれば完了。

### コマンドからのインストール
- **※今回は試用のため、コマンドでのインストールでは行わず、上記のリリースページからの導入**
- 各環境(Mac,Windows,Linux)でのコマンドでのインストールは[こちら](https://book.nushell.sh/ja/installation)を参考。
    - **※どちらもRust環境やコンパイラの導入等が必要。**

## 操作
- **※コマンドとして多数の組み合わせがあるため、今回は基本使用や頻繁使用に応じた操作例とする。**
- **※[各種コマンド一覧はこちらを参考にする](https://github.com/nushell/nushell#commands)**

### 基本操作例
- nushellでの操作の基本コマンド例としては主に下記。
    - **※例は、nushell起動済みでの操作。**
    - **※cdやmv等の標準コマンドは、「^cd」のように入力せずに、そのまま使用可能。**

|コマンド|内容|
|:---:|:---:|
|`ls` |作業(カレント)ディレクトリのファイル・フォルダ情報確認|
|<code>ls &#124; pick 項目</code>|指定項目でのファイル・フォルダ情報確認<br>例: <code>ls &#124; pick name size created</code>|
|<code>ls &#124; reject 項目</code>|指定項目を除外したファイル・フォルダ情報確認<br>例: <code>ls &#124; reject type size</code>|
|`ps`|`動作プロセス確認`|
|<code>ps &#124; where 条件</code>|指定条件に合致した動作プロセス確認<br><code>ps &#124; where cpu > 5</code>|
|<code>ps &#124; sort-by 項目 &#124; first 表示数</code>|指定項目で並べ替え、指定表示数で動作プロセス確認<br>例: <code>ps &#124; sort-by cpu &#124; first 3</code>|
|`open 対応形式ファイル`|対応したデータ形式ファイルを、構造データへ自動整形して表示<br>現状の対応ファイルは、**「json,yaml,toml,xml,csv,ini」**<br>例: `open package.json`|
|`date`|現在日時確認|
|`enter パス名`|指定パスを開始位置にした新規シェルの作成<br>シェルの切り替えは「`p`,`n`」で行う<br>`enter /作業フォルダ名`|
|`shells`|作成シェル一覧|
|`help`|ヘルプ情報表示|
|`version`|バージョン情報表示|

### 操作画像例
- 上記のようなファイルやデータ操作等の実際の画像例としては、下記。

<img width="418" alt="uhsi.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336499/87919da4-a3cf-3841-a27d-e3008d5a4545.png">

- 上記のようなシェル作成や切り替え等の操作の実際の画像例としては、下記。

<img width="545" alt="uhu.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336499/4137f63b-b2bf-8e7e-774f-2e891ba07964.png">


## まとめ
- 今回は新規シェルの試用ということで、未知数で計り知れないツールに、巡り会えて利用していることを、錯乱状態になりながら記事を書く。
- 「より良い可視化・高機能」なツールのはびこりが進む真っ只中に、技術者になった新米な私は、余計な自画自賛。
- この未知数ツールと賢人開発者への礼拝と、今後の行く末を見届ける決断をしてから、次回調査をすることにしよう。

## 参考
- https://github.com/nushell/nushell  
→公式Githubです。大変お世話になりました。
- https://book.nushell.sh/  
→公式ドキュメントです。大変お世話になりました。
- https://www.jonathanturner.org/2019/08/introducing-nushell.html  
→開発者ブログです。大変お世話になりました。
- https://dev.classmethod.jp/tool/try-rust-nushell/  
→参考にしました。大変お世話になりました。