mcpField
C
changesets

changesets

github.com/oakoss開発20144 回インストール10 週間前に更新
リポジトリ

changesets について

Changesetsは、マルチパッケージリポジトリ向けのバージョン管理と変更履歴のツールです。変更の影響度を記録し、コントリビューターとメンテナーがバージョン更新や公開を調整できます。

主な機能

  1. 01パッケージ変更とsemver影響度の記録
  2. 02変更情報の集約とバージョン更新
  3. 03変更履歴エントリーの生成
  4. 04パッケージ公開とgitタグ作成
  5. 05連動・固定・プレリリースのパッケージ対応
  6. 06テスト用スナップショットリリース

活用シーン

  1. 01monorepo内の複数パッケージのリリース調整
  2. 02PRの変更内容に基づく変更履歴生成
  3. 03CI経由のnpm公開の自動化
  4. 04プレリリースやスナップショット版のテスト

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/oakoss/agent-skills --skill changesets

インストール後、Claude Code で/changesetsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
basic-workflow.md
ci-automation.md
monorepo-setup.md

詳細

Changesets

概要

Changesets は、マルチパッケージリポジトリに特化したバージョン管理および変更履歴管理ツールです。コントリビューターは changeset ファイルを使って各変更の semver への影響(major/minor/patch)を宣言し、Changesets はそれらを集約して、バージョンの更新、変更履歴の更新、パッケージの公開を連携した単一のリリースとして行います。

使用するケース: モノレポのバージョン管理、自動変更履歴生成、複数パッケージの連携リリース、CI 主導の公開、プレリリース/スナップショットのワークフロー。

使用しないケース: npm への公開を行わない単一ファイルのプロジェクト、コミットメッセージベースのバージョン管理(semantic-release)を使用するプロジェクト、npm レジストリを使わずに手動でバージョン管理を行うプロジェクト、すべてのリリースを単一のメンテナーが PR での協業なしに管理するプロジェクト。

仕組み
  1. コントリビューターが、影響を受けるパッケージ、バンプの種類、概要を宣言する changeset ファイルを追加します
  2. PR で、changeset ファイルをコード変更と一緒にコミットします
  3. リリースの準備ができたら、changeset version が未処理の changeset をすべて適用し、バージョンと変更履歴を更新します
  4. changeset publish が更新されたパッケージを npm に公開し、git タグを作成します
  5. CI では、公式 GitHub Action が自動更新される「Version Packages」PR を通じて、手順 3〜4 を自動化します

主な概念

  • Changeset ファイル — .changeset/ 内にある Markdown ファイルです。影響を受けるパッケージ、バンプの種類(major/minor/patch)、変更履歴に表示される人間が読める概要を宣言します
  • バージョンコマンド — 未処理の changeset ファイルをすべて適用し、最終的なバージョンのバンプを計算して、package.json のバージョンを更新し、CHANGELOG.md のエントリーを生成し、内部依存関係の範囲を更新します
  • 公開コマンド — 更新されたパッケージを npm に公開し、git タグを作成します。version の直後に、コミットを挟まずに実行する必要があります
  • リンクされたパッケージ — リリース時に同じ最上位のバンプの種類を共有しつつ、独立したバージョン番号を維持するパッケージです
  • 固定パッケージ — グループ内で常に完全に同じバージョン番号を共有するパッケージです
  • プレリリースモード — 安定版リリース前のテスト用に、version がプレリリースバージョン(例:1.0.0-beta.0)を生成するモードです
  • スナップショットリリース — メインのリリース系列に影響を与えずに、その場限りのテストを行うための一時的な 0.0.0-timestamp バージョンです

設定クイックリファレンス

オプションデフォルト説明
changelog"@changesets/cli/changelog"変更履歴ジェネレーターのパッケージ。無効にする場合は false を指定します
commitfalseversion コマンドと add コマンドで自動コミットします
access"restricted"npm の公開アクセス設定です。スコープ付きパッケージを公開するには "public" を設定します
baseBranch"main"変更検出に使用するブランチ
linked[]最上位のバンプの種類を共有するパッケージのグループ
fixed[]完全に同じバージョンを共有するパッケージのグループ
ignore[]changeset によるバージョン管理から除外するパッケージ
updateInternalDependencies"patch"依存側をバンプするタイミングです。"patch" または "minor" を指定します
privatePackages{ version: true, tag: false }"private": true のパッケージに対するバージョン/タグの動作

