もしあなたがまだ Bash で JSON や CSV、システムログを処理しているなら、それはつまりハンマーでメスの仕事をしているようなものです。伝統的な Unix Shell は 1970 年代に設計されたもので、当時のデータは主にプレーンテキストでした。でも 2026 年の世界では、データは構造化されています —— JSON API、CSV エクスポート、データベースのクエリ結果、すべてがテーブルやレコードの形です。

Nushell はまさにこの時代のために生まれた Shell です。派手なテーマやプロンプトの拡張ツールなんかじゃありません。パラダイムシフトです:データをテキストではなく、データとして扱う。

Nushell とは?

Nushell(略称 nu)は元 Facebook エンジニアの Jonathan Turner によって作られたモダンな Shell です。核となるアイデアはシンプルながら革命的:

  • 構造化された出力:すべてのコマンド出力は構造化データ(テーブル、リスト、レコード)。プレーンテキストじゃない
  • 型安全:Shell がデータ型を理解してくれる。文字列、整数、日付、ファイルサイズ、すべて明確な型がある
  • クロスプラットフォーム:Windows、macOS、Linux をネイティブサポート。WSL や Cygwin は不要
  • Rust 製:優れたパフォーマンス、メモリセーフ、シングルバイナリでデプロイ可能

2026 年 3 月現在、Nushell は バージョン 0.111.0 までリリースされており、GitHub スター数は 35,000+ を超え、最も成長の速い Shell プロジェクトの一つになっています。

なぜ Nushell が必要なのか?

伝統的な Shell のつらみ

Bash で構造化データを処理するってどんな感じ?

BASH
# JSON から特定のフィールドを抽出?jq が必要
curl -s https://api.example.com/users | jq '.[] | select(.active==true) | .name'

# CSV のある列の平均値を計算?awk が必要
cat data.csv | awk -F',' 'NR>1 {sum+=$3; count++} END {print sum/count}'

# 100MB 以上のファイルをリストしてソート?パイプ地獄
ls -lh | awk '$5 ~ /M/ {print $0}' | sort -k5 -h

タスクごとに違うツールが必要で、パイプは awk、sed、grep、jq のミックスでぐちゃぐちゃ。エラー処理?型変換?がんばってね。

Nushell のやり方

NU
# 同じタスクが、統一された構文で
# JSON API のクエリ
http get https://api.example.com/users | where active == true | select name

# CSV データ分析
open data.csv | math avg --columns price

# ファイルのフィルタリングとソート
ls | where size > 100MB | sort-by size

違いがわかりますか?一貫した構文、構造化されたデータフロー、外部ツールは不要。

Nushell のインストール

Linux(おすすめ)

BASH
# 公式インストールスクリプトを使用
curl --proto '=https' --tlsv1.2 -sSf https://www.nushell.sh/install.sh | sh

# またはパッケージマネージャーで
# Ubuntu/Debian
cargo install nu

# Arch Linux
yay -S nushell

# Fedora
sudo dnf install nushell

macOS

BASH
# Homebrew
brew install nushell

# MacPorts
sudo port install nushell

Windows

POWERSHELL
# Winget (Windows 10/11)
winget install nushell

# Chocolatey
choco install nushell

# Scoop
scoop install nushell

インストールの確認

BASH
nu --version
# 出力:nu 0.111.0

コアコンセプト:テキストからデータへ

1. テーブルは第一級市民

Nushell では、ls はもはやテキスト行を出力しません。テーブルを返します:

NU
ls
# ╭───┬──────────────────┬──────┬────────┬───────────────╮
# │ # │       name       │ type │  size  │   modified    │
# ├───┼──────────────────┼──────┼────────┼───────────────┤
# │ 0 │ docs             │ dir  │  4.0KB │ 10 minutes ago│
# │ 1 │ README.md        │ file │  2.3KB │ 2 hours ago   │
# │ 2 │ package.json     │ file │  1.1KB │ 1 day ago     │
# ╰───┴──────────────────┴──────┴────────┴───────────────╯

これは本物のテーブルオブジェクトです。こんなことができます:

NU
# フィルタリング
ls | where type == file

# 列の選択
ls | select name size

# ソート
ls | sort-by size -r

# 特定の行を取得
ls | get 0.name

2. データ型システム

Nushell はデータ型を理解し、尊重してくれます:

NU
# 数値演算
echo 10 + 5        # 15(整数)
echo 3.14 * 2      # 6.28(浮動小数点)

# 文字列操作
echo "hello" | str length           # 5
echo "Hello World" | str downcase   # hello world

# 日付処理
date now
date now | format date "%Y-%m-%d"
date now - date "2026-01-01"  # 日数の差を表示

# ファイルサイズ(自動変換)
echo 1GB / 1MB  # 1024

3. パイプで流れるのは値。テキストじゃない

これが最も重要な違いです。Bash では:

BASH
# テキストストリーム。各コマンドがテキストをパースする必要がある
ls -l | grep ".md" | awk '{print $9}'

Nushell では:

NU
# 構造化データフロー。型情報を保持したまま
ls | where name =~ ".md" | get name

実践:データパイプラインの例

例 1:GitHub リポジトリ情報の分析

NU
# リポジトリデータを取得して分析
http get https://api.github.com/repos/nushell/nushell \
  | select stargazers_count forks_count open_issues language \
  | flatten

例 2:CSV 販売データの処理

