モノレポとは?
モノレポとは、単一のコードベースに多数の異なるアプリケーションとパッケージをまとめたものです。
これとは別に、**ポリレポ**と呼ばれる構成があります。これは、それぞれ個別に公開およびバージョン管理される複数のコードベースです。
コードの共有
ポリレポの場合
ポリレポ構成では、アプリケーション間でコードを共有するプロセスは比較的長くなります。
app、docs、shared-utils の3つの別々のリポジトリがあるとします。app と docs はどちらも、npmでパッケージとして公開されている shared-utils に依存しています。
shared-utils のバグが app と docs の両方で重大な問題を引き起こしているとします。あなたは次のことを行う必要があります。
shared-utilsでエラーを修正するコミットを作成するshared-utils内でpublishタスクを実行して、npmに公開するappで、shared-utils依存関係のバージョンを上げるコミットを作成するdocsで、shared-utils依存関係のバージョンを上げるコミットを作成する- これで、
appとdocsをデプロイできるようになりました。
shared-utils に依存するアプリケーションが多いほど、このプロセスは時間がかかります。非常に面倒な作業になる可能性があります。
モノレポの場合
モノレポ構成では、shared-utils は、app や docs と同じコードベース内に存在します。これにより、プロセスが非常に簡素化されます。
shared-utilsでエラーを修正するコミットを作成する- これで、
appとdocsをデプロイできるようになりました。
バージョン管理は必要ありません。なぜなら、app と docs は、npm にある shared-utils のバージョンに依存するのではなく、コードベース内にあるバージョンに依存するからです。
これにより、複数のアプリとパッケージのバグを一度に修正する単一のコミットを作成することが可能になります。これは、チームにとって大きなスピードアップにつながる可能性があります。
モノレポはどのように機能するのですか?
モノレポの主要な構成要素は、ワークスペースです。ビルドする各アプリケーションとパッケージは、独自の package.json を持つ、独自のワークスペース内に配置されます。ガイドから学ぶように、ワークスペースは相互に依存できます。つまり、docs ワークスペースは shared-utils に依存できます。
{
"dependencies": {
"shared-utils": "*"
}
}ワークスペースは、依存関係をインストールするのと同じ CLI によって管理されます。
ルートワークスペース
また、ルートワークスペース(コードベースのルートフォルダにある package.json)もあります。これは、以下の場合に役立ちます。
- モノレポ全体に存在する依存関係を指定する場合
- 個々のワークスペースだけでなく、モノレポ全体を操作するタスクを追加する場合
- モノレポの使用方法に関するドキュメントを追加する場合