以下の内容はhttps://engineer-blog.toggle.co.jp/entry/2024/12/17/090000より取得しました。


モノレポ管理ツールを徹底比較したかった

こんにちは。トグルホールディングス SRE/プラットフォームエンジニアリングチームの小澤 (@kota65535)です。

この記事は トグルホールディングス アドベントカレンダー 2024 の 17 日目の記事です。

概要

近年、複数のサービスやパッケージを1つのレポジトリで管理する「モノレポ」構成を取る事例が増えています。背景には以下のような事情があります。

  • マイクロサービス化が進んだことでリリースが煩雑になった
    • モノレポであれば複数のサービスの同期的なリリース・デプロイは容易
  • 技術スタックがフロントエンド・バックエンドで統一しやすくなった
    • ただし統一する場合はJS/TS一択
  • モノレポ管理ツールが成熟して簡単に導入できるようになった

特にモノレポ管理ツールは群雄割拠とも言えるような状況で、State of JS 2023 の Monorepo Tools の部では18個のツールの名前が挙げられています。 そこでこの記事ではそれらを徹底比較…したかったのですが全然調査時間が足りなかったので、今回は以下の2軸に焦点を絞りたいと思います。

  • 対応言語: 対応するプログラミング言語の数
  • 複雑度: 設定の複雑さ。機能の豊富さとある程度比例する

比較 & 所感

いきなりですが比較結果が以下の図となります。

各ツールの所感です。

  • Bazel
    • C++, Java, Goなど様々な言語に対応
    • 大規模プロジェクト向け
    • 機能が豊富だが設定は複雑
  • Pants
    • Python, Java, Goなどの言語に対応
    • Bazelに似てるがBazelよりは簡単らしい
  • Moonrepo
    • 主にJS/TSのモノレポ向けだがRustなどの言語にも対応
    • protoというasdfみたいなバージョン管理ツールと統合できる
  • Gradle
    • 主にJavaのモノレポ向け
    • プラグイン式で他の言語にも対応可能
    • Groovy DSLで柔軟な記述が可能
  • Rush
    • 大規模なJS/TSモノレポ向け
    • 機能が豊富だが設定は複雑
  • NX
  • Turborepo
    • JS/TSモノレポ用
    • 設定はシンプル
    • TUIが便利で非常にログが見やすい
  • Wireit
    • JS/TSモノレポ用
    • 既存の package.json に設定を追加するだけ
    • devサーバーなど起動しっ放しのタスク(サービス)への依存関係を定義できる
  • Lage
    • JS/TSモノレポ用
    • 設定がシンプル
  • Make
    • 厳密にはタスクランナーではないがその用途でも使える
    • シェルスクリプトっぽいのにそうじゃない構文が難しい
    • キャッシュによる高速化とかは無い
  • Just
    • Makeの扱いづらいところを改善したツール
    • キャッシュによる高速化とかは無い
    • あとインクリメンタルビルドも無い
  • Task
    • Go製のタスクランナー
    • Makeを使うくらいならこっちが良いと思う

結論

対応言語と複雑度という2軸でかなり雑にモノレポツールを比較しました。また時間が取れたら詳しく調査します。




以上の内容はhttps://engineer-blog.toggle.co.jp/entry/2024/12/17/090000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14