sales.csv というファイルがあるとします:

CSV
date,product,amount,region
2026-01-01,Widget A,1500,North
2026-01-02,Widget B,2300,South
2026-01-03,Widget A,1800,North
NU
# 読み込んで分析
open sales.csv \
  | where region == "North" \
  | group-by product \
  | each { |it| 
      {
        product: $it.product.0,
        total: ($it | get amount | math sum),
        count: ($it | length)
      }
    }

例 3:システムモニタリングダッシュボード

NU
# システムステータスレポートを作成
{
  hostname: (sys host | get name),
  uptime: (sys host | get uptime),
  memory: {
    total: (sys mem | get total),
    free: (sys mem | get free),
    percent_used: ((sys mem | get total) - (sys mem | get free)) / (sys mem | get total) * 100
  },
  disk: (sys disks | select name mount total free | 
         insert percent_used { |it| (($it.total - $it.free) / $it.total * 100) | math round })
}

例 4:ファイルの一括リネーム

NU
# すべての .webp ファイルを .webp にリネーム
ls *.webp \
  | each { |it| 
      mv $it.name ($it.name | str replace ".webp" ".webp")
    }

2026 年新機能ハイライト

Nushell 0.110.0 と 0.111.0 で大幅な改善がありました:

1. パイプ内での let コマンド

パイプの途中で変数を定義できるようになりました:

NU
ls 
  | let total = (length)
  | let files = (where type == file | length)
  | echo $"Total: ($total), Files: ($files)"

2. コマンドグループのエイリアス

入力を減らして効率アップ:

NU
# エイリアスグループを定義
alias gs = git status
alias ga = git add
alias gc = git commit

# またはコマンドグループを使用
def "git s" [] { git status }
def "git a" [] { git add }

3. 強化された finally サポート

クリーンアップコードが必ず実行されることを保証:

NU
try {
  open data.json | process
} catch { |err|
  echo $"Error: ($err)"
} finally {
  echo "Cleanup complete"
}

4. Polars プラグイン統合

ビッグデータ処理のパフォーマンスが向上:

NU
# Polars プラグインで大型 CSV を処理
polars open large_dataset.csv 
  | polars filter (polars col "amount" > 1000)
  | polars group-by "region"
  | polars agg (polars col "amount" | polars agg sum)

設定とカスタマイズ

設定ファイルの場所

BASH
# 設定ファイル
~/.config/nushell/config.nu

# 環境変数
~/.config/nushell/env.nu

# 履歴
~/.local/share/nushell/history.txt

基本設定の例

NU
# config.nu

# エディタを設定
$env.EDITOR = "nvim"

# カスタムプロンプト
def create_prompt [] {
  let path = (pwd | path basename)
  $"[($path)]> "
}

$env.PROMPT_COMMAND = { create_prompt }

# シンタックスハイライトを有効化
use ~/.config/nushell/plugins/gghid.nu *

便利なエイリアス

NU
# config.nu に追加

alias ll = ls -l
alias la = ls -a
alias lg = ls | grep
alias rm = rm -i  # 安全な削除

# Git ショートカット
alias gs = git status
alias ga = git add
alias gc = git commit -m
alias gp = git push

パフォーマンス比較

2026 年のベンチマーク結果:

タスク Bash + ツール Nushell
JSON パース jq + パイプ ネイティブ(3 倍高速)
CSV 処理 awk/csvkit ネイティブ(2 倍高速)
ファイルフィルタリング find + grep ls + where(同等)
起動時間 ~10ms ~50ms
メモリ使用量 ~5MB ~15MB

Nushell の起動は少し遅いですが、複雑なデータ処理タスクでは外部プロセスの呼び出しが減るため、全体として優れています。

学習リソース

Nushell を使うべきタイミングは?

✅ 向いているシーン

  • JSON、CSV、YAML などの構造化データの処理
  • データパイプラインや ETL フローの構築
  • クロスプラットフォームのスクリプト開発
  • API データの取得と処理
  • システム管理・モニタリングタスク

⚠️ 注意が必要なシーン

  • 既存の Bash スクリプトからの移行(書き直しが必要)
  • 極めてパフォーマンスが重要なループ処理(起動オーバーヘッド)
  • 特定の Shell の挙動に依存する本番環境
  • 古いツールチェーンと深く統合されているシステム

まとめ

Nushell は Shell デザインの未来を示しています。Bash を完全に置き換えるものではありません(システムスクリプトには POSIX 互換性が必要ですから)、モダンな開発タスクに対して、より強力なインタラクティブ環境とスクリプト環境を提供してくれます。

主なメリット:

  1. 🎯 構造化データファースト — jq、awk、sed のミックスはもう不要
  2. 🔒 型安全 — スクリプトのエラーや予期せぬ挙動を減らせる
  3. 🚀 クロスプラットフォームで一貫 — 同じスクリプトが全プラットフォームで動く
  4. 📦 シングルバイナリデプロイ — 依存関係なし、配布が簡単
  5. 🛠️ アクティブに開発中 — 2026 年も継続的にアップデート、コミュニティも成長中

API やデータファイルを扱うことが多い方、あるいは単にモダンなコマンドライン体験が欲しい方なら、Nushell は時間をかけて学ぶ価値があります。


始め方:インストール後 nu を実行してインタラクティブモードに入るか、nu script.nu でスクリプトを実行しましょう。公式チュートリアルが最高のスタート地点です。