モノレポのチェンジログ生成

スコープ付きConventional Commitsを使用して、パッケージやサービスごとの変更を識別するモノレポプロジェクトのチェンジログを生成します。

Best Practices

詳細な説明

モノレポのチェンジログ

モノレポは単一のリポジトリに複数のパッケージ、サービス、またはアプリケーションを含みます。課題は、単一のコミット履歴から各パッケージに関連するチェンジログを生成することです。

パッケージ識別のためのスコープ使用

鍵はパッケージ名に一致するConventional Commitスコープの一貫した使用です:

feat(web): add user profile page
feat(api): implement GraphQL subscriptions
fix(web): correct mobile navigation
fix(shared): handle null in date formatter
build(api): upgrade Express to v5

パッケージ別フィルタリング

コミットをジェネレーターに貼り付ける前に、特定のパッケージでフィルタリングします:

git log --oneline v1.0.0..HEAD | grep -E '\((web|shared)\)'

これによりwebまたはsharedにスコープされたコミットのみが抽出され、Webアプリケーションに焦点を当てたチェンジログが生成されます。

ルートレベルとパッケージレベルのチェンジログ

2つの戦略があります:

  1. ルートレベルチェンジログ — リポジトリルートにすべてのパッケージを含む単一のCHANGELOG.md。スコープが各変更がどのパッケージに属するかを区別します。
  2. パッケージレベルチェンジログ — パッケージごとの個別のCHANGELOG.mdファイル(例:packages/web/CHANGELOG.md)。各ファイルはそのパッケージのスコープでコミットをフィルタリングして生成されます。

クロスパッケージ変更の処理

複数のパッケージに影響するコミットは、結合スコープまたはスコープなしを使用できます:

refactor: migrate from CommonJS to ESM across all packages
feat(web,api): add shared error handling middleware

ジェネレーターはマルチスコープエントリを単一のスコープ文字列として扱い、出力で**web,api:**としてレンダリングします。

ユースケース

Turborepo、Nx、またはLernaなどのツールを使用するモノレポプロジェクトに不可欠です。スコープベースのフィルタリングにより、リポジトリ全体で単一のコミット規約を維持しながら、パッケージごとのリリースノートが可能になります。

試してみる — Changelog Generator

フルツールを開く