✓=レビュー済 ○=未レビュー ⚠=Suspect(複数同時表示あり。IDクリックで詳細へ)
| グループ | REQ | ARCH | SPEC | TST | IMPL | ADR |
|---|---|---|---|---|---|---|
| CLI | REQ011 ✓ コマンドラインインターフェースからキャッシュの一覧表示、詳細確認、統計表示、削除、GC等の管理操作ができること。 | ARCH011 ✓ ## コンポーネント構成 ```mermaid graph TD A[beautyspot CLI] -->|Command| B[Typer App] ... | SPEC021 ✓ ## インターフェース ```bash beautyspot list [--db DB_PATH] beautyspot gc [--name PROJEC... | TST021 ✓ ## 目的 CLI はユーザーがキャッシュの状況確認・管理を行う主要インターフェースであり、コマンドの不具合はユーザー体験と運用効率に直接影響する。`CliR... | IMPL021 ✓ ## 実装概要 `Typer` を利用したコマンドラインインターフェースの実装。 `list`, `show`, `stats`, `clear`, `cle... | ADR006 ✓ # Dashboard Interaction Model ## Context and Problem Statement / コンテキスト 現状のダッシ... |
| CLI | REQ011 ✓ コマンドラインインターフェースからキャッシュの一覧表示、詳細確認、統計表示、削除、GC等の管理操作ができること。 | ARCH011 ✓ ## コンポーネント構成 ```mermaid graph TD A[beautyspot CLI] -->|Command| B[Typer App] ... | SPEC021 ✓ ## インターフェース ```bash beautyspot list [--db DB_PATH] beautyspot gc [--name PROJEC... | TST021 ✓ ## 目的 CLI はユーザーがキャッシュの状況確認・管理を行う主要インターフェースであり、コマンドの不具合はユーザー体験と運用効率に直接影響する。`CliR... | IMPL021 ✓ ## 実装概要 `Typer` を利用したコマンドラインインターフェースの実装。 `list`, `show`, `stats`, `clear`, `cle... | ADR027 ✓ # Pragmatic CLI Refactoring Policy ## Context and Problem Statement / コンテキスト `... |
| CLI | REQ011 ✓ コマンドラインインターフェースからキャッシュの一覧表示、詳細確認、統計表示、削除、GC等の管理操作ができること。 | ARCH011 ✓ ## コンポーネント構成 ```mermaid graph TD A[beautyspot CLI] -->|Command| B[Typer App] ... | SPEC021 ✓ ## インターフェース ```bash beautyspot list [--db DB_PATH] beautyspot gc [--name PROJEC... | TST021 ✓ ## 目的 CLI はユーザーがキャッシュの状況確認・管理を行う主要インターフェースであり、コマンドの不具合はユーザー体験と運用効率に直接影響する。`CliR... | IMPL021 ✓ ## 実装概要 `Typer` を利用したコマンドラインインターフェースの実装。 `list`, `show`, `stats`, `clear`, `cle... | ADR028 ✓ # CLI Scope Definition and Explicit Storage Linkage ## Context and Problem Stat... |
| リンク方向 | カバー数 | カバー率 | 未カバー |
|---|---|---|---|
| ARCH → REQ | 1 / 1 | 100.0% | — |
| SPEC → ARCH | 1 / 1 | 100.0% | — |
| TST → SPEC | 1 / 1 | 100.0% | — |
| IMPL → SPEC | 1 / 1 | 100.0% | — |
| ADR → REQ | 1 / 1 | 100.0% | — |
コマンドラインインターフェースからキャッシュの一覧表示、詳細確認、統計表示、削除、GC等の管理操作ができること。
親: —
子: ADR006, ADR027, ADR028, ARCH011
graph TD
A[beautyspot CLI] -->|Command| B[Typer App]
B -->|Business Logic| C[MaintenanceService]
B -->|Output| D[Rich Console]
B -->|Dashboard| E[Dashboard App]
| コンポーネント | 責務 | インターフェース |
|---|---|---|
| Typer App | コマンドライン引数のパースとサブコマンドのディスパッチ | main(), gc(), list() |
| MaintenanceService | 実際のキャッシュ管理ロジックの実行 | clean_garbage(), clear() |
| Rich Console | ターミナルでの視覚的に分かりやすいテーブルやパネルの描画 | Console, Table |
| Dashboard App | キャッシュ状態をインタラクティブに閲覧するためのTUI | dashboard.py |
sequenceDiagram
participant User as ユーザー
participant CLI as CLI App
participant Service as MaintenanceService
participant Output as Rich Console
User->>CLI: beautyspot gc --name my-project
CLI->>Service: clean_garbage()
Service-->>CLI: result (removed count, etc.)
CLI->>Output: print summary table
Output-->>User: formatted output
| 技術領域 | 選定 | 理由 |
|---|---|---|
| フレームワーク | Typer | 型ヒントに基づいた堅牢なコマンドラインインターフェースを迅速に構築 |
| 出力装飾 | Rich | プログレスバーやステータス表示により、長時間処理の進捗を可視化 |
| 連携 | Factory DI | カレントディレクトリや設定から自動的に Spot インスタンスを組み立て |
clear等)には対話的な確認プロンプトを表示親: REQ011
子: SPEC021
beautyspot list [--db DB_PATH]
beautyspot gc [--name PROJECT_NAME] [--force]
beautyspot stats
beautyspot ui
--db 指定がない場合、デフォルトの .beautyspot/ ディレクトリを探索するMaintenanceService または Spot インスタンスを生成し、対応するメソッドを呼び出すRich ライブラリを使用して、結果をテーブルやプログレスバーで表示する| コマンド | 説明 |
|---|---|
list |
保存されているキャッシュキーと関数名の一覧を表示 |
gc |
期限切れタスクと孤立Blobのクリーンアップを実行 |
stats |
キャッシュヒット率やストレージ使用量の統計を表示 |
ui |
ターミナルベースのインタラクティブダッシュボードを起動 |
--force)に対応する。親: ARCH011
CLI はユーザーがキャッシュの状況確認・管理を行う主要インターフェースであり、コマンドの不具合はユーザー体験と運用効率に直接影響する。CliRunner によるコマンド実行と出力の正確性を E2E で検証する。
--force フラグでプロンプトがスキップされること@mark でキャッシュ保存 → beautyspot list で確認 → beautyspot clear で削除、という一連のワークフローが正常に動作することreferences: tests/integration/cli/test_cli.py
親: SPEC021
子: —
Typer を利用したコマンドラインインターフェースの実装。
list, show, stats, clear, clean, gc, prune, version 等の
コマンドを提供し、rich ライブラリを用いてコンソール出力(テーブル、パネル、
プログレスバー等)をリッチにフォーマットしている。
Typer は型ヒントベースでコマンドやオプションを定義でき、コードの記述量と メンテナンスコストを大幅に削減できる。Rich による出力は、単なるテキストではなく 構造化された情報(JSONやMarkdown)の視認性を劇的に向上させ、DXを高める。
clear や clean など、データを大規模に削除するコマンドについては、
--force オプションが指定されない限り、rich.prompt.Confirm を用いて
ユーザーに明示的な確認を求めることで、誤操作によるデータ喪失を防いでいる。
MaintenanceService などの内部 API を利用して処理を行う--project / -p) に対して操作を行うが、
一部のコマンド(list 等)はワークスペース全体の走査もサポートするreferences: src/beautyspot/cli.py
親: SPEC021
子: —
現状のダッシュボード (dashboard.py) では、タスク一覧の表示と詳細データの復元操作が分離しています。
ユーザーは一覧テーブルで対象を確認した後、別途ドロップダウンメニューから対応する cache_key (ハッシュ値) を手動で探し出す必要があり、認知負荷が高い状態です。
プロジェクトの依存関係として streamlit>=1.51.0 が確保されており、インタラクティブなデータフレーム機能が利用可能となっています。
st.dataframe の on_select 機能を使用し、テーブル行のクリックによって詳細ビュー(Restore Data)のコンテキストを切り替える方式。Chosen option: Option 2.
st.dataframe の on_select 機能を使用し、テーブル行のクリックによって詳細ビューのコンテキストを切り替える方式を採用します。これにより、ユーザーはテーブル上のレコードを直接クリックするだけで、そのタスクの詳細や保存されたデータを復元できるようになります。
pyproject.toml でバージョン指定済みのため許容)。親: REQ011
子: —
quality_report.md において、src/beautyspot/cli.py 内の複数の関数(show_cmd, prune_cmd, stats_cmd)が循環的複雑度(CC)で Rank C の警告を受けています。一般的にプロジェクトでは CC の低減を推奨していますが、CLI モジュールに関してはその優先度と費用対効果を再検討する必要があります。
Chosen option: Option 2.
CLI モジュールの Rank C スコアについては、以下の理由から「即時の抜本的なリファクタリングは行わず、現状の構造を維持する」ことを決定しました。
cli.py の複雑さは、データ取得後の表示フォーマット分岐(Rich ライブラリによる出力制御)に集中しており、純粋なビジネスロジックの複雑さとは性質が異なります。cli.py は依存関係の末端に位置しており、他モジュールへの波及効果がありません。cachekey.py など)のリファクタリングにリソースを集中できる。親: REQ011
子: —
beautyspot の clean コマンドやガベージコレクション機能は、DBファイルとBlobストレージディレクトリの対応関係が「自明」であることを前提としています。標準構成(.beautyspot/ 配下)ではこの前提は成立しますが、ユーザーがカスタムパスを設定したり、外部バックエンド(S3等)を使用した場合、CLIツールは安全に依存関係を特定できません。この状態で推測に基づく削除を行うと、誤って無関係なデータを削除するリスクがあります。
Chosen option: Option 2.
CLIが提供する「ストレージの自動クリーニング・削除機能」のサポート範囲を、標準ディレクトリ構成(.beautyspot/ 配下)を使用しているプロジェクト に限定します。カスタム構成を利用している場合は、CLI による自動削除は保証されず、ユーザー自身の責任で管理を行う必要がある旨を明記します。
「対応関係が自明でない」問題を根本解決するため、将来のバージョンで TaskDB内に使用しているStorageの情報をメタデータとして記録する 仕組みを導入します。DB初期化時に storage_uri を保存し、メンテナンス時に「操作対象のDBが参照しているストレージと、今操作しようとしている実体が一致するか」を検証可能にします。
beautyspot clean などの恩恵をフルには受けられない場合がある。親: REQ011
子: —