メインコンテンツへ

検証の 4 層

変更を main に ship する前に、コンパイルが通ること以上の確認をします。Astar では検証を 4 つの層(L1〜L4)に分け、変更の種類に応じてどこまで検証するかを決めます。

ピラミッド

何を確認するか主な手段
L1静的チェック(typecheck・lint・compile)nuxt typecheck / eslint / ./gradlew compileKotlin
L2対象を絞った単体テストvitest(変更ファイル関連のみ)/ backend unit test
L3コンポーネントの見た目/__dev/* 固定モックプレビュー
L4結合(API・E2E)backend integration test / 実際の API 疎通確認

すべての変更で全層を回す必要はありません。変更の種類ごとの目安:

変更の種類必要な層
.vue ファイルL1 + L2 + L3
frontend .ts(コンポーネント以外)L1 + L2
backend service / modelL1 + L2
backend controller / DTO / migrationL1 + L2 + L4
フルスタックの変更L1 + L2 + L3 + L4

/verify skill がこの判定と実行を助けます。.claude/skills/verify/verify.sh が変更ファイルを検出し、L1・L2 を自動実行、L3・L4 が必要かどうかと実行方法を提示します。

backend テストは /backend-test-reports skill 経由だけ

./gradlew test を直接叩くことはできません(settings.json で deny)。 backend のテストを実行・確認する唯一の経路は /backend-test-reports skill です。

.claude/skills/backend-test-reports/test.sh run --unit
.claude/skills/backend-test-reports/test.sh run --integration --module table
.claude/skills/backend-test-reports/test.sh run --tests "*RoleControllerAuthorizationTest*"

backend のテストにはクラス名のサフィックスによる区分があります。

タスク対象
unitTest@Tag("unit") かつ *ArchitectureTest|*GuardTest|*BoundaryTest|*SnapshotTest|*CoverageTest|*ContractTest|*ParityTest 以外
guardTest上記 7 サフィックスちょうど(ArchUnit ベース。共有 import cache のため 4g heap が必要)
integrationTestIntegrationTestBase を継承する結合テスト
prTestPR フィードバックを 10 分以内に収めるための厳選サブセット(DB 不要の安全ガード・wire contract・i18n 整合性など)

PR は prTest + integrationGuardTest(RLS/authz の DB レベルパリティゲート)を実行します。unitTest / guardTest / integrationTest のフルセットは main push 時・夜間・手動実行のタイミングです。

main ブランチには既知の red(自分が触っていないなら直す対象ではないテスト失敗)があります。unit で 6 クラスにまたがる 27 件、integration で 8 クラスにまたがる 14 件(RLS 分離テスト含む)などです。自分の変更と無関係な失敗に遭遇したら、まず /backend-test-reports の結果とその変更範囲を見比べて、pre-existing red かどうかを確認してください。

L3 — 見た目の検証は /__dev/* 固定プレビューのみ

ライブアプリを Playwright で操作するループ(ログイン → 画面遷移 → クリック → ドラッグ&ドロップ試行)は検証手段として使いません。 対象コンポーネントを state ごと(空・データあり・編集不可・エラーなど)に固定モックで /__dev/* route に並べ、各 state をスクリーンショットして目視確認します。機能面の保証は L1/L2 が担い、操作感(ドラッグの手応え・リサイズ・hover)は人間が確認する領分です。新規コンポーネントや大きく手を入れたコンポーネントは実装と同時に /__dev プレビューページも用意します。

frontend の静的検証コマンドは次の組み合わせです。

bun run typecheck
npx eslint --no-fix <changed-paths>
bun run test

bun run linteslint . --fixリポジトリ全体に対して実行し、対象ファイル引数を無視します。検証目的では絶対に使わないでください — 無関係なファイルを黙って書き換えます。検証には npx eslint --no-fix <対象パス> を使います。

Storybook(既存 25 story)は後方互換のためだけに残っています。新規コンポーネントに新しい story を追加することはありません — /__dev プレビューが標準です。

L4 — 結合検証

API やマイグレーションを変更した場合は、backend integration test に加えて、実際に動いている backend/frontend に対して API 疎通を確認します。TestContainers が DB を自動で用意するので、integration test 自体は並行セッションと衝突しません。

検証結果の書式

検証が終わったら、次の形式で結果を残します(コミットメッセージに含めるのが慣習です)。

Verified: L1(pass) L2(unit:12/12,backend:5/5) L3(visual:pass) L4(integration:8/8)

次は backend/frontend それぞれの規約へ

このページはリポジトリ横断の検証の仕組みを扱いました。backend 固有のテストの書き方(命名規則・IntegrationTestBase の使い方・RLS テストパターンなど)は backend のテスト規約 を参照してください。