ユースケース
Bookmark CLI Extension v1 でユーザーが達成したい操作と完了条件を整理します。
This content is for v1.2.1. Switch to the latest version for up-to-date documentation.
ユースケース
Section titled “ユースケース”このページでは、Bookmark CLI Extension v1のユースケースを定義します。
ユースケースはApplication層のuse case設計と、実装ロードマップの受け入れ条件に対応します。
ユーザーはChrome Bookmark Managerを直接開かず、Dedicated extension page上の疑似CLIからBookmarkを操作します。
v1では、検索して開く流れ、Chrome履歴から再訪する流れ、Bookmark Treeを移動する流れを中心にします。
現在タブの保存、仮想タグ付け、安全な整理もv1の主要ユースケースとして扱います。
OSターミナル連携はv1に含めません。
主アクターはBookmarkを日常的に検索、保存、整理するユーザーです。
外部システムはChrome Bookmark Manager、Chrome Bookmarks API、Chrome History API、Chrome Extensions Storage APIです。
ユースケース一覧
Section titled “ユースケース一覧”| ID | 名前 | 主なコマンド | Roadmap slice |
|---|---|---|---|
| UC-01 | Bookmarkを検索する | find | Slice 1 |
| UC-02 | Bookmarkを開く | go | Slice 1 |
| UC-03 | Bookmark Treeを移動する | ls, cd, pwd, tree | Slice 2 |
| UC-04 | CLI状態を復元する | command history, current directory | Slice 3 |
| UC-05 | 現在タブを保存する | mark | Slice 4 |
| UC-06 | 仮想タグで分類する | tag, find #tag, go #tag | Slice 5 |
| UC-07 | Bookmarkを安全に整理する | mkdir, mv, rm, rename | Slice 6 |
| UC-08 | 利用頻度から再訪する | recent, freq | Slice 7 |
| UC-09 | 疑似CLIを快適に操作する | hot key, keybinding, result view | Slice 7 |
| UC-10 | Chrome履歴から再訪する | history, find, go | Slice 8 |
UC-01: Bookmarkを検索する
Section titled “UC-01: Bookmarkを検索する”ユーザーはうろ覚えのtitle、url、folder path、仮想タグ、Chrome履歴からURLを探します。
主コマンドは find です。
find stripefind #finance stripe事前条件は、Chrome Bookmark ManagerにBookmarkが存在することです。
基本フローは次のとおりです。
- ユーザーが
find <query>を入力する - Application層がBookmark Treeを取得する
- Domain層がBookmark Treeを正規化する
- Application層がChrome履歴も取得する
- Domain層がqueryを評価し、候補をscore順に並べる
- Bookmarkと同じURLの履歴はBookmark候補のscoreを補強する
- Bookmark化されていない履歴は
historyresultとして候補に含める - Presentation層が番号付き結果一覧を表示する
通常表示ではscoreを出さず、find -l 指定時だけ詳細情報として表示します。
完了条件は、一致したBookmarkまたはChrome履歴が番号付き一覧で表示されることです。
候補がない場合は not_found を返します。
UC-02: Bookmarkを開く
Section titled “UC-02: Bookmarkを開く”ユーザーはqueryにもっとも一致するBookmarkまたはChrome履歴を素早く開きます。
主コマンドは go です。
go github prgo #prod admin基本フローは次のとおりです。
- ユーザーが
go <query>を入力する - Application層が
findと同じ検索評価を実行する - 最上位候補が明確な場合は、そのURLを開く
- 候補が曖昧な場合は、番号付き一覧を表示して選択を求める
- 疑似CLIから開いた利用統計を更新する
完了条件は、該当BookmarkまたはChrome履歴URLが新しいtabまたは既存tabで開くことです。
候補がない場合は not_found を返します。
UC-03: Bookmark Treeを移動する
Section titled “UC-03: Bookmark Treeを移動する”ユーザーはBookmark Treeをfilesystemのように移動します。
主コマンドは ls、cd、pwd、tree です。
lscdcd Work/Adminpwdtree --depth 3基本フローは次のとおりです。
- ユーザーが現在ディレクトリを確認する
lsでfolderとBookmarkを表示するcdでfolder pathまたは番号を指定する- Application層が
CurrentDirectoryを更新する pwdやtreeで現在地と階層を確認する
pathを省略した cd は / へ戻ります。
完了条件は、現在ディレクトリを基準に一覧、移動、階層表示ができることです。
存在しないfolder pathは folder_not_found を返します。
UC-04: CLI状態を復元する
Section titled “UC-04: CLI状態を復元する”ユーザーは拡張機能を閉じた後も、現在ディレクトリや履歴を継続して使います。
対象は currentDirectory、commandHistory、settings です。
基本フローは次のとおりです。
- Dedicated extension pageを開く
- Application層が
chrome.storage.localから保存状態を読み込む - 保存済みcurrent directoryをBookmark Treeと照合する
- 存在する場合はcurrent directoryとして復元する
- 存在しない場合は
/に戻す
完了条件は、最後の現在ディレクトリとコマンド履歴が復元されることです。
保存データの読み書きに失敗した場合は storage_failed を返します。
UC-05: 現在タブを保存する
Section titled “UC-05: 現在タブを保存する”ユーザーはCLI起動元タブをBookmarkとして保存します。
主コマンドは mark です。
markmark "Production Admin" --to Work/Admin基本フローは次のとおりです。
- ユーザーがhot key、popup、拡張actionからDedicated extension pageを開く
- background entrypointがCLI起動元タブの
LaunchContextを保存する - ユーザーが
markを入力する - Application層が保存先folderを解決する
- 重複URLを検査する
- Chrome Bookmarks APIでBookmarkを作成する
完了条件は、CLI起動元タブが指定folderへ保存されることです。
CLI起動元タブのURLまたはtitleを取得できない場合は unsupported_tab を返します。
Dedicated extension pageがすでに開いている場合、拡張actionは既存windowを前面へ戻します。
Dedicated extension pageがfocus中の場合、hot key再押下は既存windowを閉じます。
hot keyで再度開くと、新しいwindowを作り、保存済みの現在ディレクトリ、設定、command historyを復元します。
Dedicated extension pageが複数開いている場合、hot keyや拡張actionは1つだけを残して重複windowを閉じます。
Chrome Extensions APIではOSの常時最前面固定を指定できないため、v1ではfocus中のhot key再押下によるclose/reopenを完了条件に含めます。
保存先に同じURLが存在する場合は already_marked を返します。
UC-06: 仮想タグで分類する
Section titled “UC-06: 仮想タグで分類する”ユーザーはChrome Bookmark Managerを変更せず、拡張機能側のメタ情報としてBookmarkを分類します。
主コマンドは tag、find #tag、go #tag です。
tag 3 prod financefind #prodgo #finance stripe基本フローは次のとおりです。
- ユーザーが番号または
currentでBookmarkを指定する - Application層が対象Bookmarkを解決する
- Domain層がtag名を正規化する
chrome.storage.localにBookmark ID基準で保存するfindとgoが#tagtokenを検索条件に含める
完了条件は、仮想タグの追加、削除、検索ができることです。
対象Bookmarkが存在しない場合は not_found を返します。
UC-07: Bookmarkを安全に整理する
Section titled “UC-07: Bookmarkを安全に整理する”ユーザーはBookmarkやfolderを整理します。
主コマンドは mkdir、mv、rm、rename です。
mkdir Toolsmv 3 Archiverm 5rm -f 5rename 3 "GitHub Pull Requests"基本フローは次のとおりです。
- ユーザーが整理系コマンドを入力する
- Application層が対象と変更先を解決する
mkdir、mv、renameはChrome Bookmarks APIへ即時に書き込むrmは通常実行で確認待ちに入るrm確認待ちでyまたはyesを入力した場合、Chrome Bookmarks APIへ書き込むrm -fまたはrm --forceの場合、確認なしにChrome Bookmarks APIへ書き込む
完了条件は、mkdir、mv、rename が即時実行され、rm が確認またはforce指定で実行されることです。
mv、rename は確認不足エラーを返しません。
rm はCLI上の確認待ち状態として扱います。
UC-08: 利用頻度から再訪する
Section titled “UC-08: 利用頻度から再訪する”ユーザーは疑似CLIから最近開いたBookmarkや、よく開くBookmarkへ再訪します。
主コマンドは recent と freq です。
recentfreq --limit 20基本フローは次のとおりです。
goや選択操作でBookmarkを開く- Application層が
usageByBookmarkIdを更新する recentはlastOpenedAtの降順で表示するfreqはopenCountの降順で表示する
完了条件は、疑似CLI内の利用統計からBookmarkを再訪できることです。
Chrome履歴は find と go の検索対象として参照します。
UC-09: 疑似CLIを快適に操作する
Section titled “UC-09: 疑似CLIを快適に操作する”ユーザーはキーボード中心で疑似CLIを操作します。
対象はhot key、コマンド履歴、readline風入力編集、候補補完、結果表示、pipe filterです。
基本フローは次のとおりです。
- ユーザーがhot keyでDedicated extension pageを開く
- 入力欄へ自動フォーカスする
- 上キー、下キー、
Ctrl+p、Ctrl+nで履歴を移動する Ctrl+rでCLI入力履歴のfloating一覧を表示するCtrl+a、Ctrl+e、Ctrl+u、Ctrl+k、Ctrl+wで入力を編集する- 入力中にcommand suggestionを確認する
TabまたはShift+Tabで補完候補を選択するEnterで選択中候補を入力へ確定するEscで候補選択を解除する- 実行したpromptと結果がtranscriptに追加される
ls | grep stripeのように結果一覧を絞り込む- 必要に応じて
clearでscrollback transcriptを消す - 空promptで
Ctrl+dを押してCLI windowを閉じる - Powerline風promptとplainな結果一覧で実行結果を読む
完了条件は、マウス操作なしで主要な検索、移動、保存、整理ができることです。
Fontが利用できない場合でもplain text fallbackで意味が読めるようにします。
clear は画面上のtranscriptだけを消し、コマンド入力履歴や現在ディレクトリは維持します。
UC-10: Chrome履歴から再訪する
Section titled “UC-10: Chrome履歴から再訪する”ユーザーはBookmark化していないURLも、Chrome履歴から疑似CLIで再訪します。
主コマンドは history、find、go です。
historyhistory designfind design systemgo stripe login基本フローは次のとおりです。
- ユーザーが
historyでChrome履歴だけを一覧表示する - 必要に応じて
history queryまたはhistory | grep queryで履歴を絞り込む - ユーザーが
findまたはgoでBookmark TreeとChrome履歴を横断検索する - Application層がBookmark TreeとChrome履歴を取得する
- Domain層がBookmark候補と履歴候補をmergeする
- 同じURLがBookmarkとChrome履歴の両方に存在する場合はBookmark候補として表示する
- Bookmark化されていないChrome履歴は
HISTresultとして表示する go <result-number>でBookmark resultと同じように履歴URLを開ける
完了条件は、Bookmarkに存在しないChrome履歴URLを一覧表示、絞り込み、検索、番号指定、直接起動できることです。
Chrome履歴は読み取りだけに使い、履歴の追加、削除、変更は行いません。
UC-11: Popupで設定する
Section titled “UC-11: Popupで設定する”ユーザーは拡張actionから設定を確認します。
主な対象はhot key設定とcommand alias設定です。
基本フローは次のとおりです。
- ユーザーが拡張actionをクリックする
- Popupが設定画面として開く
- Popupが
chrome.commands.getAll()で現在のhot keyを読み取る - ユーザーが変更buttonを押す
- ChromeではPopupが
chrome://extensions/shortcutsを新しいtabで開く - FirefoxではPopupが
browser.commands.openShortcutSettings()でManage Extension Shortcutsを開く - ユーザーがブラウザ標準UIでhot keyを変更する
- ユーザーがPopupでaliasを追加、編集、削除する
- Popupがaliasを
chrome.storage.localのsettings.commandAliasesに保存する - ユーザーが疑似CLIで
alias g=goを実行する - 疑似CLIがaliasを
settings.commandAliasesに保存する - ユーザーが疑似CLIで
unalias gを実行する - 疑似CLIがaliasを削除して保存する
完了条件は、Popupで現在のhot keyを確認でき、ブラウザ標準のshortcut管理UIへ移動でき、Popupと疑似CLIの両方からcommand aliasを保存できることです。
Chrome Extensions Commands APIにはshortcutを書き換えるAPIがないため、拡張機能内で直接hot keyを保存、変更しません。
aliasは拡張機能側の設定として保存し、CLI入力の先頭command tokenだけを1回展開します。
alias展開後のcommand種別は、clear によるscrollback transcript削除のようなUI副作用にも反映します。