Skip to content

feat: リポジトリに別名(エイリアス)を設定して表示名を変更可能にする #642

@Kewton

Description

@Kewton

概要

CommandMateに登録されたリポジトリに別名(display_name)を設定し、UI上の全箇所の表示名を変更できるようにする。現在はリポジトリのディレクトリ名がそのまま表示されるが、ユーザーが任意の表示名を設定できるようにしたい。

背景・課題

  • リポジトリのディレクトリ名が長い場合や、複数の類似名リポジトリがある場合に識別しづらい
  • ディレクトリ名と実際のプロジェクト名が異なる場合がある(例: MyCodeBranchDeskCommandMate
  • Sessions画面やサイドバーでリポジトリ名が表示される際に、わかりやすい名前で表示したい

提案する解決策

1. データモデル

v26マイグレーションで repositories テーブルに display_name カラムを追加(NULLable)。

ALTER TABLE repositories ADD COLUMN display_name TEXT;
  • display_name が設定されている場合はそちらを表示
  • 未設定(NULL)の場合は従来通りディレクトリ名(name)を表示

2. Repository型の拡張

db-repository.tsRepository インターフェースに displayName?: string フィールドを追加。
updateRepository() は既に name 更新をサポートしているため、displayName を追加するのみ。

3. API

PUT /api/repositories/[id] エンドポイントを新規追加し、displayName フィールドを更新可能にする。

4. 編集UI

Repositories画面で各リポジトリ名の横にインライン編集ボタンを追加。クリックで display_name を入力・保存可能にする。

5. 表示側(全箇所一括変更)

以下の全箇所で displayName ?? name を使用:

  • サイドバー (Sidebar.tsx L293) — リポジトリグループヘッダー
  • BranchListItem (BranchListItem.tsx L111) — ブランチのサブテキスト
  • Sessions画面 (sessions/page.tsx L249) — リポジトリ名表示、検索フィルタ、ソート
  • Worktree詳細ヘッダー (WorktreeDetailSubComponents.tsx L260)
  • WorktreeList (WorktreeList.tsx L190, L276) — 検索・削除確認

検索フィルタでは displayName と元の name 両方でマッチ可能にする。

実装タスク

  • DB: v26マイグレーションで repositories テーブルに display_name カラム追加
  • DB: Repository 型に displayName フィールド追加、mapRepositoryRow 更新
  • DB: updateRepository()displayName パラメータ追加
  • API: src/app/api/repositories/[id]/route.ts に PUT エンドポイント新規作成
  • UI: Repositories画面にインライン編集UI追加
  • UI: サイドバー(Sidebar.tsx)で displayName ?? name を使用
  • UI: BranchListItem で displayName ?? name を使用
  • UI: Sessions画面で displayName ?? name を使用(表示・検索・ソート)
  • UI: Worktree詳細ヘッダーで displayName ?? name を使用
  • UI: WorktreeList で displayName ?? name を使用
  • テスト: DB CRUD テスト追加
  • テスト: API エンドポイントテスト追加

受入条件

  • リポジトリに別名(display_name)を設定できること
  • 設定した別名がUI上の全箇所(サイドバー、Sessions、Worktree詳細、検索)に反映されること
  • 別名未設定の場合は従来通りディレクトリ名が表示されること
  • 別名の編集・削除(空文字でリセット)が可能なこと
  • 検索フィルタで別名と元のディレクトリ名の両方でマッチすること
  • 既存機能に回帰がないこと

影響範囲

新規ファイル

ファイル 内容
src/lib/db/migrations/v26-repository-display-name.ts display_name カラム追加マイグレーション
src/app/api/repositories/[id]/route.ts リポジトリ更新API(PUT)

変更ファイル

ファイル 変更内容
src/lib/db/db-repository.ts Repository型にdisplayName追加、CRUD拡張
src/lib/db/migrations/index.ts v26マイグレーション登録
src/app/repositories/page.tsx インライン編集UI追加
src/components/layout/Sidebar.tsx 表示名を displayName ?? name に変更
src/components/sidebar/BranchListItem.tsx 表示名を displayName ?? name に変更
src/app/sessions/page.tsx 表示名・検索・ソートを displayName ?? name に変更
src/components/worktree/WorktreeDetailSubComponents.tsx 表示名を displayName ?? name に変更
src/components/worktree/WorktreeList.tsx 表示名・検索を displayName ?? name に変更
src/types/models.ts Worktree型に repositoryDisplayName 追加

関連コンポーネント

  • src/lib/sidebar-utils.ts — ソート・グループ化で repositoryName を使用
  • src/hooks/useWorktreeList.ts — Worktreeリスト共通フック

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions