Changesetsで柔軟に変更を管理する
概要
ChangesetsはバージョニングおよびCHANGELOG生成ライブラリ。
standard-versionやlernaのversionのようにコミットからバージョンやCHANGELOGを生成するのではなく、任意のタイミングで変更を記述できる点が特徴的。
yarn changeset
で[major/minor/patch]を選択し、サマリーを入力して変更ログを入れる。
変更ログはプロジェクトの.changeset
にマークダウンとして生成されるため、いつでも変更したり、捨てたりできる。
---
"changeset-example": minor
---
新機能xxx追加
任意のタイミングで
yarn changeset version
と叩くことで、変更ログをかき集めてバージョンとCHANGELOGを生成する。
pnpmやturborepoといった高速なインストーラー/タスクランナーも、バージョニングにChangesetsを併用するガイドを用意している。
- https://pnpm.io/using-changesets
- https://turborepo.org/docs/guides/migrate-from-lerna#package-publishing-versioning-and-changelog-generation
コンセプト
Gitのコミットは簡潔に記述することが推奨されるため、変更点をドキュメントするには適さず、変更を管理する別の場所を用意したとのこと。
実際standard-versionなどコミットから生成するタイプだと、コミット単位でCHANGELOGに反映されてしまうため、コミットをまとめたり気をつけないと無駄なログが生成されてしまう。
Changesetsはコミットとは無関係に変更ログを生成できるので楽だし、マークダウンファイルとして保存されるので扱いやすいのは便利だと思う。
(開発初期とかだとコミット単位でCHANGELOGを生成したくないことも多く、変更をまとめたり最悪ゼロから変更を書き直せるのは良い)
モノレポで利用する
Changesetsはモノレポに対応している。
Yarnを使っている場合は、workspaces
の記述があれば自動で検出し、
yarn changeset
のコマンドを打つと、
- majorアップデートするパッケージの選択
- minorアップデートするパッケージの選択
- 変更summaryの入力
という流れに変わる。
まとめ
今まで自動バージョニングやCHANGELOG生成にはstandard-version一択で使ってきたが、変更が多いプロトタイプ的なプロジェクトや個人開発・社内開発のライブラリとかではChangesetsくらい自由な方がやりやすそう。
まだ読み込めていないドキュメントもあるので、実際に小さなプロジェクトで導入して試してみようと思う。
Discussion