Skip to content

ファイル機能強化 #162

@Kewton

Description

@Kewton

概要

ファイル操作機能を3点強化する:

  1. ファイル/ディレクトリの移動 - コンテキストメニューから移動先を選択して移動
  2. ファイルの作成時刻表示 - ファイルツリーにファイルサイズと共に作成時刻を常時表示
  3. ファイル内容のコピー - FileViewerにコピーボタンを追加し、テキストファイル全文をクリップボードにコピー

背景・課題

  • 作成したファイルを探す際、ファイルの時刻情報がないため時系列での特定が困難
  • ファイルの配置ミス時にリネームでは対応できず、削除→再作成が必要で操作コストが高い
  • ファイル内容をメモとして活用する際、全文コピーに手動選択が必要で手間がかかる

提案する解決策

1. ファイル移動機能

コンテキストメニュー(右クリック/長押し)に「移動」アクションを追加し、移動先ディレクトリをダイアログで選択する方式。

  • 既存のリネーム機能(renameFileOrDirectory())を参考に、moveFileOrDirectory() を新規実装
  • APIエンドポイント: PATCH /api/worktrees/[id]/files/[...path]action: "move" を追加
  • 移動先の選択UIはディレクトリ一覧ダイアログを表示

2. ファイル作成時刻表示

ファイルツリーのファイル名横にサイズと共に作成時刻を常時表示する。

  • TreeItem 型に birthtime(作成時刻)と mtime(更新時刻)フィールドを追加
  • file-tree.tsreadDirectory()stat() から時刻情報を取得
  • FileTreeView.tsxTreeNode コンポーネントに時刻表示を追加

3. ファイル内容コピー

FileViewerにコピーボタンを追加し、テキストファイルの全文をワンクリックでクリップボードにコピー。

  • 既存の clipboard-utils.tscopyToClipboard())を活用
  • FileViewer.tsx にコピーボタンを追加
  • コピー成功時にToast通知を表示

実装タスク

ファイル移動

  • src/lib/file-operations.tsmoveFileOrDirectory() 関数を追加
  • src/app/api/worktrees/[id]/files/[...path]/route.ts の PATCH に action: "move" を追加
  • src/components/worktree/ContextMenu.tsx に「移動」メニュー項目を追加
  • 移動先ディレクトリ選択ダイアログの実装
  • src/components/worktree/WorktreeDetailRefactored.tsxhandleMove ハンドラーを追加
  • i18n対応(en/ja)

ファイル作成時刻表示

  • src/types/models.tsTreeItembirthtime / mtime フィールドを追加
  • src/lib/file-tree.tsreadDirectory() で時刻情報を取得
  • src/components/worktree/FileTreeView.tsx に時刻表示を追加
  • 日付フォーマット処理(date-locale.ts 活用)

ファイル内容コピー

  • src/components/worktree/FileViewer.tsx にコピーボタンを追加
  • clipboard-utils.tscopyToClipboard() を呼び出し
  • コピー成功/失敗の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 - 日付フォーマット

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions