فهرست منبع

update serena memories

Yuki Takei 7 ماه پیش
والد
کامیت
6b9566c34e

+ 47 - 22
.serena/memories/apps-app-jotai-migration-progress.md

@@ -1,5 +1,23 @@
 # Jotai 移行進捗(2025-09-05 更新)
 
+## 移行作業フロー ⚠️【重要】
+
+### 基本手順(必ず順序通りに実行)
+1. **新しいJotaiベースの実装を作成**
+2. **使用箇所を新しい実装に置き換え**
+3. **【必須】旧コードの削除** ← これを忘れずに!
+4. **【必須】型チェックの実行** ← migration完了確認
+
+```bash
+# 型チェック実行(migration完了確認)
+cd /workspace/growi/apps/app && pnpm run lint:typecheck
+```
+
+### ⚠️ 旧コード削除が必須な理由
+- **Migration完了の確認**: 旧コードが残っていると、移行が不完全でもtypecheckがパスしてしまう
+- **コンパイルエラーによる検証**: 旧コードを削除することで、移行漏れが確実に検出される
+- **保守性の向上**: 重複コードがないことで、将来の変更時の混乱を防ぐ
+
 ## 実装状況
 
 ### ✅ 移行完了済み
@@ -45,6 +63,11 @@
   - 使用箇所を完全移行(GrantSelector、SavePageControls、PageEditor)
   - デフォルト値: `{ grant: PageGrant.GRANT_PUBLIC }`
 
+#### モーダル状態(個別ファイル方式で移行中)
+- ✅ **`usePageCreateModal`**: ページ作成モーダル(states/ui/modal/page-create.ts)
+- ✅ **`usePageDeleteModal`**: ページ削除モーダル(states/ui/modal/page-delete.ts)
+- ✅ **個別インポート方式**: `from '~/states/ui/modal/page-create'` でバンドルサイズ最適化
+
 ### ✅ 型チェック修正(完了済み)
 - ✅ 全てのTS2488エラー(配列分割代入の誤用)を修正済み
 - ✅ `pnpm run lint:typecheck` が成功することを確認済み
@@ -62,7 +85,8 @@
 - `states/ui/sidebar/`: サイドバー状態の完全実装
 - `states/ui/device.ts`: デバイス状態
 - `states/ui/editor/`: エディター状態(useSelectedGrant追加)
-- `states/ui/page.ts`: ページUI状態(usePageControlsX新規追加) ← **NEW**
+- `states/ui/page.ts`: ページUI状態(usePageControlsX新規追加)
+- `states/ui/modal/`: 個別モーダルファイル(page-create, page-delete)
 - `states/page/`: ページ関連状態の完全実装
 - `states/server-configurations/`: サーバー設定状態
 - `states/global/`: グローバル状態
@@ -70,7 +94,23 @@
 
 ## 🚧 次の実装ステップ(優先度順)
 
-### **優先度 1: 他のUI関連フック(判定・検討が必要)**
+### **優先度 1: 残りモーダル状態の移行**
+
+#### 個別ファイル方式での継続実装 ← **次の主要タスク**
+- **残り16個のモーダル**: 個別ファイル `states/ui/modal/[modal-name].ts` で実装
+- **対象モーダル**:
+  - `useGrantedGroupsInheritanceSelectModal`, `useEmptyTrashModal`
+  - `usePageDuplicateModal`, `usePageRenameModal`, `usePutBackPageModal`
+  - `usePagePresentationModal`, `usePrivateLegacyPagesMigrationModal`
+  - `useDescendantsPageListModal`, `usePageAccessoriesModal`
+  - `useUpdateUserGroupConfirmModal`, `useShortcutsModal`
+  - `useDrawioModal`, `useHandsontableModal`, `useConflictDiffModal`
+  - `useBookmarkFolderDeleteModal`, `useDeleteAttachmentModal`
+  - `usePageSelectModal`, `useTagEditModal`
+- **実装方針**: 既存パターン(page-create, page-delete)を踏襲
+- **特徴**: すべて一時的な状態で永続化不要
+
+### **優先度 2: 他のUI関連フック(判定・検討が必要)**
 
 以下のフックはSWR継続使用を検討(データフェッチングやcomputed値のため):
 - `useCurrentPageTocNode`: ページ固有の目次データ
