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にパブリッシュされるのを防ぎます。