Files
hakorune/docs/private/ideas/new-features/2025-08-27-simple-man-shell-revolution.md

5.4 KiB
Raw Blame History

簡単マン流シェル革命 - Everything is Box Shell

作成日: 2025-08-27 Status: 構想段階 Priority: High Related: ChatGPT5との共同構想

🎯 ビジョン

Windows/Ubuntu差異を感じさせない、Boxベースの最小シェル

すべてをBoxで統一することで

  • クォート地獄からの解放
  • OS差異の完全吸収
  • 暗黙展開による事故の根絶
  • 思考速度に追いつくUI

🏗️ コア設計全部Box

基本Box群

// 環境変数は Map<str,str>常にUTF-8
EnvBox: 環境変数管理、OS差異はアダプタで吸収

// 引数は常に配列(トークナイズ済)
ArgvBox: スペース/クォート解釈は一切しない

// プロセス表現
ProcBox: spawn/exec/wait/kill メソッド、I/OはPipeBox/FileBox

// パスは正規化(/区切りで統一)
PathBox: Windows/Unix差はアダプタで解決

// パイプはBoxで明示
PipelineBox: lhs | rhs も等価メソッドで表現可

💎 使用例(クォート地獄からの解放)

従来のシェル(地獄)

# スペースとクォートの悪夢
git commit -m "fix: handle 'quotes' and \"escapes\" properly"
tar czf archive.tar.gz $(find . -name "*.md" -o -name "*.txt")

簡単マン流シェル(天国)

// クォート不要!配列で書く
Cmd(["git", "commit", "-m", "fix: handle 'quotes' and \"escapes\" properly"])
  .run(cwd, env).wait()

// 変数展開も明示的
let files = Glob("*.{md,txt}").expand(cwd)
Cmd(["tar", "czf", "archive.tar.gz"].concat(files))
  .run(cwd, env).wait()

🚀 思考速度UI設計

反応速度の約束

  • 20ms以内: タイプ開始〜候補提示
  • 80ms以内: 実行プレビュー表示
  • モードレス: 学習不要・覚えるコマンド最小

UI構成要素全部Box

InputLineBox: 1行入力、文脈で自動パース
SuggestBox: リアルタイム3レベル候補コマンド/アクション/引数)
ArgChipsBox: 引数を"チップ"で視覚化Tab/矢印で移動)
PreviewBox: 実行前プレビュー(結果サマリ/影響件数/危険度)
HistoryStackBox: 直前操作の即戻しCtrl+Z/Y

入力体験

git → [commit, status, log] → commit → [message:"", add:[]]
→ Preview: "3 files staged, commit message: fix"
→ Enter実行

🐳 軽量コンテナ統合Docker級をシンプルに

コンテナもBox

// イメージからコンテナ作成
let img = ImageBox.from_tar("ubuntu-min.tar")
let fs = FSBox.overlay(img, rw_dir="/tmp/ctr1")
let net = NetBox.bridge("ny0").expose(8080->80)

// コンテナ構成
let ctr = ContainerBox {
  fs, net,
  env: EnvBox.default().set("RUST_LOG", "info"),
  ns: NamespaceBox.default().isolate_pid().isolate_mount(),
  caps: CapsBox.minimal().seccomp_profile("default"),
  cmd: Cmd(["/usr/bin/nginx", "-g", "daemon off;"])
}

// 実行・操作
ctr.start()
let logs = ctr.attach_stdout()
ctr.exec(Cmd(["ls", "-la", "/"]))
ctr.stop()
ctr.commit("myimg:latest")

fini伝播による確定的クリーンアップ

  • プロセスkill → アンマウント → veth破棄 → temp削除
  • GCオン/オフでも観測等価

📺 ハイブリッドシェルテキスト最小GUI

設計原則

  1. 真実はテキスト: 常にテキスト実行可能CLI互換
  2. GUIは注釈: テキスト結果に薄いメタを添えるだけ
  3. レンダはクライアント責務: サーバは重いUIを送らない

メッセージ設計(超軽量)

git status
{"ui":"table","cols":["file","status"],"data":[["src/app.rs","M"],["README.md","U"]]}

3テンプレートで統一

  • table: ファイル一覧、git status等
  • list: 検索結果、ファイル列挙等
  • log: 実行ログ、HTTPレスポンス等

🔒 セキュリティ・安全性

構造化による根本解決

  • インジェクション不可能: すべて配列引数
  • 暗黙展開禁止: $VAR、*, ? の自動展開なし
  • AllowList: 実行可能コマンド限定
  • Timeout/Limit: リソース制限明示

Lintルール

  • L1: スペース区切り文字列禁止 → 配列で書け
  • L2: 環境変数の暗黙展開禁止 → env.get()使用
  • L3: 相対パスのみ警告 → cwd明示
  • L4: 未捕捉stderr警告

📅 実装ロードマップ

Phase 1: 構造シェル基盤1週間

  • CmdBox + EnvBox配列引数/UTF-8
  • PipelineBox + PipeBoxパイプ実装
  • File redirect + GlobBox
  • 基本Lintルール実装

Phase 2: 思考速度UI1週間

  • SuggestBox20ms補完
  • ArgChipsBox引数可視化
  • PreviewBox80msプレビュー
  • HistoryStackBoxUndo/Redo

Phase 3: コンテナ統合2週間

  • ContainerBox基盤
  • FSBoxoverlay/bind
  • NetBoxbridge/port
  • NamespaceBox隔離

Phase 4: ハイブリッドGUI1週間

  • 3テンプレート実装
  • UiMetaBox設計
  • テキスト↔GUI等価性
  • WebSocket/stdio両対応

💡 期待される革命

  1. 開発効率10倍: クォート地獄・OS差異から解放
  2. 学習コスト1/10: Everything is Boxで統一
  3. 事故率1/100: 構造化・明示化で根本安全
  4. 思考速度実現: 20ms反応でストレスフリー

「簡単マン」の究極形態 - すべてが箱になった世界