メインコンテンツへスキップ

課題

モノレポでは、パッケージによって標準が異なります。Reactフロントエンドはコンポーネントパターンを重視し、NestJSバックエンドは依存性注入を重視し、共有ライブラリはAPIの安定性を重視します。画一的なレビューは機能しません。

戦略の概要

Kodusはモノレポに自然にマッピングされる3つの設定レベルをサポートしています:
レベル適用範囲
組織すべてのリポジトリ.env ファイルをコミットしない”
リポジトリモノレポ”コンベンショナルコミットを使用する”
ディレクトリ特定のパッケージ”ReactコンポーネントはPascalCaseを使用する必要がある”

ステップ1 — パッケージをマッピングする

モノレポ内の異なる領域とそのレビューニーズを特定します:
monorepo/
├── apps/
│   ├── web/          → Reactルール、コンポーネントパターン
│   ├── api/          → NestJSルール、アーキテクチャの境界
│   └── mobile/       → React Nativeルール
├── libs/
│   ├── shared/       → APIの安定性、破壊的変更の検出
│   └── ui/           → デザインシステムへの準拠
└── infra/            → Terraform/IaCルール

ステップ2 — ディレクトリレベルの設定を作成する

コードレビュー設定リポジトリ に移動し、設定するディレクトリをクリックします。 各ディレクトリは以下を持つことができます:
  • Kodyルール(ファイルレベルとPRレベル)
  • レビューオプション(有効にする分析タイプ)
  • 提案コントロール(重要度フィルター、最大提案数)
  • 除外パス

ステップ3 — ターゲットを絞ったルールを作成する

フロントエンドルール(スコープ:apps/web/

Name: ReactコンポーネントはデザインシステムトークンをDesign System Tokensを使用する必要がある
Scope: File
Paths: apps/web/src/components/**/*.tsx
Severity: High
Instructions:
  fileDiffでハードコードされた色、スペーシング、またはフォントサイズを確認する。
  コンポーネントは @file:libs/ui/src/tokens.ts からトークンをインポートする必要がある。
  トークンファイルに含まれていない16進数カラー、ピクセル値、またはフォントサイズにフラグを立てる。

バックエンドルール(スコープ:apps/api/

Name: ドメイン層はインフラストラクチャからインポートしてはならない
Scope: File
Paths: apps/api/src/domain/**/*.ts
Severity: Critical
Instructions:
  fileDiffで "../infrastructure"、"../../infrastructure"、
  または "/infrastructure/" を含むパスからのインポートを確認する。
  ドメインモジュールは他のドメインモジュールと
  共有インターフェースにのみ依存できる。

共有ライブラリルール(スコープ:libs/shared/

Name: パブリックAPIの変更にはチェンジセットが必要
Scope: Pull Request
Severity: High
Instructions:
  pr_files_diffがlibsshared/src/index.ts内のファイルを変更したり、
  エクスポートを追加/削除した場合、.changeset/ディレクトリに
  チェンジセットファイルが存在するか確認する。見つからない場合は、
  ドキュメントのない潜在的な破壊的変更としてフラグを立てる。

ステップ4 — クロスカッティング規約にMemoriesを使用する

一部の規約はどこでも適用されます。それらをMemoriesとして教えます:
@kody remember: このモノレポでは、すべてのパッケージがESMインポートを使用する。
CommonJSのrequire()はどこでも使用できない。
@kody remember: 共有ライブラリは後方互換性を維持する必要がある。
破壊的変更にはメジャーバージョンのバンプとチェンジセットが必要。

ステップ5 — ディレクトリごとに提案コントロールを設定する

トラフィックの多いパッケージにはより厳格な制限が必要な場合があります:
  • apps/web/ — 最大5件の提案、中程度の重要度フィルター(フロントエンドは速く変化する)
  • libs/shared/ — 最大15件の提案、低い重要度フィルター(安定性が重要)
  • infra/ — 最大3件の提案、高い重要度フィルター(少なくても重要なもの)

ステップ6 — 生成されたパスを除外する

ノイズを避けるためにモノレポ固有の除外設定を追加します:
ignorePaths:
  - "**/node_modules/**"
  - "**/dist/**"
  - "**/build/**"
  - "**/*.generated.ts"
  - "**/prisma/migrations/**"
  - "**/coverage/**"

ヒント

  • ディレクトリごとに2〜3のルールから始め、チームが実際にレビューでフラグを立てるものに基づいて拡張する
  • ルール継承を使用する — 組織レベルのルールはセキュリティをカバーし、リポジトリレベルは規約をカバーし、ディレクトリレベルはアーキテクチャをカバーする
  • あるパッケージではルールが頻繁に発火するが他では有効な場合は、ルールを弱めるのではなく、そのディレクトリをルールから除外する
ディレクトリ設定の詳細については、ディレクトリレベル設定 を参照してください。ルール継承については、ルール継承 を参照してください。