モノレポワークスペース間のパッケージ比較

モノレポの異なるワークスペースのpackage.jsonファイルを比較して、バージョンの不一致や共有依存関係の欠落を見つけます。

Monorepo Management

詳細な説明

モノレポのパッケージ一貫性

モノレポ(npmワークスペース、Yarnワークスペース、pnpmワークスペース、Turborepoを使用)では、各ワークスペースが独自のpackage.jsonを持ちます。ワークスペース間で依存関係のバージョンを一致させることで、バージョンの不一致による微妙なバグを防ぎます。

一般的な不一致パターン

# packages/web/package.json vs packages/api/package.json

dependencies:
  ~ zod: ^3.21.0 -> ^3.22.0        [MINOR]
  ~ typescript: ^5.2.0 -> ^5.3.0   [MINOR]
  + @prisma/client: ^5.0.0         [ADDED - apiのみ]
  - react: ^18.2.0                 [REMOVED - webのみ]

一貫性が重要な理由

問題 結果
異なるTypeScriptバージョン パッケージ間で互換性のない型定義
共有ライブラリのバージョン不一致 パッケージ間のデータ受け渡し時のランタイムエラー
ピア依存関係の欠落 警告またはサイレント失敗
重複する依存関係 node_modulesサイズの増加

不一致の修正

不一致を特定した後:

  • ルートのpackage.jsonのoverridesフィールド(npm)またはresolutionsフィールド(Yarn)を使用してバージョンを統一
  • すべてのワークスペースが拡張する共有tsconfig.base.jsonを作成
  • syncpackなどのツールを使用して自動的にバージョンを整合

ユースケース

モノレポのメンテナーがCIでフレイキーなテストに気づき、フロントエンドとバックエンドのワークスペース間のバージョン不一致を疑っています。両方のpackage.jsonファイルを比較して、共有バリデーションライブラリが各ワークスペースで異なるバージョンを持っていることを発見します。

試してみる — Package.json Diff

フルツールを開く