概要
今回のブログポストでは、JavaScript で開発するプロジェクトでモノレポ(Monorepo)を使用するために必要なツールを紹介します。
ブログシリーズ
このブログはシリーズで制作されました。次のリンクを通じて他のブログポストも確認してください。
- [プロジェクト管理] リポジトリ戦略
- [JavaScript] モノレポ(Monorepo)のためのツール
- [Monorepo] NodeJS のモジュールの読み込み
- [Monorepo] Symlink
- [Monoepo] Yarn Workspaces
- [Monoepo] Yarn Workspaces の依存性の Hoisting
- [Monoepo] Yarn Workspaces のコマンド
- [Monoepo] pnpm を使ってモノレポを作る方法
モノレポを始める方法
モノレポを始める方法は大きく 2 つあります。
- パッケージマネージャーを利用する方法
- モノレポ用ツールを利用する方法
今回のブログポストでは、JavaScript プロジェクトでモノレポをサポートするパッケージマネージャーとモノレポツールについて紹介します。
パッケージマネージャー
JavaScript プロジェクトでモノレポを構成するためには、モノレポをサポートするパッケージマネージャーを使用することができます。モノレポをサポートするパッケージマネージャーは、pnpm
、yarn
、npm
があります。
モノレポをサポートするパッケージマネージャーであるpnpm
、yarn
、npm
は次のような特性を持っています。
機能 | pnpm | yarn | npm |
---|---|---|---|
workspace 提供 | ✅ | ✅ | ✅ |
孤立した node_modules | ✅(default) | ✅ | ✅ |
ホイスティングされた node_modules | ✅ | ✅ | ✅(default) |
ピア自動インストール | ✅ | ❌ | ✅ |
Plug’n’Play | ✅ | ✅(default) | ✅ |
Zero-Installs | ❌ | ✅ | ❌ |
依存パッチ | ✅ | ✅ | ❌ |
NodeJS バージョン管理 | ✅ | ❌ | ❌ |
Lockfile | ✅(pnpm-lock.yaml) | ✅(yarn.lock) | ✅(package-lock.json) |
上書きサポート | ✅ | ✅(resolution 使用) | ✅ |
Content-addressable リポジトリ | ✅ | ❌ | ❌ |
動的パッケージ実行 | ✅(pnpm dlx) | ✅(yarn dlx) | ✅(npx) |
Listing licenses | ✅(pnpm licenses list) | ✅(Via a plugin) | ❌ |
モノレポ用ツール
パッケージマネージャーが提供するWorkspace
機能だけでも十分にモノレポを構成することができますが、モノレポ用ツールを使用するとより簡単にモノレポを構成することができます。また、モノレポ用ツールが提供するCache
機能を使用するとBuild
やCI
などをより高速に実行することができます。
JavaScript プロジェクトのためのモノレポ用ツールにはLerna
、Nx
、Turborepo
があります。
Lerna
Lerna
はオープンソースで開発、管理されています。オープンソースコミュニティだけでは管理が難しく、Nx
に引き継がれました。
- Lerna: https://lerna.js.org/
現在もLerna
を使用することはできますが、Nx
に引き継がれたため、Nx
が自分たちのツールほどLerna
をサポートするかは確実ではないため、Lerna
を使用するのであればNx
を使用するか、もう少し動向を見守ることをお勧めします。
Nx
Nx
はNarwhal Technologies Inc.
という会社で開発、提供しています。この会社はAngular
フレームワークに関連するツールやサービスを提供する会社です。Angular
フレームワークに関連するツールを開発する会社が作ったNx
であるため、Nx
はAngular
アプリケーションをサポートするモノレポ管理ツールとして始まりました。現在はReact
など他のフレームワークもサポートしています。
- Nx: https://nx.dev/
もしAngular
フレームワークでプロジェクトを開発する予定であれば、Nx
は優れた選択肢になると思います。もちろん、他のフレームワークでもNx
は良い選択肢になるかもしれませんが、Angular
フレームワークを中心に開発されたNx
とAngular
中心のツールを開発する会社が作ったNx
はAngular
フレームワークでより良いパフォーマンスを発揮すると思います。
Nx
がサポートするフレームワークは次のリンクから確認できます。
- Recipes: https://nx.dev/recipes
Turborepo
Turborepo
はJared Palmer
が開発しましたが、2021 年にNextJS
を作って運営しているVercel
が買収し、開発、管理しています。
- Turbo: https://turbo.build/
もし、NextJS
、React
でプロジェクトを開発する予定であれば、Turborepo
は優れた選択肢になると思います。もちろん、他のフレームワークでもTurborepo
は良い選択肢になるかもしれませんが、NextJS
を作って運営しているVercel
が買収したTurborepo
はNextJS
でより良いパフォーマンスを発揮すると思います。
Turborepo
がサポートするフレームワークは次のリンクから確認できます。
- Turborepo Examples: https://turbo.build/repo/docs/getting-started/from-example
完了
今回のブログポストでは、JavaScript で開発するプロジェクトでモノレポ(Monorepo)を使用するために必要なツールを紹介しました。パッケージマネージャーが提供する機能だけで十分にモノレポを構成することができますが、モノレポ用ツールを使用するとより簡単にモノレポを構成することができます。
モノレポでプロジェクトを構成する予定であれば、パッケージマネージャーの機能だけでなく、モノレポ用ツールの導入も検討してみてください。
私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!
アプリ広報
Deku
が開発したアプリを使ってみてください。Deku
が開発したアプリはFlutterで開発されています。興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。