@@ -80,25 +120,9 @@
 - `useCommentEditorDirtyMap`: 複雑なMap操作
 - `useIsAbleToShow*`: computed boolean値群
 
-### **優先度 2: モーダル状態の一括移行**
-
-#### 全モーダル状態の移行 ← **次の主要タスク**
-- **新規ファイル**: `states/ui/modal.ts`
-- **対象モーダル(全18種類)**:
-  - `usePageCreateModal`, `useGrantedGroupsInheritanceSelectModal`
-  - `usePageDeleteModal`, `useEmptyTrashModal`, `usePageDuplicateModal`
-  - `usePageRenameModal`, `usePutBackPageModal`, `usePagePresentationModal`
-  - `usePrivateLegacyPagesMigrationModal`, `useDescendantsPageListModal`
-  - `usePageAccessoriesModal`, `useUpdateUserGroupConfirmModal`
-  - `useShortcutsModal`, `useDrawioModal`, `useHandsontableModal`
-  - `useConflictDiffModal`, `useBookmarkFolderDeleteModal`
-  - `useDeleteAttachmentModal`, `usePageSelectModal`, `useTagEditModal`
-- **実装方針**: 統一的なパターンでモーダル状態を管理
-- **特徴**: すべて一時的な状態で永続化不要
-
 ### **最終フェーズ: クリーンアップ**
 
-#### 不要ファイルの削除とリファクタリング
+#### 不要ファイルの削除とリファクタリング(旧コード削除手順の厳守)
 - `stores/ui.tsx` の段階的縮小・最終削除
 - `stores/modal.tsx` の完全削除
 - 残存する SWR ベースの状態の最終判定
@@ -106,13 +130,14 @@
 
 ## 📊 進捗サマリー
 
-- **完了**: 主要なUI状態 + ページ関連状態 + SSRハイドレーション + 型チェック修正 + **新規2状態(usePageControlsX, useSelectedGrant)**
-- **次のタスク**: モーダル状態の一括移行
-- **残り**: UI関連フック数個(判定必要) + モーダル18個 + クリーンアップ
+- **完了**: 主要なUI状態 + ページ関連状態 + SSRハイドレーション + 型チェック修正 + 新規2状態 + モーダル2個
+- **次のタスク**: 残り16個のモーダル状態の個別ファイル実装
+- **残り**: UI関連フック数個(判定必要) + モーダル16個 + クリーンアップ
 - **推定残工数**: 1-2週間
 
 ## 🔄 更新履歴
 
+- **2025-09-05**: 個別モーダルファイル方式採用、重要な移行手順追加、メモリファイル統合
 - **2025-09-05**: `usePageControlsX`と`useSelectedGrant`の移行完了、ビルド確認済み
 - **2025-09-05**: 型チェック修正完了、ページ関連状態移行済みを確認、進捗状況を実態に合わせて更新
 - **2025-07-30**: ドキュメント統合、進捗の実装状況反映

+ 36 - 18
.serena/memories/apps-app-jotai-migration.md

@@ -14,7 +14,25 @@
 - **SWR**: データフェッチング、サーバーキャッシュ管理に特化
 - **Jotai**: クライアントサイドUI状態、同期的な状態管理に特化
 
-## 2. 実装ガイド
+## 2. 移行作業フロー ⚠️【重要】
+
+### 基本手順(必ず順序通りに実行)
+1. **新しいJotaiベースの実装を作成**
+2. **使用箇所を新しい実装に置き換え**
+3. **【必須】旧コードの削除** ← これを忘れずに!
+4. **【必須】型チェックの実行** ← migration完了確認
+
+```bash
+# 型チェック実行(migration完了確認)
+cd /workspace/growi/apps/app && pnpm run lint:typecheck
+```
+
+### ⚠️ 旧コード削除が必須な理由
+- **Migration完了の確認**: 旧コードが残っていると、移行が不完全でもtypecheckがパスしてしまう
+- **コンパイルエラーによる検証**: 旧コードを削除することで、移行漏れが確実に検出される
+- **保守性の向上**: 重複コードがないことで、将来の変更時の混乱を防ぐ
+
+## 3. 実装ガイド
 
 ### ディレクトリ構造(実装済み)
 
