15
6

More than 1 year has passed since last update.

Turborepoを使ってMonorepoへ移行する

Last updated at Posted at 2022-06-03

あるアプリケーションをMonorepoで管理したくなり、Turborepoを使ったのでまとめます。

Turborepoとは

昨年末にVercelに買収されたことで話題となった、monorepoを管理するためのツールです。

この分野ではLernaが人気ですが、Turborepoも昨年末以降ダウンロード数を伸ばしているようです。

image.png

Monorepoツールの比較

それぞれのMonorepo管理ツールで何ができるかといった機能の比較などはこちらにまとまっていました。

LernaのメンテをNrwlが引き継ぐなどのニュースもあったので、今どれがベストかを判断するというよりも、好きに試してみるというモチベーションでTurborepoを選択しています。

手順

Workspaceの設定をする

Turborepoはyarn workspaceなどと互換性があります。
そのため、まず単一のリポジトリからWorkspaceを設定します。

./appsディレクトリを作成し、package.jsonを書き換えます。

package.json
{
  ...
  "private": true,
  "scripts": {},
+  "workspaces": [
+    "apps/*"
+  ],
  ...
}

これでapps以下にディレクトリを切って、アプリケーションを配置します。

.
├── apps
│   └── repo1
│   └── repo2
├── README.md
├── package.json
└── yarn.lock

turboの設定

turbo のインストールをします。

yarn add turbo -DW

Turborepoはturbo.jsonで設定を管理します。

{
  "$schema": "https://turborepo.org/schema.json",
  "baseBranch": "origin/main",
  "pipeline": {
    "build": {
      "dependsOn": ["^build"]
    },
    "dev": {
      "cache": false
    }
  }
}

このように設定すると、以下のコマンドで、全アプリケーションのbuildを実行することができます。

yarn turbo build

buildに設定されている、"dependsOn": ["^build"]^ は、dependencies、devDependenciesのbuildタスクの完了を待つ記号です。

補足

Turborepoは各アプリケーションのタスクの依存関係を解決しながら処理を実行してくれます。
それらを管理するのがpipelineの設定です。

pipelineによって、依存しているタスクを並列実行することで、処理の最適化もしてくれます。

キャッシュ

Turborepoはコンテンツのハッシュから、タスク実施が必要なものを判断します。

例えば、複数のアプリケーションでbuildを行う時に、変更があったアプリケーションを自動で判定し、必要なbuildだけを行ってくれます。
これにより処理時間の短縮をすることができ便利です。

また、今回は設定していないですが、Vercel上にキャッシュを保存することで、CI/CDなど他の環境で実行した結果を用いて、タスクの処理時間の短縮をすることもできるようです。

最後に

Lernaにあるようなパッケージの公開、バージョン管理などはまだ無いようですが、アプリケーションの開発においては便利に感じました。

引き続き使って行きたいと思います。

15
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
6