モノレポとは?
モノレポとは、単一のコードベースに多数の異なるアプリケーションとパッケージをまとめたものです。
これとは別に、**ポリレポ**と呼ばれる構成があります。これは、それぞれ個別に公開およびバージョン管理される複数のコードベースです。
コードの共有
ポリレポの場合
ポリレポ構成では、アプリケーション間でコードを共有するプロセスは比較的長くなります。
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
)もあります。これは、以下の場合に役立ちます。
- モノレポ全体に存在する依存関係を指定する場合
- 個々のワークスペースだけでなく、モノレポ全体を操作するタスクを追加する場合
- モノレポの使用方法に関するドキュメントを追加する場合