Skip to content

Metanaka Nuxt Coding

Rule Levels

  • [必須]: 違反は必須修正として扱う。
  • [推奨]: 原則として採用する。合理的な理由がある逸脱は許容する。
  • [条件付き]: 条件成立時だけ適用し、根拠不足なら確認事項とする。

レビュー判定に使う規則は level tag 付きの箇条書きだけとする。tag のない文章と sample は理由と例を示す。

Scope

  • [必須] この skill は .ts.test.ts、Vue <script setup lang="ts"> のコード表現を扱う。
  • [必須] 配置、Vue/composable/model の責務、i18n、Firestore 境界は metanaka-nuxt-architecture へ委ねる。
  • [必須] unit test の構造、命名、検証内容、mock は metanaka-nuxt-testing へ委ねる。
  • [必須] observable production behavior を変更する実行順序は metanaka-nuxt-tdd へ委ねる。
  • [条件付き] この skill と formatter/linter に規則がない表現は近傍 code と検証結果に合わせ、未定義の好みを違反にしない。

Declarations and Functions

  • [推奨] local declaration は const を使い、再代入より早期 return、式、配列 method、小さな関数分割を優先する。
  • [条件付き] platform/library API、明確な loop、測定済み hot path、try 外へ値を持ち出す必要がある場合は scope を限定して let を使ってよい。
  • [必須] 新規・変更する関数は arrow function で定義する。
  • [条件付き] framework/library が function declaration、method syntax、this binding を要求する場合はその contract を優先する。
  • [必須] object の callable member は arrow function property、type の callable member は property function type を使う。
  • [推奨] 単純な guard clause は single-line return を使ってよい。複数 statement、cleanup、副作用を伴う場合は block にする。
ts
type RoomActions = {
  submit: () => Promise<RoomResult>
}

const handleJoin = async () => {
  const roomId = await getRoomId()
  if (!roomId) return

  await navigateTo({ path: "/room/join", query: { roomId } })
}

Pure Core and Side-effect Boundary

  • [推奨] 入力から出力を決める domain rule、validation 補助、状態遷移、表示 model は pure function にする。
  • [必須] pure function は外部 mutable state、DOM、storage、network、database、現在時刻、乱数、global singleton を直接読書きしない。
  • [必須] HTTP、Firestore、Firebase Auth、router、timer、logging などの副作用は composable、adapter、event handler、注入 dependency に閉じ込める。
  • [必須] 現在時刻と乱数が domain logic に必要なら値または dependency として渡す。
  • [条件付き] その場で読める短い guard や object 組み立ては、pure 化を理由に無理に helper へ分けない。

Export and Helper Scope

  • [必須] 他 module へ提供する安定 contract だけを export する。test のためだけに implementation helper を export しない。
  • [推奨] helper scope は inline、factory/composable 内、file-local top-level、export の順に必要最小へ寄せる。
  • [推奨] 複数 module から使う stable utility、公開 model/schema/type、独立した複雑な domain contract は export してよい。
  • [条件付き] helper の仕様が公開 contract として育った場合は責務に合う module へ移し、型・命名・test を公開 API として整える。

Line Breaks

  • [推奨] formatter が折らない短い式、単一の浅い object argument、短い return object は1行に保つ。
  • [条件付き] 引数が複数、object が深い、callback や条件式を含む場合は意味単位で改行する。
  • [必須] formatter/linter の出力を正とし、縦揃えだけを目的とした手動改行を増やさない。

Vue and Test Code

  • [必須] handler、computed/watch callback、Vitest callback、lifecycle callback にも arrow function rule を適用する。
  • [推奨] test helper は複数 test で意味のある前提を共有するときだけ作り、1箇所だけの薄い arrange を抽象化しない。
  • [必須] mock、fixture、test helper も外部利用の意図がなければ export しない。

Verification

  • [必須] TypeScript、Vue script、test code を変更したら Nuxt project root で pnpm tc を実行する。
  • [条件付き] behavior または test を変更した場合は関連 unit test も実行する。TDD 対象の順序は metanaka-nuxt-tdd を正とする。
  • [必須] metanaka-nuxt-tdd 適用中は同 workflow の test 実行と最後の typecheck で共同充足し、中間編集ごとに重複実行しない。