npmへの公開とセマンティックバージョニング
changesetsまたはsemantic-releaseでリリースを自動化し、スコープ付きパッケージをnpmレジストリに公開します
「npmへの公開とセマンティックバージョニング」はCoddyKit上の無料React Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはReact Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 React Academyコースには全4レッスンが含まれています。
npm publish --dry-run
公開する前に、必ず npm publish --dry-run を実行してください。これは実際には何もアップロードせずに公開をシミュレートし、含まれるファイル、そのサイズ、パッケージの tarball の内容を正確に表示します。ソースファイルを誤って含めてしまったり、dist ディレクトリが不足していたりするなど、よくある間違いを見つけられます。
公開ファイルの制御
package.json の files フィールドを使って、公開されるファイルを制御します。"files": ["dist", "README.md"] のように指定します。このホワイトリスト方式は、ブラックリスト方式の .npmignore より安全です。.npmignore では、追加し忘れた機密ファイルが漏えいする可能性があるためです。dist、型宣言、ドキュメントは必ず含めてください。src、テスト、node_modules は決して含めないでください。
セマンティックバージョニングの基本
npm パッケージでは、セマンティックバージョニング(semver)に従います。形式は MAJOR.MINOR.PATCH です。互換性を壊す変更(props の削除や API シグネチャの変更)には MAJOR を上げます。後方互換性のある新機能(新しいコンポーネントや新しいオプションの props)には MINOR を上げます。後方互換性のあるバグ修正には PATCH を上げます。0.x.x は安定版になる前の段階と見なされるため、どのような変更でも互換性が壊れる可能性があります。
プレリリースバージョン
プレリリース識別子は、そのバージョンがまだ本番利用の準備ができていないことを示します。初期の実験的なビルドには 1.0.0-alpha.1、機能は完成しているもののバグが残っている可能性があるバージョンには 1.0.0-beta.2、最終テストの準備ができたリリース候補には 1.0.0-rc.1 を使います。プレリリースは npm publish --tag beta で公開し、デフォルトでインストールされないようにしてください。
Changesets ツール
Changesets は、コンポーネントライブラリでパッケージのバージョンと変更履歴を管理するための標準ツールです。ワークフローでは、コントリビューターが yarn changeset add を実行して、変更内容と変更種別(major/minor/patch)を記録します。CI では yarn changeset version を実行してパッケージのバージョンを更新します。公開時には yarn changeset publish を実行して npm にプッシュします。
CHANGELOG の自動生成
Changesets は、コントリビューターがコミットした changeset ファイルに基づいて、CHANGELOG.md を自動的に生成および管理します。各エントリには、バージョン番号、リリース日、変更内容の説明が含まれます。これにより、手作業で CHANGELOG を管理しなくても、すべてのバージョンの履歴を人が読みやすい形で残せます。
semantic-release という選択肢
semantic-release は、conventional commit メッセージから次のバージョンを判断する、完全自動化されたバージョニングツールです(feat: → minor、fix: → patch、BREAKING CHANGE: → major)。バージョンを更新し、変更履歴を生成して npm に公開するまでのすべてを、main へのマージをきっかけに CI で実行します。手動でのバージョン管理は必要ありません。
npm のアクセス設定:公開と制限付き
スコープなしパッケージ(my-component)は常に公開されます。スコープ付きパッケージ(@myorg/my-component)はデフォルトで制限付き(非公開)です。公開するには npm publish --access public を実行してください。制限付きパッケージには、npm の有料アカウントまたは組織が必要です。初めて公開する前に、アクセス設定を確認してください。
npm Provenance
npm provenance は、公開したパッケージを特定の git コミットに検証可能な形で関連付けます。GitHub Actions で npm publish --provenance を実行して有効にしてください。利用者は、インストールしたパッケージが npm レジストリのページに表示された正確なソースコミットからビルドされたものかどうかを検証できます。これにより、ソフトウェアサプライチェーンのセキュリティが大幅に向上します。
古いバージョンの非推奨化
あるバージョンに重大なバグや互換性を壊す変更がある場合は、非推奨にしてください。npm deprecate your-package@1.2.3 "Security vulnerability, upgrade to 1.2.4" のように実行します。npm は、そのバージョンをインストールしようとする利用者に非推奨警告を表示します。これはバージョンを削除するものではありません(npm はデフォルトで公開済みのバージョンを削除しません)が、利用者にアップグレードを促します。
スコープ付きパッケージの命名
スコープ付きパッケージは、@scope/package-name という形式を使用します。スコープには通常、npm のユーザー名または組織名を指定します。スコープ付きパッケージを使うと、誰がパッケージを保守しているかが明確になり、スコープなしパッケージとの名前の衝突も防げます。非公開パッケージや、組織に関連付けたオープンソースパッケージには、スコープ付きパッケージを使用してください。
セマンティックバージョニング:メジャーとマイナー
セマンティックバージョニングでは、MAJOR のバージョン番号を上げるのはどのような場合ですか。
レッスンのまとめ:公開とバージョニング
公開前の確認には npm publish --dry-run を使用し、公開するファイルの制御には files フィールドを使用します。セマンティックバージョニングでは、互換性を壊す変更に MAJOR、新機能に MINOR、修正に PATCH を使用します。プレリリースには -alpha/-beta/-rc タグを使用します。Changesets は、共同開発するライブラリのバージョニングと CHANGELOG 生成を自動化します。semantic-release は conventional commit からの処理を自動化します。サプライチェーンのセキュリティのために --provenance を有効にします。バグのあるバージョンは npm deprecate で非推奨にします。
よくある質問
「npmへの公開とセマンティックバージョニング」レッスンは無料ですか?
はい。「npmへの公開とセマンティックバージョニング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、React Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 React Academyコースには全4レッスンが含まれています。
「npmへの公開とセマンティックバージョニング」で何を学びますか?
changesetsまたはsemantic-releaseでリリースを自動化し、スコープ付きパッケージをnpmレジストリに公開します ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
React Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのReact Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「npmへの公開とセマンティックバージョニング」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このReact Academyレッスンでコードを書いて実行できますか?
はい。すべてのReact Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ライブラリ向けRollupとtsupのバンドル
- ESMとCJSのデュアルパッケージ出力
- Peer DependenciesとTree Shaking
- npmへの公開とセマンティックバージョニング