# 🚀 First Five Apps - Nyashの実力を証明する最初の5本

## 🎯 概要
Phase 11.5完了を待たずに、**今すぐ作れる**実用アプリ5本で、Nyashの産業レベルの完成度を世に示します。
すべて「Everything is Box／PluginInvoke」で統一実装し、VM/JIT/AOT/WASMの全バックエンドで動作確認します。

## 📋 アプリケーション一覧

### 1. ny-echo（最小CLI）- 基本I/O検証
**目的**: I/O・StringBoxの道通し確認

```nyash
// apps/ny-echo/main.hako
static box Main {
    main(args) {
        local console = new ConsoleBox()
        local options = parseArgs(args)
        
        loop(true) {
            local input = console.readLine()
            if input == null { break }
            
            local output = input
            if options.get("upper") {
                output = input.toUpperCase()
            } else if options.get("lower") {
                output = input.toLowerCase()
            }
            
            console.log(output)
        }
    }
}
```

**受入基準**:
- [ ] VM/JIT/AOT/GCオン・オフすべてでtrace_hash一致
- [ ] 100万行処理で性能劣化なし
- [ ] メモリリークなし（GCカウンター確認）

### 2. ny-jsonlint（Python連携デモ）- プラグイン統合
**目的**: PyRuntimeBox/PyObjectBox経由のPluginInvoke検証

```nyash
// apps/ny-jsonlint/main.hako
static box Main {
    init { py, console }
    
    main(args) {
        me.py = new PyRuntimeBox()
        me.console = new ConsoleBox()
        
        local filename = args.get(1)
        if filename == null {
            me.console.error("Usage: ny-jsonlint <file.json>")
            return 1
        }
        
        local file = new FileBox()
        file.open(filename, "r")
        local content = file.read()
        file.close()
        
        local result = me.py.eval("
import json
try:
    json.loads(content)
    'OK'
except Exception as e:
    f'NG: {str(e)}'
", new MapBox().set("content", content))
        
        me.console.log(result)
        return result.startsWith("OK") ? 0 : 1
    }
}
```

**受入基準**:
- [ ] OS差なく実行（Windows/Linux/macOS）
- [ ] --sealedモードで完全再現可能
- [ ] 大規模JSON（10MB）でも安定動作

### 3. ny-array-bench（性能デモ）- ベンチマーク基準
**目的**: ArrayBox map/reduce、StatsBox導入、性能可視化

```nyash
// apps/ny-array-bench/main.hako
static box Main {
    init { stats }
    
    main(args) {
        me.stats = new StatsBox()
        local sizes = [1000, 10000, 100000]
        
        loop(size in sizes) {
            me.benchArrayOps(size)
        }
        
        // 結果をJSON出力（CI集計用）
        local result = me.stats.toJSON()
        print(result)
    }
    
    benchArrayOps(size) {
        local array = new ArrayBox()
        
        // 1. 配列生成
        me.stats.startTimer("create_" + size)
        loop(i < size) {
            array.push(i)
        }
        me.stats.endTimer("create_" + size)
        
        // 2. map操作
        me.stats.startTimer("map_" + size)
        local doubled = array.map(|x| x * 2)
        me.stats.endTimer("map_" + size)
        
        // 3. reduce操作
        me.stats.startTimer("reduce_" + size)
        local sum = doubled.reduce(|a, b| a + b, 0)
        me.stats.endTimer("reduce_" + size)
        
        // VM基準の相対性能を記録
        me.stats.recordRelative("vm", 1.0)
        if IS_JIT { me.stats.recordRelative("jit", SPEEDUP) }
        if IS_AOT { me.stats.recordRelative("aot", SPEEDUP) }
    }
}
```

**受入基準**:
- [ ] VM=1.0x基準でJIT/AOTの倍率表示
- [ ] fallbacks=0（完全最適化）
- [ ] 結果JSON自動出力（CI集計可能）

### 4. ny-filegrep（実用ミニ）- ファイルI/O実用例
**目的**: BytesBox/FileBox（プラグイン）I/O、実用的なツール

