Skip to content

🧪 004 テスト設計

テスト戦略・テスト対象一覧・実行方法・カバレッジ外領域

設計書 v1.3 / 2026-06-05


1 テスト戦略(ピラミッド)

3層のテストピラミッドで品質を担保する。下層ほど実行コストが低く数が多い。

🎭 E2E テスト(Playwright) 3 ファイル / ブラウザ + Tauri 実アプリ
⚡ ユニットテスト(Vitest) 13+ ファイル / jsdom 環境
🦀 Rust ユニットテスト(cargo test) gdrive.rs / webpush.rs / logic.rs 等 / インプロセス

1.1 リリース回帰テスト方針

リリース前の回帰テストは、確認できる場所ごとに役割を分ける。 PC 開発環境で確認できるものは PC で完結させ、iPhone Push のように develop デプロイと実機が必要なものだけを develop 環境で確認する。 develop 環境で実運用パターンが通ったものを、本番リリース候補とする。

表 1.1-1 リリース回帰テストの分担

No確認場所対象実施者リリース判定での扱い
1PC 開発環境Rust / TypeScript の型検査、ユニットテスト、E2E、PC 画面操作、Drive 読み書きの疑似・実行確認開発者 / Codex原則として毎回必須。ここで失敗したものは develop に進めない
2develop 環境Vercel 上の API、iPhone PWA、APNs Push、Service Worker、iPhone 実機通知開発者 + 実機を持つ人間PC では代替できない範囲だけ確認する。通過後に本番リリース候補とする
3production 環境本番デプロイ後の軽い疎通、Cron 実行、重大な設定漏れ確認開発者develop で通ったものを本番へ反映した後の最小確認に留める

1.2 毎回人間が実施する実機テスト

人間が毎回実施するテストは、PC 自動テストでは確認できない「実機・外部サービス・通知配信」の代表シナリオに絞る。 異常系は、発生頻度が高いもの・実運用で被害が大きいものだけを必要に応じて追加確認する。

表 1.2-1 リリースごとの人間実機チェック

No確認項目環境手順合格条件
1PC から iPhone へ送信できるdevelop + iPhone 実機PC アプリから iPhone に付箋を 1 件送るiPhone に通知または PWA 表示が届き、PC 側に APNs 400 / 404 / 410 が出ない
2iPhone 再接続後も送信できるdevelop + iPhone 実機iPhone 連携をつなぎ直した後、PC アプリを再起動せずに付箋を 1 件送る送信直前に Drive の push_devices.json が再取得され、古い購読キャッシュによる Push 鍵不一致が出ない
3iPhone から PC へ送信できるdevelop + iPhone 実機iPhone PWA から PC 宛に付箋を 1 件送るPC 側で付箋として開ける
4開発者とのやりとりが表示できるPC 開発環境または developDiscord 返信を取り込み、PC アプリの「開発者とのやりとり」で更新するユーザー・開発者メッセージが時系列で表示される
5未読マークが確認できるPC 開発環境管理者ツールのテスト操作、または未読状態を作って右クリックメニューを開く右クリックメニューに「新着あり」が表示され、やりとり画面を開くと既読になる
6iPhone接続診断が使えるPC 開発環境設定の「iPhone連携」で「接続を診断」を押す実Pushを送らずに Drive のPush鍵・端末情報を確認し、問題があれば次の操作を表示する

2 ユニットテスト一覧(Vitest)

2.1 PC アプリ側

表 2.1-1 PC アプリ側ユニットテスト一覧

Noファイル種別テスト対象主なテスト内容
1app/components/StickyNote.test.tsxVitest付箋ウィンドウ(StickyNote.tsx)レンダリング・モード切り替え・保存トリガー・アラームチェック等
2app/hooks/useStickyNoteContextMenu.test.tsVitest右クリックメニューフックメニュー項目の生成ロジック
3app/utils/checkboxToggle.test.tsVitestチェックボックストグルユーティリティ[ ][x] のトグル処理・Markdown 変換
4app/utils/splitFrontMatter.test.tsVitestFrontmatter パーサーYAML frontmatter の分離・パース・再組み立て
5lib/i18n.test.tsVitest国際化(i18n)日本語・英語キーの解決・フォールバック
6lib/settings-store.test.tsVitest設定ストア設定の読み書き・デフォルト値
7lib/utils.test.tsVitest汎用ユーティリティ文字列サニタイズ・日時フォーマット等

2.2 iPhone PWA 側

表 2.2-1 iPhone PWA 側ユニットテスト一覧

