# 仕様: analyze_code_structure のフォーマット復元

## 概要

この仕様は、v1.9.4 のアーキテクチャ改善を維持しながら、`analyze_code_structure` ツールで元の v1.6.1.4 フォーマット動作を復元するための要件を定義します。

## 修正された要件

### 要件 FR-001: Full フォーマット Markdown テーブル出力
`analyze_code_structure` ツールは、`format_type="full"` が指定された場合、Markdown テーブル形式を生成しなければなりません。

#### シナリオ: 単一クラス分析
**前提条件** メソッドとフィールドを含む単一クラスの Java ファイル  
**実行条件** `format_type="full"` で `analyze_code_structure` が呼び出される  
**期待結果** 出力は以下を含む Markdown ドキュメントでなければなりません:
- ヘッダー: `# ClassName` または `# package.ClassName`
- パッケージセクション: バッククォートで囲まれたパッケージ名を持つ `## Package`
- プロパティ（Package、Type、Visibility、Lines、Total Methods、Total Fields）を含むクラス情報テーブル
- Fields と Methods テーブルを含む詳細クラスセクション
- すべてのテーブルは `|` セパレータを使用した適切な Markdown テーブル構文を使用しなければなりません

#### シナリオ: 複数クラス分析
**前提条件** 複数のクラスを含む Java ファイル  
**実行条件** `format_type="full"` で `analyze_code_structure` が呼び出される  
**期待結果** 出力は以下を含まなければなりません:
- 単一クラス名ではなくファイル名を含むヘッダー
- すべてのクラスを一覧表示するクラス概要テーブル
- 各クラスの個別クラス詳細セクション

### 要件 FR-002: 複雑度情報を含む Compact フォーマット
`analyze_code_structure` ツールは、`format_type="compact"` が指定された場合、複雑度スコアを含むコンパクトな Markdown テーブル形式を生成しなければなりません。

#### シナリオ: Compact フォーマット出力
**前提条件** メソッドとフィールドを含む任意のソースコードファイル  
**実行条件** `format_type="compact"` で `analyze_code_structure` が呼び出される  
**期待結果** 出力は以下を含む Markdown ドキュメントでなければなりません:
- ヘッダー: `# Code Structure Summary`
- Name、Type、Visibility、Lines、Complexity、Parameters 列を含むメソッドテーブル
- Name、Type、Visibility、Lines 列を含むフィールドテーブル
- すべてのメソッドに複雑度スコアが含まれなければなりません
- すべてのテーブルは適切な Markdown テーブル構文を使用しなければなりません

### 要件 FR-003: シンプル CSV フォーマット構造
`analyze_code_structure` ツールは、`format_type="csv"` が指定された場合、シンプルな CSV 形式を生成しなければなりません。

#### シナリオ: CSV フォーマット出力
**前提条件** コード要素を含む任意のソースコードファイル  
**実行条件** `format_type="csv"` で `analyze_code_structure` が呼び出される  
**期待結果** 出力は以下を含む有効な CSV でなければなりません:
- ヘッダー行: `Type,Name,Visibility,Lines,Complexity,Parameters`
- 各コード要素のデータ行
- シンプルなパラメータ表現（複数の場合はクォート内でカンマ区切り）
- 複雑なネスト構造や詳細な修飾子の分解はなし

### 要件 FR-004: サポート形式の制限
`analyze_code_structure` ツールは、元の3つのフォーマットタイプのみをサポートしなければなりません。

#### シナリオ: フォーマットタイプ検証
**前提条件** `analyze_code_structure` ツール  
**実行条件** ツールスキーマが照会される  
**期待結果** `format_type` enum は正確に `["full", "compact", "csv"]` を含まなければなりません  
**かつ** HTML フォーマット（`html`、`html_compact`、`html_json`）はサポートされてはなりません

#### シナリオ: 無効フォーマットの拒否
**前提条件** `analyze_code_structure` ツール  
**実行条件** `format_type="html"` または任意の HTML バリアントで呼び出される  
**期待結果** ツールはサポートされていないフォーマットを示す ValueError を発生させなければなりません

### 要件 FR-005: レガシー互換性の保持
ツールは、サポートされているすべてのフォーマットで v1.6.1.4 との正確な出力互換性を維持しなければなりません。

#### シナリオ: 出力フォーマット検証
**前提条件** v1.6.1.4 テストで使用された同一の入力ファイル  
**実行条件** サポートされている各フォーマットで `analyze_code_structure` が実行される  
**期待結果** 出力は v1.6.1.4 参照出力と正確に一致しなければなりません
- 行末は一貫していなければなりません
- テーブルフォーマットは同一でなければなりません
- メタデータ抽出は同じ結果を生成しなければなりません

## 追加された要件

### 要件 FR-006: ハイブリッドフォーマッターアーキテクチャ
実装は、レガシー互換性とレジストリ拡張性を組み合わせたハイブリッドアプローチを使用しなければなりません。

#### シナリオ: フォーマット決定ロジック
**前提条件** `analyze_code_structure` ツールの実行  
**実行条件** フォーマットタイプが指定される  
**期待結果** ツールは以下を行わなければなりません:
- `full`、`compact`、`csv` フォーマットには `LegacyTableFormatter` を使用
- 将来の拡張性のために `FormatterRegistry` アーキテクチャを維持
- レガシーフォーマットと拡張フォーマット間の明確な分離を提供

### 要件 FR-007: エラーハンドリングの一貫性
エラーハンドリングは、エラーメッセージを改善しながら v1.6.1.4 の動作と一貫性を保たなければなりません。

#### シナリオ: ファイル未発見エラー
**前提条件** 存在しないファイルパス  
**実行条件** `analyze_code_structure` が呼び出される  
**期待結果** ツールは明確なメッセージを含む `FileNotFoundError` を発生させなければなりません

#### シナリオ: 無効フォーマットエラー
**前提条件** サポートされていないフォーマットタイプ  
**実行条件** `analyze_code_structure` が呼び出される  
**期待結果** ツールは利用可能なフォーマットを一覧表示する `ValueError` を発生させなければなりません

## 削除された要件

### 要件 FR-008: HTML フォーマットサポートの削除
HTML フォーマットサポートは `analyze_code_structure` から完全に削除されなければなりません。

#### シナリオ: HTML フォーマットのクリーンアップ
**前提条件** 現在の v1.9.4 実装  
**実行条件** フォーマット復元が適用される  
**期待結果** すべての HTML 関連フォーマッターがツールから削除されなければなりません
- `HtmlFormatter`、`HtmlCompactFormatter`、`HtmlJsonFormatter` はアクセス可能であってはなりません
- ツールスキーマは HTML フォーマットオプションを含んではなりません
- エラーメッセージは HTML フォーマットを代替案として提案してはなりません

## 相互参照

- 関連: **セキュリティ要件**（パス検証は維持されなければなりません）
- 関連: **パフォーマンス要件**（フォーマット決定のオーバーヘッドは最小限でなければなりません）
- 関連: **テスト要件**（包括的なフォーマット検証テストが必要です）

## 検証基準

1. すべてのフォーマット出力が v1.6.1.4 参照サンプルと正確に一致する
2. ツールスキーマがサポートされているフォーマットのみを反映する: `["full", "compact", "csv"]`
3. HTML フォーマットが `analyze_code_structure` を通じて完全にアクセス不可能である
4. エラーハンドリングが v1.6.1.4 互換性を維持する
5. ハイブリッドアーキテクチャのパフォーマンス影響が無視できる程度である
6. すべての既存統合テストが修正されたフォーマット期待値でパスする