```nyash
// apps/ny-filegrep/main.hako
static box Main {
    init { pattern, recursive, results }
    
    main(args) {
        me.parseArgs(args)
        me.results = new ArrayBox()
        
        local path = args.getLast() || "."
        me.searchPath(path)
        
        // 結果表示
        loop(result in me.results) {
            print(result)
        }
        
        return me.results.length() > 0 ? 0 : 1
    }
    
    searchPath(path) {
        local file = new FileBox()
        
        if file.isDirectory(path) {
            if me.recursive {
                local entries = file.listDir(path)
                loop(entry in entries) {
                    me.searchPath(path + "/" + entry)
                }
            }
        } else {
            me.searchFile(path)
        }
    }
    
    searchFile(filepath) {
        local file = new FileBox()
        file.open(filepath, "r")
        
        local lineNum = 0
        loop(true) {
            local line = file.readLine()
            if line == null { break }
            
            lineNum = lineNum + 1
            if line.contains(me.pattern) {
                me.results.push(filepath + ":" + lineNum + ":" + line)
            }
        }
        
        file.close()
    }
}
```

**受入基準**:
- [ ] Windows/Linux/macOSで同一結果
- [ ] 大規模ディレクトリ（1万ファイル）対応
- [ ] メモリ効率的（ストリーム処理）

### 5. ny-http-hello（WASM/ネイティブ両対応）- Web実用例
**目的**: NetBox（プラグイン）とイベントループ、FutureBox活用

```nyash
// apps/ny-http-hello/main.hako
static box Main {
    init { server, running }
    
    main(args) {
        local port = args.get(1) || "8080"
        me.server = new HttpServerBox()
        me.running = true
        
        // シグナルハンドラー設定
        registerSignal("SIGINT", || me.stop())
        
        // サーバー起動
        me.server.start(port.toInteger())
        print("Server listening on http://localhost:" + port)
        
        // リクエストループ
        loop(me.running) {
            nowait request = me.server.accept()
            me.handleRequest(wait request)
        }
        
        me.server.stop()
        return 0
    }
    
    handleRequest(request) {
        local response = new HttpResponseBox()
        
        if request.path() == "/" {
            response.setStatus(200)
            response.setHeader("Content-Type", "text/plain")
            response.write("Hello from Nyash!")
        } else {
            response.setStatus(404)
            response.write("Not Found")
        }
        
        request.respond(response)
    }
    
    stop() {
        print("Shutting down...")
        me.running = false
    }
}
```

**受入基準**:
- [ ] 100req/s程度のスモーク通過
- [ ] 停止シグナルでクリーンfini
- [ ] WASMビルドでも動作（制限付き）

## 🎯 実装優先順位

1. **ny-echo** - 最小実装、CI基盤確立
2. **ny-array-bench** - 性能基準確立
3. **ny-jsonlint** - プラグイン統合実証
4. **ny-filegrep** - 実用性実証
5. **ny-http-hello** - Web対応実証

## 📊 成功指標

### 全体指標
- [ ] 5アプリすべてがVM/JIT/AOTで動作
- [ ] CIでの自動テスト確立
- [ ] ドキュメント・サンプル完備

### 性能指標
- [ ] JIT: VMの5倍以上高速
- [ ] AOT: VMの10倍以上高速
- [ ] メモリ使用量: 同等機能のPython比50%以下

### 品質指標
- [ ] ゼロクラッシュ（1000回実行）
- [ ] メモリリークなし（長時間実行）
- [ ] プラットフォーム差異なし

## 🚀 配布戦略

### リリース形式
```
nyash-apps-v1.0/
├── bin/
│   ├── ny-echo[.exe]
│   ├── ny-jsonlint[.exe]
│   ├── ny-array-bench[.exe]
│   ├── ny-filegrep[.exe]
│   └── ny-http-hello[.exe]
├── examples/
│   └── *.hako (ソースコード)
├── benchmarks/
│   └── results.json
└── README.md
```

### 展開先
- GitHub Releases
- Homebrew (macOS)
- Scoop (Windows)
- Docker Hub (コンテナ版)

これで「30日で作った言語」の実力を世界に示せます！🎉