Noファイル種別テスト対象主なテスト内容
1app/viewer/lib/drive.test.tsVitestDrive API ラッパー(drive.ts)アップロード・ダウンロード・削除の正常系・エラー系
2app/viewer/lib/indexeddb.test.tsVitestIndexedDB 操作(indexeddb.ts)saveDraft / loadDraft / loadAllDrafts / deleteDraft の CRUD 確認
3app/viewer/__tests__/page.test.tsxVitestiPhone PWA ページ(viewer/page.tsx)画像変換(hydrateEditor/serializeEditor)・チェックボックス変換・タグ永続化・Mermaid ブロック変換
4app/viewer/viewer.test.tsxVitestViewer コンポーネント全体ステップ遷移・初期化フロー・リスト/ライトモード切り替え
5app/viewer/__tests__/VideoAttachmentSemantics.test.tsxVitestVideoDrop 添付セマンティクス動画選択時に本文を上書きしない、複数動画を videos[] として保持する、送信後に送信済み表示へ反映する
6app/viewer/__tests__/WriteStep.loss.test.tsxVitestPWA 編集画面のデータ安全性ユーザーが入力した本文・1行目・添付情報が保存/送信過程で失われないこと

2.3 Rust バックエンド(cargo test)

Rust ユニットテスト(各 .rs ファイルの #[cfg(test)] モジュール)

表 2.3-1 Rust バックエンドユニットテスト一覧

Noファイル種別主なテスト内容
1src-tauri/src/gdrive.rscargo testトークンパスの検証・PushConfigJson のパース確認
2src-tauri/src/webpush.rscargo testVAPID 鍵生成・JWT 署名・AES-128-GCM 暗号化の正常動作確認

3 E2Eテスト一覧(Playwright)

表 3-1 E2E テスト一覧

Noファイルテストシナリオの概要主な検証ポイント
1e2e/sticky-note.spec.ts付箋の作成・編集・保存・削除・アーカイブ新規付箋作成 → テキスト入力 → 自動保存確認 → ファイルシステムへの書き込み検証 → 削除・アーカイブ動作確認
2e2e/data-safety.spec.tsデータ安全性(破損・欠損なし)の確認アプリ再起動後のデータ復元 → frontmatter の整合性確認 → アトミック書き込みによる破損防止確認
3e2e/lock-notification.spec.tsロック画面に表示(通知常駐)機能の動作確認Push 受信後の IndexedDB 保存確認 → locked フラグの ON/OFF → pending_open メカニズムの動作確認

4 データロスト防止ゲート

付箋アプリでは、ユーザーが入力した1文字を失うことが最重大障害である。 ソース修正後は、リリース前に以下の順で確認する。

表 4-1 データロスト防止ゲート

No確認項目実行コマンド / 観点
1型検査npx tsc --noEmit --pretty false
2PWA 本文保護npm test -- WriteStep.loss
3VideoDrop 添付仕様npm test -- VideoAttachmentSemantics
4全ユニットテストnpm test
5Rust 側受信処理cargo check
6本番ビルドnpm run build

5 テスト実行方法

5.1 フロントエンド ユニットテスト(Vitest)

bash
# 全ユニットテストを実行(一回実行)
npm run test
# ウォッチモード(開発中)
npx vitest
# カバレッジレポート付き
npx vitest run --coverage

5.2 Rust バックエンド ユニットテスト(cargo test)

bash
# Rust ユニットテストを実行
cd src-tauri
cargo test

5.3 E2E テスト(Playwright)

bash
# E2E テストを実行(Tauri アプリのビルドが必要)
npx playwright test
# 特定ファイルのみ実行
npx playwright test e2e/sticky-note.spec.ts
# UI モードで実行(デバッグ用)
npx playwright test --ui

6 カバレッジ外の領域

現時点でテストが存在しない・または困難な領域。今後のリスクとして認識しておくべき箇所。

表 6-1 カバレッジ外領域一覧

No領域カバレッジ外の理由リスク
1Rust ロジック層(logic.rs / storage.rsファイルシステム操作が絡むため逃げにくい。Tauri 環境依存が強いリネーム・アーカイブ・削除のバグが本番環境でしか発覚しない
2Service Worker の Push 受信フロー実際の APNs / FCM を介した Push は自動テスト困難Push 受信・IndexedDB 保存・通知表示の組み合わせバグが検出できない
3マルチウィンドウ間の状態同期複数の Tauri WebviewWindow を扱う E2E テストはセットアップが複雑付箋間の emit/listen によるデータ競合が検出できない
4Google OAuth フロー全体外部サービス(Google)への依存があるため自動テスト不可認証フローの変更時にリグレッションが発覚しにくい
5iPhone 実機での UI 動作iOS Safari の実機が必要。シミュレーター環境の整備が必要iOS 固有のバグ(notificationclick 未発火等)が手動テストのみ

7 改版履歴

表 7-1 改版履歴

Noバージョン日付変更内容
11.026-04-20新規作成。テスト戦略・ユニットテスト一覧(11ファイル)・E2E一覧(3ファイル)・実行方法・カバレッジ外領域を整理。
21.126-04-24テストピラミッドを TestPyramid コンポーネント(3色ブロック)に変更。
31.226-05-25VideoDrop と PWA 本文保護のテストを追加。データロスト防止ゲートを新設し、ソース修正後の必須確認順を明記。
41.326-06-05リリース回帰テスト方針を追加。PC 開発環境・develop 環境・production 環境の分担と、人間が毎回実施する実機チェック、iPhone接続診断の確認観点を明記。