モノレポワークスペース間のパッケージ比較
モノレポの異なるワークスペースの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ファイルを比較して、共有バリデーションライブラリが各ワークスペースで異なるバージョンを持っていることを発見します。