# DLT-TUI 企画・要件定義書

## 1. プロジェクト概要 (Project Overview)

本プロジェクトは、Macの「DLT Viewer」に匹敵する、もしくはそれを凌駕する使い勝手を目指した、Terminal UI (TUI) ベースの Automotive DLT (Diagnostic Log and Trace) ログビューアを開発することを目的とします。
TUIの利点（軽量、高速、キーボード操作主眼）を最大限に活かし、大量のログデータを即座にフィルタリング・検索・可視化できるツールを目指します。

## 2. コアバリュー・UXコンセプト (Core Value & UX Concept)

- **キーボード・セントリック**: マウスレスですべての操作（スクロール、絞り込み、検索、設定変更）が直感的に行える。
- **超高速レスポンス**: ギガバイト級の dlt ファイルを読み込んでもUIがブロックせず、瞬時にフィルタリングが適用される。
- **リッチなTUI表現**: ログレベル（FATAL, ERROR, WARN, INFO, DEBUG）ごとの色分け、タイムスタンプやペイロードの分かりやすいカラム表示。
- **設定の即時性**: よく使うフィルタ条件などをプリセット化し、ワンストロークで切り替えられるようにする。

## 3. 要件定義 (Requirements)

### 3.1 機能要件 (Functional Requirements)

**Phase 1: MVP（最小限の機能）**

1. **DLTファイル読み込み**: オフラインの `.dlt` ファイルを読み込み、パースして一覧表示できる。
2. **圧縮ファイルの透過的解凍・読み込み**: `.gz` や `.zip` などで圧縮されたDLTファイルを、事前に手動解凍することなく、TUI上で直接開いて透過的に読み込み・閲覧できる。
3. **ファイルエクスプローラ / ナビゲータ機能**: 巨大なディレクトリツリーや多数のDLTファイルをストレスなく行き来できるよう、TUI内にファイルツリー/リスト表示機能を備え、キーボード操作のみで瞬時に別のファイルを開けるようにする。
4. **ログ一覧表示**: Timestamp, ECU ID, App ID (APID), Context ID (CTID), Log Level, Payload などをカラム形式で表示。
5. **基本的なフィルタリング**:
   - Log Levelによるフィルタ (例: ERROR以上のみ表示)
   - App ID / Context ID の一致フィルタ
   - ペイロードのテキストベース検索（正規表現サポート含む）
6. **ナビゲーションと検索**: 上下スクロール、先頭/末尾へのジャンプ、文字列検索とハイライト表示。

**Phase 2: ストリームと高度な機能（Future）**

1. **ライブログ受信**: TCP / UDP / Serial 経由でのリアルタイムDLTログストリームの受信と表示。
2. **高度なフィルタリング**: 複数条件の AND / OR / NOT フィルタ。
3. **プラグイン / デコードサポート**: FIBEX や AUTOSAR ARXML を読み込んだ高度なペイロードデコード（シグナル解析など）。
4. **ファイルエクスポート**: フィルタ結果をCSVや新しいDLTファイルとして出力。

### 3.2 非機能要件 (Non-Functional Requirements)

1. **パフォーマンス**: ファイル読み込み時にバックグラウンドスレッドでパースを行い、UIスレッドをブロックしない（非同期読み込み）。
2. **クロスプラットフォーム**: macOS, Linux に対応し、標準的なターミナルエミュレータで動作すること。
3. **ポータビリティ**: シングルバイナリで配布可能であること。

### 3.3 技術スタック要件 (Tech Stack)

- **言語**: Rust
  - 安全で高速。また、TUIやパーサの実装に非常に適しているため。
- **TUI フレームワーク**: `ratatui` (Crossterm)
  - モダンでリッチなTUI構築の事実上の標準。
- **アーキテクチャ・設計**:
  - TDD (Test Driven Development) を徹底。とくにパースロジックやフィルタリングロジックはユニットテストから開始。
  - The Elm Architecture (TEA) または Flux のような単方向データフローを採用し、UIステートとドメインステートを分離。

## 4. テスト戦略 (Testing Strategy - TDD)

- **ユニットテスト**:
  - DLTメッセージのパース、ペイロードのデコード、フィルタ判定処理などを中心にテストケース（正常系、異常系、境界値）を網羅する。
- **ユースケース / シナリオテスト**:
  - 特定のファイル読み込み→フィルタ適用→検索→結果出力というような一連のユーザー行動を模擬テストする。
- **UI表示のテスト**:
  - Ratatuiの `TestBackend` 等を用いた、TUIの描画結果の検証（必要に応じて）。

## 5. 開発マイルストーン (Milestones)

1. **Step 1: 企画定義とプロジェクトセットアップ**（現在）
2. **Step 2: DLTパーサの設計と実装 (TDD)**
   - テスト設計、ファイルからのオフライン読み出し対応。
3. **Step 3: TUIアーキテクチャの構築**
   - 画面のレイアウト作成（ログ一覧プレビュー、ステータスバー、コマンド入力行など）。
4. **Step 4: 機能の実装と結合**
   - メッセージ表示、スクロール、フィルタ機能、検索機能の段階的追加。

---

この要件定義をご確認いただき、方針に問題がなければ、リポジトリの初期化と TDD（テスト設計・記述）を開始いたします。修正・追加したい要件はありますか？
