Skip to main content

Monorepo 2022

lerna is dead

最近npmや、yarn周りでエラーが起きるのですが、 [email protected] (2021-02-10)がリリースされてからメンテナンスされていません。 lernaはyarn2以上では動かないことが多いらしく、yarnのバージョンを怖くて上げられないでいました。

メンテナーの方のTweetやプロファイルによると、OSSをやめてしまったらしいです。 (代替案を見ると、他がこぞって作っているので、やめたくなるのもわかる気がします。) なので、移行先を検討します。

Front-End Engineer, burned out OSS maintainer, and Oxford comma enthusiast. He/him. Black Lives Matter.

未だに多くのオープンソースがlernaを使っていますが、Issue #2703によると、 babelはforkして使ってたlernaをやめ、yarnで管理するらしいです。

TIL that babel replaced lerna with a custom yarn plugin to manage releases in PR babel/babel#12138 in Oct 2020.

@changesets/cli vs @microsoft/rush vs @nrwl/workspace vs turbo

npm workspace

yarn workspace や npm workspace のみで monorepo を管理する方法です。

changesets

Atlassian社謹製です。Issue #2703で言及されていました。 もとはAtrassionがsemantic-releaseからforkしたのを、lernaベースに作りかえるらしいです。

rushstack

Microsoft社謹製です。ChangeLogがいい感じになるらしいです。

turborepo

vercel社謹製です。いい感じにしてくれるらしいです。

nx

nrwl社謹製です。ほかもいい感じにしてくれるらしいです。

  • npx [email protected] --preset=coreではじめられます。
  • npx add-nx-to-monorepoで既存のrepoにも追加できます。

結論

monorepoにもtoolchainの栄枯盛衰が早くて悲しくなるので、 とりあえず lerna ではじめ、 そのうちlernaが完全にダメになれば changesets、 ものレポの規模が大きくなれば、Bazel でそろえる形にしました。 Googleを信じろ、 Believe Google