クイックリファレンス

パターンコマンド/設定主なポイント
初期化npx @changesets/cli init.changeset/ フォルダーを設定ファイルとともに作成します
変更セットを追加npx @changesets/cli add対象パッケージとバージョン更新の種類を対話形式で指定します
空の変更セットを追加npx @changesets/cli add --emptyバージョン更新が必要なパッケージがないことを宣言します(CI を通過するため)
パッケージのバージョン更新npx @changesets/cli version変更セットを処理し、バージョンを更新して、変更履歴を更新します
パッケージを公開npx @changesets/cli publishnpm に公開し、Git タグを作成します
ステータスを確認npx @changesets/cli status保留中の変更セットを一覧表示します。変更セットのない変更がある場合は終了コード 1 で終了します
ブランチ以降のステータスnpx @changesets/cli status --since=mainmain から分岐した後の変更のみを確認します
プレリリースに移行npx @changesets/cli pre enter <tag>プレリリースモード(beta、alpha、rc、next)を有効にします
プレリリースを終了npx @changesets/cli pre exit通常のバージョン管理モードに戻します
スナップショットバージョンnpx @changesets/cli version --snapshotテスト用に 0.0.0-タイムスタンプ形式のバージョンを作成します
スナップショットを公開npx @changesets/cli publish --tag canary --no-git-tag最新の dist-tag を上書きせずにスナップショットを公開します
パッケージをリンク"linked": [["pkg-a", "pkg-b"]] in configパッケージ間で最も高いバージョン更新の種類を共有します
パッケージを固定"fixed": [["pkg-*"]] in configパッケージ間で完全に同じバージョン番号を共有します
パッケージを除外"ignore": ["pkg-internal"] in config変更セットによるバージョン管理からパッケージを除外します
公開アクセス"access": "public" in configスコープ付きパッケージを公開する場合に必要です
GitHub の変更履歴"changelog": ["@changesets/changelog-github", ...]PR へのリンクとコントリビューターのクレジットを追加します
自動コミット"commit": true in configversion コマンドと add コマンドで変更を自動コミットします
内部依存関係"updateInternalDependencies": "patch" in config内部依存パッケージのバージョンを更新するタイミングを制御します

よくある間違い

間違い正しいパターン
version と publish の間にコミットするversion の直後に、間にコミットを挟まず publish を実行する
パッケージの変更がない PR で --empty を忘れるCI チェックを通過するには npx @changesets/cli add --empty を使用する
パッケージ間でバージョンを完全に一致させる必要があるのに linked を使う同一バージョンには fixed を使用する。linked で共有されるのは更新幅のみ
公開パッケージに access: "restricted" を設定する公開 npm パッケージでは設定に access: "public" を設定する
CI のチェックアウトに fetch-depth: 0 を含めないchangeset の検出には Git の履歴全体が必要です
先にビルドせずに publish を実行するchangeset publish の前に必ずビルドステップを実行する
main ブランチでプレリリースモードに入る通常のリリースを妨げないよう、プレリリースには専用ブランチを使用する
他のパッケージが依存しているパッケージを無視する無視されたパッケージは更新されず、依存先に問題が生じます。使用は控えてください
デフォルトのタグでスナップショットを公開するlatest の dist-tag を上書きしないよう、必ず --tag フラグを使用する
CI 環境で NPM_TOKEN を設定しない自動公開には GITHUB_TOKEN と NPM_TOKEN の両方が必要です
CI でアクションを使わずに changeset publish を使用する公式の changesets/action は、2 モードのワークフローを正しく処理します
生成された CHANGELOG.md を手動で編集する代わりに changeset ファイルを編集してください。version 実行時に変更履歴が再生成されます

委任

  • CI パイプラインのデバッグ:リポジトリ固有のワークフローの調査には Explore エージェントを使用します
  • npm 公開の問題:公開やレジストリ認証の失敗のデバッグには Task エージェントを使用します

turborepo スキルが利用可能な場合は、ビルドのオーケストレーション、タスクのキャッシュ、CI の最適化を委任してください。 pnpm-workspace スキルが利用可能な場合は、ワークスペースの設定、依存関係のリンク、カタログ、Docker デプロイを委任してください。エンドツーエンドのリリースパイプラインについては、モノレポ統合リファレンスを参照してください。

参考資料

コメント