Skip to content

仕様策定と M1 コア実装(中途半端な実装の立て直し) - #14

Open
nitou-kanazawa wants to merge 3 commits into
mainfrom
claude/folder-icon-package-review-5pnz7j
Open

仕様策定と M1 コア実装(中途半端な実装の立て直し)#14
nitou-kanazawa wants to merge 3 commits into
mainfrom
claude/folder-icon-package-review-5pnz7j

Conversation

@nitou-kanazawa

Copy link
Copy Markdown
Owner

概要

コードレビューで判明した「アイコン登録の導線が繋がっていない」状態を立て直すため、まず仕様を実用性重視で固め直し、その仕様(v1.1)に沿って M1(コア)を実装しました。

レビューで見つかった致命的問題(設定ウィンドウの保存処理が未実装 / _entryStore 未初期化による NRE / 正規表現キャッシュの更新漏れ / マッチングスタブが常に false)をすべて解消し、「右クリック → アイコン選択 → 適用 → 表示 → 解除」の導線が一周する構成になっています。

仕様の主な決定事項(docs/specification.md v1.1)

  • 保存スコープ: プロジェクト共有(ProjectSettings/FolderIconSettings.asset、テキスト形式・VCS コミット想定)
  • マッチング: 2 種別に集約 — ①フォルダ名一致(基本運用)②パス完全一致(右クリック個別指定)
  • 名前正規化: 大文字小文字の無視 + 先頭アンダースコアの無視(両方トグル可)。Scripts ルールが scripts / _Scripts にもマッチ
  • アイコン: デフォルト画像+プリセットを同梱しゼロコンフィグ動作(※プリセット本体は M2)。ユーザーは任意 Texture2D に切り替え可能
  • 優先順位: ユーザー > プリセット、同レイヤー内は パス > 名前、同順位はリスト上位
  • ワイルドカード / 正規表現 / 階層継承 / マーカーファイルは将来拡張へ切り出し

実装内容(M1)

新規

  • FolderIconRule.cs — データモデル(FolderMatchType: FolderPath / FolderName
  • FolderIconSettings.cs — 新スキーマの ScriptableSingleton。null 安全化、version フィールド、パス/名前ルールの操作 API
  • FolderIconResolver.cs — 名前正規化、レイヤー優先順位、パス→アイコンの結果キャッシュと事前展開辞書(判定 O(1))、AssetPostprocessor によるキャッシュ無効化

書き換え

  • FolderIconSettingWindow.cs — TODO だった保存処理を実装。適用中アイコンと出所の表示、複数フォルダ選択対応、解除ボタン
  • FolderDrawer.cs — 描画フックから例外を漏らさないガード(初回のみログ)、Assets/Packages/ 配下チェック、Play 中も描画
  • FolderIconContextMenu.cs — 英語メニュー Assets/Set Folder Icon... に統一、複数選択対応
  • FolderIconSettingsProvider.cs — 新設定クラスへ接続(専用 UI は M3)

削除(旧設計の一掃)

  • 未完成の別系統 Matcher/IFolderMatcher 系)、EntryIdFoundation/
  • Runtime アセンブリ一式(Editor 専用のため不要)
  • 旧データクラス Pattern / FolderIconEntry / FolderIconEntryStore / FolderIconConstants / FolderIconSettingsSO
  • 旧設定ファイル ProjectSettings/Nitou/FolderIcon.dat

動作確認のお願い

この環境には Unity が無いためコンパイル検証ができていません。お手元での確認をお願いします。

  • Unity 6000.0 でコンパイルが通る
  • フォルダ右クリック → Set Folder Icon... → Texture2D 適用 → 3 表示モード(ツリー/リスト/グリッド)で表示される
  • _Scriptsscripts を作成し、名前ルール Scripts を追加 → 正規化マッチが効く
  • Remove で個別指定を解除できる

次のステップ

  • M2: デフォルトアイコン画像+プリセットの同梱(要アイコン素材)
  • M3: ProjectSettings の ReorderableList UI・プリセット複製・バリデーション表示
  • M4: README 更新(flder-icon typo 修正含む)・CHANGELOG・EditMode テスト

🤖 Generated with Claude Code

https://claude.ai/code/session_01ADJqXTPkhssS394N2oyRho


Generated by Claude Code

claude added 3 commits July 5, 2026 23:07
- 決定事項を明記(保存スコープ/マッチング方式/アイコン表現/UI導線/旧設計の扱い)
- マッチングを3種別(パス完全一致・名前完全一致・ワイルドカード)に絞り優先順位を定義
- データモデル・キャッシュ・エラー処理・UI仕様を具体化
- 実装マイルストーン(M1〜M3)を追加

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ADJqXTPkhssS394N2oyRho
- 基本運用をフォルダ名マッチに定め、名前正規化(大文字小文字・_プレフィックス無視)を仕様化
- デフォルトアイコン画像とデフォルトプリセットのパッケージ同梱を追加(ゼロコンフィグ動作)
- プリセット/ユーザールールのレイヤー方式(ユーザー優先・プリセットOFF可・複製カスタム化)を定義
- ワイルドカードは将来拡張へ移動、マイルストーンを M1〜M4 に再編

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ADJqXTPkhssS394N2oyRho
仕様書 v1.1 の M1 マイルストーンを実装:

- FolderIconRule / FolderMatchType: パス完全一致とフォルダ名一致の2種別
- FolderIconSettings: ScriptableSingleton を新スキーマ化
  (ProjectSettings/FolderIconSettings.asset, null安全, version フィールド)
- FolderIconResolver: 名前正規化(大文字小文字・_プレフィックス無視)、
  レイヤー優先順位、パス→アイコンの結果キャッシュと事前展開辞書
- AssetPostprocessor によるキャッシュ無効化
- FolderIconSettingWindow: 適用/解除が機能する個別指定ウィンドウ
  (現在の適用状態と出所の表示、複数フォルダ選択対応)
- FolderDrawer: 例外を漏らさない描画フック、Assets/Packages 配下のみ対象
- UI文言を英語に統一 (Assets/Set Folder Icon...)

旧設計の削除:
- Matcher/, EntryId, Foundation/, Runtime アセンブリ一式
- Pattern / FolderIconEntry / FolderIconEntryStore / FolderIconConstants
- 旧設定ファイル ProjectSettings/Nitou/FolderIcon.dat

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ADJqXTPkhssS394N2oyRho
@cursor

cursor Bot commented Jul 6, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants