Rush の癖
monorepo 管理するツールと言えば Lerna かなと思うが、microsoft もこれに似たツールであるRushを作っている。
検証リポジトリはここ
Lerna との比較はこの issue で議論されている。
Docs request - comparison with lerna · Issue #60 · microsoft/rushjs.io-website · GitHub
Rush のもつメリットはドキュメントのほうが詳しいのでこちらを参照
Rush: Welcome to Rush!
以下、触ってみてわかった挙動のクセを紹介。
現在の Rush の version は 5.35.1
できることはドキュメントのチュートリアルをなぞってみよう
Rush: Getting started
rush コマンドを使うために global install しないとだめ
Rush は root に package.json を置くことを意図していない。
そのため、rush コマンドを使うために global install しないといけなくなる。
npx rush initしても node_modules ありまっせっていう警告とともに終了する。
Rush は
rush tyankatsu-commandみたいに自分でコマンドを作れるので、やりたいならそこになる
CI で Rush を動かしたい場合、common/scripts/install-run-rush.jsというファイル経由で@microsoft/rushを呼び出すことになる。
pnpm にやたら依存してる
Rush が pnpm を推奨してたり、設定ファイルの rush.json に pnpmOptions という項目があったりと、やたら pnpm を見かけるが、結局はrush xxxみたいに rush コマンドしか使わないのでそこまで気に気にしなくていいと思う。
yarn のあれが使いたいとかになると、一応 default の pnpm からパッケージマネージャーを pnpm、npm、yarn の中からバージョンを指定して選択する項目がある。
Rush: NPM vs PNPM vs Yarn
main/master ブランチ以外で作業したら、CHANGELOG.md に書き込みたい単位で rush change
rush.json のdefaultBranchで指定したブランチとの diff を rush change で検知して、対話モードでメッセージを書き込み、それを push して merge する。
rush publish -aでこの差分を書き込んだ json ファイルを消して changelog を生成する。
rush change と rush publish のタイミングを間違えないように気をつける。
allowedAlternativeVersions でのバージョン指定は array でのバージョン指定
ensureConsistentVersions で全ての管理パッケージでの依存パッケージのバージョンを固定できるが、その例外を allowedAlternativeVersions に書ける。
これは"ensureConsistentVersions": trueとした時、パッケージの都合で
- PackageA で
"typescript": "3.6.5" - PackageB で
"typescript": "3.9.3" - PackageC で
"typescript": "3.9.3" - PackageD で
"typescript": "4.0.5"
となっていると、普通は各バージョンが違うので警告が出るが、
{
"allowedAlternativeVersions": {
"typescript": ["3.6.5", "3.9.3"]
}
}
と書くことで警告を回避できる。
{
"allowedAlternativeVersions": {
"typescript": ["3.x || 4.x"]
}
}
って書くと警告が出るので、めんどくさいが一つ一つ例外のバージョンを指定する。
何をベースのバージョンとするのか(この例だと 4.0.5 をベースにした)を考える。
publish と build は CI に任せたほうが良さそう
rush publish -aで changelog 作って、commit push して、
rush publish -p -n <npmToken> --add-commit-details --include-all --set-access-level publicで npm に publish するのがとてもじゃないけど自分でやるのしんどいので、CI とか Bot に任せたほうが楽。
Rush は Bot に任せてるっぽい。
Deleting change files and updating change logs for package updates. · microsoft/rushstack@5c9000c · GitHub
Applying package updates. · microsoft/rushstack@b932d1d · GitHub
最後に
到底Documentの出来が良くなくて、重要な情報が抜けていることが多々ある。
これは逆に言えばcontributeチャンスが多いので、OSS活動をやってみたい場合はチェックしてみると良さそう。