-
Notifications
You must be signed in to change notification settings - Fork 2
Closed
Labels
Description
概要
ファイル操作機能を3点強化する:
- ファイル/ディレクトリの移動 - コンテキストメニューから移動先を選択して移動
- ファイルの作成時刻表示 - ファイルツリーにファイルサイズと共に作成時刻を常時表示
- ファイル内容のコピー - FileViewerにコピーボタンを追加し、テキストファイル全文をクリップボードにコピー
背景・課題
- 作成したファイルを探す際、ファイルの時刻情報がないため時系列での特定が困難
- ファイルの配置ミス時にリネームでは対応できず、削除→再作成が必要で操作コストが高い
- ファイル内容をメモとして活用する際、全文コピーに手動選択が必要で手間がかかる
提案する解決策
1. ファイル移動機能
コンテキストメニュー(右クリック/長押し)に「移動」アクションを追加し、移動先ディレクトリをダイアログで選択する方式。
- 既存のリネーム機能(
renameFileOrDirectory())を参考に、moveFileOrDirectory()を新規実装 - APIエンドポイント: PATCH
/api/worktrees/[id]/files/[...path]にaction: "move"を追加 - 移動先の選択UIはディレクトリ一覧ダイアログを表示
2. ファイル作成時刻表示
ファイルツリーのファイル名横にサイズと共に作成時刻を常時表示する。
TreeItem型にbirthtime(作成時刻)とmtime(更新時刻)フィールドを追加file-tree.tsのreadDirectory()でstat()から時刻情報を取得FileTreeView.tsxのTreeNodeコンポーネントに時刻表示を追加
3. ファイル内容コピー
FileViewerにコピーボタンを追加し、テキストファイルの全文をワンクリックでクリップボードにコピー。
- 既存の
clipboard-utils.ts(copyToClipboard())を活用 FileViewer.tsxにコピーボタンを追加- コピー成功時にToast通知を表示
実装タスク
ファイル移動
-
src/lib/file-operations.tsにmoveFileOrDirectory()関数を追加 -
src/app/api/worktrees/[id]/files/[...path]/route.tsの PATCH にaction: "move"を追加 -
src/components/worktree/ContextMenu.tsxに「移動」メニュー項目を追加 - 移動先ディレクトリ選択ダイアログの実装
-
src/components/worktree/WorktreeDetailRefactored.tsxにhandleMoveハンドラーを追加 - i18n対応(en/ja)
ファイル作成時刻表示
-
src/types/models.tsのTreeItemにbirthtime/mtimeフィールドを追加 -
src/lib/file-tree.tsのreadDirectory()で時刻情報を取得 -
src/components/worktree/FileTreeView.tsxに時刻表示を追加 - 日付フォーマット処理(
date-locale.ts活用)
ファイル内容コピー
-
src/components/worktree/FileViewer.tsxにコピーボタンを追加 -
clipboard-utils.tsのcopyToClipboard()を呼び出し - コピー成功/失敗のToast通知
- i18n対応(en/ja)
受入条件
- コンテキストメニューから「移動」を選択し、移動先ディレクトリを指定してファイル/ディレクトリを移動できること
- 移動時にパス検証(
isPathSafe())が実施され、ディレクトリトラバーサルが防止されること - ファイルツリーにファイルの作成時刻が表示されること
- FileViewerでテキストファイルの全文をワンクリックでコピーできること
- コピー成功時にToast通知が表示されること
- 新規関数・APIのユニットテストが追加されていること
- 既存テストがすべてパスすること
- i18n対応(en/ja)がされていること
影響範囲
変更対象ファイル
| ファイル | 変更内容 |
|---|---|
src/types/models.ts |
TreeItemに birthtime / mtime フィールド追加 |
src/lib/file-operations.ts |
moveFileOrDirectory() 関数追加 |
src/lib/file-tree.ts |
readDirectory() で時刻情報取得 |
src/app/api/worktrees/[id]/files/[...path]/route.ts |
PATCH に action: "move" 追加 |
src/components/worktree/FileTreeView.tsx |
時刻表示追加 |
src/components/worktree/FileViewer.tsx |
コピーボタン追加 |
src/components/worktree/ContextMenu.tsx |
「移動」メニュー項目追加 |
src/components/worktree/WorktreeDetailRefactored.tsx |
handleMove ハンドラー追加 |
関連コンポーネント
src/lib/clipboard-utils.ts- 既存のコピー機能を活用src/lib/path-validator.ts- 移動先パスの検証src/config/file-operations.ts- 削除安全設定(移動でも参照)src/lib/date-locale.ts- 日付フォーマット
Reactions are currently unavailable