pnpm workspaceでモノレポを構成する
問題
フロントエンド、ランディングページ、モバイルアプリ、インフラコードがそれぞれ別のリポジトリに分散していると、依存関係の管理が面倒で共通コードの共有も困難です。
解決方法
# pnpm-workspace.yaml
packages:
- frontend
- landing
- android
- ios
- infra
// ルート package.json
{
"name": "my-project",
"private": true,
"scripts": {
"dev": "pnpm -F @my-project/frontend dev",
"build": "pnpm -F @my-project/frontend build"
}
}
ルートでpnpm installを1回実行するだけで、すべてのパッケージの依存関係がインストールされます。特定のパッケージだけを実行するには-F(filter)フラグを使います。
ポイント
pnpm-workspace.yamlファイル1つでモノレポの設定が完了します。yarn workspaceのようにpackage.jsonに設定を書く必要がないためシンプルです。- pnpmはシンボリックリンクベースでディスク容量を節約し、パッケージ間の依存関係分離も厳格です。npmやyarnよりモノレポに適した構造です。
- ルートの
package.jsonには"private": trueを必ず設定してください。誤ってnpmにパブリッシュされるのを防ぎます。