Lerna とは何か? monorepo の versioning ツールを解説
Lerna は JavaScript の monorepo を管理するためのツールで、単一のリポジトリから多数の package を協調的に versioning および publish することで最もよく知られています。
Lerna は JavaScript の monorepo workflow の先駆けでした。より新しいツールが build の cache に注力するのに対し、Lerna の変わらぬ強みは release 管理です。どの package が変更されたかを判断し、そのバージョンを上げ、fixed と independent の両方の versioning をサポートしながら、それらを npm にまとめて publish します。
Lerna とは
Lerna は JavaScript と TypeScript 向けの monorepo 管理ツールです。workspace と連携して package をまたいでコマンドを実行し、どの package が変更されたかを検出し、versioning と publish を扱います。モダンな Lerna は、タスクの cache とグラフの認識のために、内部で Nx と統合します。
versioning と publish
Lerna は 2 つのモードをサポートします。すべての package が 1 つのバージョンを共有する fixed と、各 package が個別にバージョン管理される independent です。"lerna version" は変更内容に基づいてバージョンを上げて git tag を作成し、"lerna publish" は更新された package を registry に push します。この協調的な release フローが、その特徴的な機能です。
使用例
変更された package に version を付け、それらを publish します。
# bump versions for changed packages and tag
npx lerna version
# publish the updated packages to npm
npx lerna publish from-gitCI/CD での役割
CI/CD では、Lerna は通常 release pipeline で実行されます。merge の後、変更された package を判断し、バージョンを上げ、release に tag を付け、registry に publish するまでを、すべて協調的な 1 つのステップで行います。Nx を用いたタスク実行と組み合わせると、影響を受ける package だけを build および test することもでき、release pipeline を効率的に保ちます。
代替ツール
Changesets は、versioning と changelog に純粋に注力した人気の代替ツールです。Nx と Turborepo は build の cache を扱いますが、release には Changesets のようなツールに頼ります。pnpm と Yarn workspaces は、基盤となるマルチ package 構造を提供します。Lerna は、協調的な monorepo publish のための堅実な選択肢であり続けています。
重要なポイント
- Lerna は JS/TS monorepo 全体で versioning と publish を管理する。
- fixed または independent な versioning と、協調的な release をサポートする。
- CI では release ステップを担い、変更された package の version、tag、publish を行う。