@@ -32,7 +50,9 @@ states/
 │   │   ├── types.ts        # 型定義 ✅
 │   │   └── utils.ts        # ユーティリティ ✅
 │   ├── device.ts           # デバイス状態 ✅
-│   └── modal.ts            # モーダル状態(未作成)
+│   └── modal/              # 個別モーダルファイル ✅
+│       ├── page-create.ts  # ページ作成モーダル ✅
+│       └── page-delete.ts  # ページ削除モーダル ✅
 ├── page/
 │   ├── index.ts            # ページ状態エクスポート ✅
 │   ├── hooks.ts            # ページ関連hooks ✅
@@ -103,7 +123,7 @@ export const useHydrateFeatureAtoms = (initialData: InitialData) => {
 - **読み取り専用Hook**: `use{Feature}` (useAtomValue を使用)
 - **書き込み専用Hook**: `useSet{Feature}` (useSetAtom を使用)
 
-## 3. 移行時の注意点
+## 4. 移行時の注意点
 
 ### フックの返り値の変更
 - **従来**: `const [value, setValue] = useHook();` (tuple)
@@ -120,7 +140,7 @@ const [value] = useAtomValueHook(); // useAtomValue を使った hook
 const value = useAtomValueHook();
 ```
 
-## 4. 判断基準
+## 5. 判断基準
 
 ### Jotai移行対象
 - ✅ クライアントサイド完結のUI状態
@@ -135,7 +155,7 @@ const value = useAtomValueHook();
 - ❌ リアルタイム更新が必要
 - ❌ 複雑な computed値(パフォーマンス重視)
 
-## 5. 移行の成果
+## 6. 移行の成果
 
 ### 技術的改善
 - **コードの簡潔化**: 複雑なSWRベースのカスタムフックがシンプルなatomsに
@@ -150,18 +170,14 @@ const value = useAtomValueHook();
 - **テストの簡素化**: モックやテストデータの管理が簡単
 - **型安全性**: TS2488エラーの原因となる誤用を防止
 
----
-
-## 6. 技術スタック
+## 7. 技術スタック
 
 - **Jotai**: v2.x(アトミックな状態管理)
 - **SSR対応**: `useHydrateAtoms`(公式パターン)
 - **永続化**: 既存の`scheduleToPut`機構と連携
 - **TypeScript**: 型推論とタイプセーフティ
 
----
-
-## 7. 現在の課題と今後の対応
+## 8. 現在の課題と今後の対応
 
 ### 動的ルーティング時の状態管理
 以下の値は Next.js の dynamic routing によるページ遷移時に適切に管理されています:
@@ -172,13 +188,10 @@ const value = useAtomValueHook();
 - **isNotCreatable** - `usePageNotCreatable()` で適切に管理済み ✅
 
 ### 次のステップ
-1. **残りのUI状態の移行**: `usePageControlsX`, `useSelectedGrant`
-2. **モーダル状態の移行**: 統一的なパターンでの実装
-3. **レガシーファイルのクリーンアップ**: `stores/ui.tsx`, `stores/modal.tsx`
-
----
+1. **残りのモーダル状態の移行**: 個別ファイルでの実装継続
+2. **レガシーファイルのクリーンアップ**: 旧実装の完全削除
 
-## 8. トラブルシューティング
+## 9. トラブルシューティング
 
 ### よくある移行エラー
 
@@ -199,4 +212,9 @@ import { useOldHook } from '~/states/somewhere';
 // ✅ 新しいatom-based hook
 import { useNewHook } from '~/states/somewhere';
 const value = useNewHook(); // または [value, setValue]
-```
+```
+
+### 旧コード削除後のエラー対応
+- まだ使用されている箇所がある → migration継続が必要
+- export/importの整理が不完全 → 整理後に再実行
+- 型エラーが残る → hook使用方法の変更が必要

+ 0 - 92
.serena/memories/apps-app-jotai-typecheck-handover.md

@@ -1,92 +0,0 @@
-# Jotai Migration Handover (Updated - 2025-09-05)
-
-## Current Status: ✅ TYPECHECK ERRORS RESOLVED
-
-**Context:**
-- Goal: Complete Jotai migration for UI state management
-- Branch: support/use-jotai
-- Command: `cd apps/app && pnpm run lint:typecheck` ✅ PASSES
-
-## ✅ COMPLETED TASKS
-
-### Type Check Issues Fixed
-- **All TS2488 errors resolved** ✅
-- Fixed tuple destructuring patterns in:
-  - `PageAccessoriesModal/ShareLink/ShareLinkForm.tsx`
-  - `PageAccessoriesModal/ShareLink/ShareLink.tsx`  
-  - `PageEditor/LinkEditModal.tsx`
-- **Current status**: `pnpm run lint:typecheck` exits 0
-
-### Major Migration Completed
-- **Sidebar state**: Complete ✅
-- **Device state**: Complete ✅
-- **Editor state**: Complete ✅
-- **Page state**: Complete ✅
-- **Server configurations**: Complete ✅
-- **Global state**: Complete ✅
-- **Socket.IO state**: Complete ✅
-- **SSR hydration**: Complete ✅
-
-## 🚧 NEXT PRIORITIES
-
-### Immediate Tasks (Priority 1)
-1. **`usePageControlsX` migration**
-   - Location: `src/stores/ui.tsx:149`
-   - Target: Create `states/ui/page.ts`
-   - Pattern: Simple number atom (no persistence needed)
-
-2. **`useSelectedGrant` migration**
-   - Location: `src/stores/ui.tsx:153`
-   - Target: Add to `states/ui/editor.ts`
-   - Pattern: Temporary state for editor
-
-### Future Tasks (Priority 2-3)
-3. **Modal states migration** (18 modals in `stores/modal.tsx`)
-4. **Other UI hooks evaluation** (determine if SWR should remain)
-5. **Legacy cleanup** (`stores/ui.tsx`, `stores/modal.tsx` removal)
-
-## 🔧 Technical Notes
-
-### Migration Pattern Recognition
-- **useAtomValue hooks**: Return single value → `const value = useHook()`
-- **useAtom hooks**: Return tuple → `const [value, setValue] = useHook()`
-- **Legacy SWR patterns**: May need data fetching evaluation
-
-### File Structure (Established)
-```
-states/
-├── ui/sidebar/     ✅ Complete
-├── ui/editor/      ✅ Complete  
-├── ui/device.ts    ✅ Complete
-├── page/           ✅ Complete
-├── server-configurations/ ✅ Complete
-├── global/         ✅ Complete
-└── socket-io/      ✅ Complete
-```
-
-## 🎯 Definition of Done
-
-**Phase 1 (Current)**: ✅ Type checking passes
-**Phase 2 (Next)**: Migrate remaining 2 UI hooks
-**Phase 3 (Future)**: Modal migration + cleanup
-
-## 🚨 Important Notes
-
-- **DO NOT** reintroduce tuple destructuring for single-value hooks
-- **Pattern**: If hook uses `useAtomValue` → single value return
-- **Pattern**: If hook uses `useAtom` → tuple return
-- Avoid modifying unrelated lint issues (console logs, img tags, any types)
-
-## Quick Commands
-```bash
-# Type check
-cd apps/app && pnpm run lint:typecheck
-
-# Find remaining legacy patterns
-grep -r "const \[.*\] = use" apps/app/src --include="*.tsx" --include="*.ts"
-```
-
----
-**Status**: Ready for next migration phase
-**Last Updated**: 2025-09-05
-**Next Session Focus**: usePageControlsX migration