ADR 0017: Favoritesの手動順と一度だけのプラグイン名順ソート
状態: 承認済み
経緯
Favoritesに「last played 降順ソート」を実装して検証した結果、ユーザーはそのUXが自分のニーズにマッチしないと判断した。呼び出すたびに配置が変わる一覧より、自分で順番を決め、その配置を維持する一覧を求めたため、今回の仕様を選んだ。
最初はVSCodeのAlt+上下キーのような操作を検討した。その後、ハンバーガーメニューで並べ替えモードを有効にし、行末の上下ボタンで動かす案を選んだ。規模を縮小するため、行クリックによる並べ替え対象選択とAlt+上下キーは採用しない。ユーザーが以下の仕様を承認し、ADRへの記録と実装を指示した。
決定
- ハンバーガーメニューに並べ替えモードを置く。Favoritesで有効にでき、ONの間だけ各行末に↑/↓ボタンを表示する。
- ボタンでFavorites内の隣の項目と入れ替え、即保存する。先頭の↑と末尾の↓は無効にする。読み込まれていない音色や、Instrumentがない場合のEffectも並べ替えられる。
- 行クリックは従来の音色読み込み・接続済みEffectの取り外しを維持する。上下ボタンでこれらを実行しない。
- ハンバーガーメニューのプラグイン名順ソートは、一度だけ昇順に並べ替えて保存する操作とする。常時適用する表示モードにはしない。その後は上下ボタンで調整できる。
- プラグイン名は大文字・小文字を区別せず比較し、同名項目は現在の前後関係を維持する。お気に入り名・形式を追加のソートキーにはしない。
- 呼び出し、既存Favoriteの再保存、同じ音色のHistoryへの登録では、Favoritesの順番を変更しない。
- 新規Favoriteは先頭に追加する。Historyだけにある音色を手動保存してFavoritesに追加する場合も先頭に置く。
- 絞り込み中は上下移動とプラグイン名順ソートを無効にする。並べ替えモードは起動時OFFで、永続化しない。
- HistoryはADR 0016の登録時刻降順表示を維持する。並べ替え操作はFavoritesのみに適用する。
保存と影響
既存のindex.toml内の項目順を手動順として利用する。初回導入時は現在のFavorites表示順を引き継ぎ、名前順への自動移行はしない。Historyだけの項目が途中にあっても、上下移動は隣のFavoriteと入れ替える。名前順ソートもFavoritesが占める位置だけを変更する。
順序の保存は既存のatomic_writeを使い、失敗時はメモリ内の順序も戻してエラーを表示する。保存state、ID、名前、演奏パターン、History登録時刻は並べ替えで変更しない。History表示は物理的な項目順から独立して登録時刻でソートするため、自動記録時に項目を先頭へ移す必要はなくなる。
採らない案
- last played降順: 実装・検証を経て、ユーザーの求める配置維持に合わないと判断した。
- 行選択とAlt+上下キー: 最初の相談で検討したが、ユーザーの希望で実装規模を縮小した。
- 名前順表示のON/OFF: 一度並べ替えた後に手動調整できる操作をユーザーが選んだ。
- ドラッグ移動: 今回の合意範囲に含めない。
検証
永続化・保存失敗時の復元、Historyだけの項目を挟んだ上下移動、安定した名前順ソート、再保存・自動記録での手動順維持、HistoryからのFavorite追加を回帰テストで確認する。UIではモードによるボタン表示、端の無効化、絞り込み時の無効化と、上下操作が音色読み込みを呼ばないことを確認する。