コンテンツにスキップ

Spec

ADDED Requirements

Requirement: 開発用ダミートークンの認識

開発環境(import.meta.env.DEV === true)において、URLクエリパラメーター?token=devで管理者モードに入ることができなければならない(MUST)。

Scenario: 開発環境でダミートークンを使用

  • WHEN 開発環境(pnpm run dev)でhttp://localhost:5173/?token=devにアクセスする
  • THEN useAuthisAdmin: trueを返す
  • THEN 管理者専用機能(AdminPage)にアクセスできる

Scenario: 本番環境でダミートークンが無効

  • WHEN 本番ビルド環境で?token=devのURLにアクセスする
  • THEN useAuthisAdmin: falseを返す
  • THEN 管理者専用機能にアクセスできない

Scenario: ダミートークン使用後のURL

  • WHEN 開発環境にて?token=devでアクセスする
  • THEN useAuthがトークンをメモリに保持する
  • THEN history.replaceStateによりURLから?token=devが削除される
  • THEN URLがhttp://localhost:5173/(クエリパラメーターなし)になる

Requirement: 実際のSASトークンとの共存

開発環境において、実際のAzure Blob Storage SASトークンを使用した認証も引き続きサポートしなければならない(MUST)。

Scenario: 実際のSASトークンを使用

  • WHEN 開発環境にて?token=<valid-sas-token>でアクセスする(dev以外のトークン)
  • THEN useAuthが実際のSASトークンとして処理する
  • THEN isAdmin: trueを返す
  • THEN BlobWriterが実際のAzure Blob Storageに書き込む

Requirement: 環境検出の精度

開発環境の検出は、Viteのimport.meta.env.DEVを使用しなければならない(MUST)。

Scenario: Vite開発サーバーでの検出

  • WHEN pnpm run devで起動した環境にてコードを実行する
  • THEN import.meta.env.DEVtrueを返す
  • THEN ダミートークンdevが有効になる

Scenario: 本番ビルドでの検出

  • WHEN pnpm run buildでビルドされたコードを実行する
  • THEN import.meta.env.DEVfalseを返す(またはundefined)
  • THEN ダミートークンdevが無効になる

Scenario: Tree-shakingによるコード除去

  • WHEN 本番ビルド(pnpm run build)を実行する
  • THEN import.meta.env.DEVが静的に評価される
  • THEN 開発用コードがビルド結果から除去される(Tree-shaking)

Requirement: セキュリティの保証

本番環境で?token=devが管理者権限を付与してはならない(MUST NOT)。

Scenario: 本番環境での不正アクセス試行

  • WHEN 本番環境(Azure Blob Storage静的サイト)にて?token=devでアクセスする
  • THEN useAuthisAdmin: falseを返す
  • THEN 管理者機能へのアクセスが拒否される
  • THEN コンソールにエラーや警告が表示されない(攻撃者に情報を与えない)

Requirement: 開発者体験の向上

ダミートークンの使用方法は、シンプルで直感的でなければならない(MUST)。

Scenario: 開発者がすぐに使用できる

  • WHEN 開発者がREADMEやドキュメントを読む
  • THEN ?token=devの使用方法が明確に記載されている
  • THEN 追加の設定や環境変数の準備が不要である

Scenario: エラー時のフィードバック

  • WHEN 開発環境で?token=devを使用してAdminPageにアクセスする
  • THEN コンソールに「開発モード: ダミートークンを使用中」といった情報メッセージが表示される(開発者への確認)