@@ -13,7 +13,6 @@ states/
1313│ ├── untitled-page.ts # 無題ページ状態 ✅
1414│ ├── page-abilities.ts # ページ権限判定状態 ✅ DERIVED ATOM!
1515│ ├── unsaved-warning.ts # 未保存警告状態 ✅ JOTAI PATTERN!
16- │ ├── page-tree-desc-count-map.ts # ページツリー子孫カウント ✅ JOTAI PATTERN!
1716│ └── modal/ # 個別モーダルファイル ✅
1817│ ├── page-create.ts # ページ作成モーダル ✅
1918│ ├── page-delete.ts # ページ削除モーダル ✅
@@ -45,6 +44,25 @@ states/
4544 └── states/ # OpenAI専用状態 ✅
4645 ├── index.ts # exports ✅
4746 └── unified-merge-view.ts # UnifiedMergeView状態 ✅
47+
48+ features/ # Feature Directory Pattern ✅
49+ └── page-tree/ # ページツリー機能 ✅ (NEW!)
50+ ├── index.ts # メインエクスポート
51+ ├── client/
52+ │ ├── components/ # 汎用UIコンポーネント
53+ │ │ ├── SimplifiedItemsTree.tsx
54+ │ │ ├── TreeItemLayout.tsx
55+ │ │ └── SimpleItemContent.tsx
56+ │ ├── hooks/ # 汎用フック
57+ │ │ ├── use-data-loader.ts
58+ │ │ └── use-scroll-to-selected-item.ts
59+ │ ├── interfaces/ # インターフェース定義
60+ │ │ └── index.ts # TreeItemProps, TreeItemToolProps
61+ │ └── states/ # Jotai状態 ✅
62+ │ ├── page-tree-update.ts # ツリー更新状態
63+ │ └── page-tree-desc-count-map.ts # 子孫カウント状態
64+ └── constants/
65+ └── index.ts # ROOT_PAGE_VIRTUAL_ID
4866```
4967
5068## 📋 ファイル配置ルール
@@ -60,9 +78,36 @@ states/
6078- ** グローバル状態** : ` global/ ` ディレクトリ
6179- ** 通信系** : ` socket-io/ ` ディレクトリ
6280
63- ### 機能別専用states (` states/features/ ` )
64- - ** OpenAI機能** : ` features/openai/client/states/ `
65- - ** 将来の機能** : ` features/{feature-name}/client/states/ `
81+ ### 機能別専用states (` states/features/ ` および ` features/ ` )
82+
83+ ** OpenAI機能** : ` states/features/openai/client/states/ `
84+ ** ページツリー機能** : ` features/page-tree/client/states/ ` ✅ (Feature Directory Pattern)
85+
86+ ### Feature Directory Pattern (新パターン) ✅
87+
88+ ` features/{feature-name}/ ` パターンは、特定機能に関連するコンポーネント、フック、状態、定数をすべて一箇所に集約する構造。
89+
90+ ** 適用例** : ` features/page-tree/ `
91+ ```
92+ features/page-tree/
93+ ├── index.ts # 全エクスポートの集約
94+ ├── client/
95+ │ ├── components/ # UIコンポーネント
96+ │ ├── hooks/ # カスタムフック
97+ │ ├── interfaces/ # 型定義
98+ │ └── states/ # Jotai状態
99+ └── constants/ # 定数
100+ ```
101+
102+ ** インポート方法** :
103+ ``` typescript
104+ import {
105+ SimplifiedItemsTree ,
106+ TreeItemLayout ,
107+ usePageTreeInformationUpdate ,
108+ ROOT_PAGE_VIRTUAL_ID
109+ } from ' ~/features/page-tree' ;
110+ ```
66111
67112## 🏷️ ファイル命名規則
68113
@@ -119,13 +164,29 @@ states/context.ts → _atomsForDerivedAbilities
119164## 🎯 今後の拡張指針
120165
121166### 新規機能追加時
122- 1 . ** 機能専用度評価** : 汎用 → ` states/ui/ ` 、専用 → ` states/ features/`
167+ 1 . ** 機能専用度評価** : 汎用 → ` states/ui/ ` 、専用 → ` features/{feature-name}/client/states / `
1231682 . ** 複雑度評価** : シンプル → 単一ファイル、複雑 → ディレクトリ
1241693 . ** 依存関係確認** : 既存atomの活用可能性
1251704 . ** 命名規則遵守** : 確立された命名パターンに従う
171+ 5 . ** Feature Directory Pattern検討** : 複数のコンポーネント・フック・状態が関連する場合は ` features/ ` 配下に集約
126172
127173### ディレクトリ構造維持
128174- ** 責務単一原則** : 1ファイル = 1機能・責務
129175- ** 依存関係最小化** : 循環参照の回避
130176- ** 拡張性** : 将来の機能追加を考慮した構造
131- - ** 検索性** : ファイル名から機能が推測できる命名
177+ - ** 検索性** : ファイル名から機能が推測できる命名
178+
179+ ### Feature Directory Pattern 採用基準
180+ 以下の条件を満たす場合は ` features/ ` 配下に配置:
181+ - 複数のUIコンポーネントが関連している
182+ - 専用のカスタムフックがある
183+ - 専用のJotai状態がある
184+ - 機能として独立性が高い
185+
186+ ** 例** : ` features/page-tree/ ` は SimplifiedItemsTree, TreeItemLayout, useDataLoader, page-tree-update.ts などが密接に関連
187+
188+ ---
189+
190+ ## 📝 最終更新日
191+
192+ 2025-11-28 (Feature Directory Pattern 追加)
0 commit comments