もしあなたがまだ 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 で構造化データを処理するってどんな感じ?
# 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 のやり方
# 同じタスクが、統一された構文で
# 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(おすすめ)
# 公式インストールスクリプトを使用
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
# Homebrew
brew install nushell
# MacPorts
sudo port install nushell
Windows
# Winget (Windows 10/11)
winget install nushell
# Chocolatey
choco install nushell
# Scoop
scoop install nushell
インストールの確認
nu --version
# 出力:nu 0.111.0
コアコンセプト:テキストからデータへ
1. テーブルは第一級市民
Nushell では、ls はもはやテキスト行を出力しません。テーブルを返します:
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 │
# ╰───┴──────────────────┴──────┴────────┴───────────────╯
これは本物のテーブルオブジェクトです。こんなことができます:
# フィルタリング
ls | where type == file
# 列の選択
ls | select name size
# ソート
ls | sort-by size -r
# 特定の行を取得
ls | get 0.name
2. データ型システム
Nushell はデータ型を理解し、尊重してくれます:
# 数値演算
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 では:
# テキストストリーム。各コマンドがテキストをパースする必要がある
ls -l | grep ".md" | awk '{print $9}'
Nushell では:
# 構造化データフロー。型情報を保持したまま
ls | where name =~ ".md" | get name
実践:データパイプラインの例
例 1:GitHub リポジトリ情報の分析
# リポジトリデータを取得して分析
http get https://api.github.com/repos/nushell/nushell \
| select stargazers_count forks_count open_issues language \
| flatten
例 2:CSV 販売データの処理
sales.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
# 読み込んで分析
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:システムモニタリングダッシュボード
# システムステータスレポートを作成
{
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:ファイルの一括リネーム
# すべての .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 コマンド
パイプの途中で変数を定義できるようになりました:
ls
| let total = (length)
| let files = (where type == file | length)
| echo $"Total: ($total), Files: ($files)"
2. コマンドグループのエイリアス
入力を減らして効率アップ:
# エイリアスグループを定義
alias gs = git status
alias ga = git add
alias gc = git commit
# またはコマンドグループを使用
def "git s" [] { git status }
def "git a" [] { git add }
3. 強化された finally サポート
クリーンアップコードが必ず実行されることを保証:
try {
open data.json | process
} catch { |err|
echo $"Error: ($err)"
} finally {
echo "Cleanup complete"
}
4. Polars プラグイン統合
ビッグデータ処理のパフォーマンスが向上:
# 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)
設定とカスタマイズ
設定ファイルの場所
# 設定ファイル
~/.config/nushell/config.nu
# 環境変数
~/.config/nushell/env.nu
# 履歴
~/.local/share/nushell/history.txt
基本設定の例
# 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 *
便利なエイリアス
# 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 GitHub - ソースコードとイシュートラッカー
- Nushell ブログ - 最新のリリース情報と機能アップデート
- Discord コミュニティ - アクティブなコミュニティサポート
- クックブック - 実用的なコードスニペット
Nushell を使うべきタイミングは?
✅ 向いているシーン
- JSON、CSV、YAML などの構造化データの処理
- データパイプラインや ETL フローの構築
- クロスプラットフォームのスクリプト開発
- API データの取得と処理
- システム管理・モニタリングタスク
⚠️ 注意が必要なシーン
- 既存の Bash スクリプトからの移行(書き直しが必要)
- 極めてパフォーマンスが重要なループ処理(起動オーバーヘッド)
- 特定の Shell の挙動に依存する本番環境
- 古いツールチェーンと深く統合されているシステム
まとめ
Nushell は Shell デザインの未来を示しています。Bash を完全に置き換えるものではありません(システムスクリプトには POSIX 互換性が必要ですから)、モダンな開発タスクに対して、より強力なインタラクティブ環境とスクリプト環境を提供してくれます。
主なメリット:
- 🎯 構造化データファースト —
jq、awk、sedのミックスはもう不要 - 🔒 型安全 — スクリプトのエラーや予期せぬ挙動を減らせる
- 🚀 クロスプラットフォームで一貫 — 同じスクリプトが全プラットフォームで動く
- 📦 シングルバイナリデプロイ — 依存関係なし、配布が簡単
- 🛠️ アクティブに開発中 — 2026 年も継続的にアップデート、コミュニティも成長中
API やデータファイルを扱うことが多い方、あるいは単にモダンなコマンドライン体験が欲しい方なら、Nushell は時間をかけて学ぶ価値があります。
始め方:インストール後 nu を実行してインタラクティブモードに入るか、nu script.nu でスクリプトを実行しましょう。公式チュートリアルが最高のスタート地点です。