# Nushell

## 概要

Nushell（Nu）は、構造化データを扱うことに特化した新しいタイプのシェルです。従来のシェルがテキストストリームを扱うのに対し、Nushellはデータを構造化された形式（テーブル、リスト、レコードなど）で操作し、パイプラインを通じてデータを変換・フィルタリングします。Rust言語で実装され、クロスプラットフォーム（Windows、macOS、Linux）で動作します。

## 主な機能

| 機能カテゴリ | 説明 |
| --- | --- |
| 構造化データパイプライン | データをテーブル形式で扱い、`where`、`select`、`sort-by`などのコマンドでフィルタリング・変換 |
| ファイル/URL読み込み | JSON、TOML、YAML、CSV、XMLなど様々な形式のファイルを構造化データとして読み込み |
| プラグインシステム | JSON-RPCプロトコルを使用した拡張可能なプラグインアーキテクチャ |
| 組み込みコマンド | `ls`、`ps`、`sys`など、OS情報を構造化データとして取得するコマンド群 |
| SQLite統合 | SQLiteデータベースとの直接連携機能 |
| MCP対応 | Model Context Protocolのサポート |
| LSPサーバー | エディタ統合のためのLanguage Server Protocol実装 |
| カスタム設定 | `config.nu`による詳細な設定カスタマイズ |

## 技術スタック

### コア

- 言語: Rust (Edition 2024)
- 最小Rustバージョン: 1.91.1
- ライセンス: MIT
- ビルドシステム: Cargo (Cargoワークスペース構成)

### 主要ライブラリ

- **reedline**: インタラクティブなコマンドライン編集機能
- **crossterm**: クロスプラットフォームターミナル操作
- **miette**: エラーレポーティングとダイアグノスティクス
- **serde / serde_json**: データシリアライズ/デシリアライズ
- **chrono**: 日時処理
- **ratatui**: ターミナルUI（explore機能）
- **rusqlite**: SQLiteデータベース連携
- **ureq / rustls**: HTTPクライアントとTLS
- **polars**: データフレーム処理（プラグイン経由）

## ディレクトリ構成

```
nushell-main/
├── src/                    # メインバイナリのソースコード
│   ├── main.rs            # エントリーポイント
│   ├── command.rs         # コマンドライン引数処理
│   ├── config_files.rs    # 設定ファイル読み込み
│   ├── ide.rs             # IDE統合機能
│   └── run.rs             # 実行ロジック
├── crates/                 # ワークスペースメンバー（サブクレート）
│   ├── nu-cli/            # CLI機能・REPL
│   ├── nu-command/        # 組み込みコマンド実装
│   ├── nu-engine/         # 評価エンジン・コンパイラ
│   ├── nu-parser/         # パーサー
│   ├── nu-protocol/       # プロトコル定義・型システム
│   ├── nu-std/            # 標準ライブラリ
│   ├── nu-plugin*/        # プラグインシステム関連
│   ├── nu-lsp/            # Language Server Protocol実装
│   ├── nu-explore/        # インタラクティブデータ探索
│   ├── nu-table/          # テーブル表示
│   ├── nu-json/           # JSON処理
│   ├── nuon/              # NUON形式（Nushell独自のデータ形式）
│   └── nu_plugin_*/       # サンプル・公式プラグイン
├── tests/                  # 統合テスト
├── benches/                # ベンチマーク
├── scripts/                # ビルド・CI用スクリプト
├── docker/                 # Dockerファイル
├── devdocs/                # 開発者向けドキュメント
├── toolkit/                # 開発ツールキット
└── assets/                 # 画像・アセット
```

## セットアップ

### 必要条件

- Rust 1.91.1 以上
- Cargo（Rustに付属）
- 対応OS: Windows、macOS、Linux

### インストール方法

#### パッケージマネージャー経由（推奨）

```bash
# Linux / macOS (Homebrew)
brew install nushell

# Windows (winget)
winget install nushell
```

#### ソースからのビルド

```bash
# リポジトリのクローン
git clone https://github.com/nushell/nushell.git
cd nushell

# リリースビルド
cargo build --release

# バイナリは target/release/nu に生成される
```

### 設定ファイル

初回起動時にデフォルト設定ファイルが生成されます。設定ファイルの場所は以下のコマンドで確認できます：

```nushell
$nu.config-path
```

デフォルト設定ファイルのサンプルは `crates/nu-utils/src/default_files/` にあります。

## 開発

### ビルド

```bash
# 開発ビルド
cargo build

# リリースビルド
cargo build --release

# 全機能を有効にしてビルド
cargo build --features full
```

### テスト

```bash
# 全テスト実行
cargo test --workspace

# 標準ライブラリのテスト
cargo run -- -c "use toolkit.nu; toolkit test stdlib"
```

### コード品質チェック

```bash
# フォーマットチェック
cargo fmt --all -- --check

# Clippy（リンター）
cargo clippy --workspace -- -D warnings -D clippy::unwrap_used
```

### 統合開発ツール

Nushellには開発用のツールキットが用意されています：

```nushell
use toolkit.nu
toolkit check pr    # PRの品質チェック（フォーマット、Clippy、テスト）
```

### Feature Flags

| フラグ | 説明 |
| --- | --- |
| `default` | plugin, trash-support, sqlite, network, rustls-tls, mcp |
| `full` | network, plugin, rustls-tls, sqlite, system-clipboard, trash-support, mcp |
| `plugin` | プラグインシステムの有効化 |
| `sqlite` | SQLite機能の有効化 |
| `network` | ネットワーク機能 |
| `mcp` | Model Context Protocol対応 |
| `system-clipboard` | システムクリップボード統合 |
