🙌

npmバージョニング表記を理解する

2024/01/11に公開

プロジェクトで使用するパッケージのバージョンを管理することは、JavaScriptやTypeScriptを使ったソフトウェア開発において非常に重要です。この記事では、npmパッケージ管理の詳細、特にキャレット(^)とチルダ(~)記号、その他のバージョニング表記に焦点を当てて説明します。

主要なバージョン:メジャー、マイナー、パッチ

npmのエコシステムでは、バージョン番号は通常、三つの部分「major.minor.patch」で構成されています。これらはソフトウェアに加えられた異なるタイプの変更を表し、開発者やユーザーが特定のバージョン番号の重要性を理解するのに役立ちます。

  • メジャーバージョン: ソフトウェアに破壊的変更が加えられた場合に増加します。以前のバージョンとの後方互換性がなくなり、コードの変更が必要になることがあります。
  • マイナーバージョン: ソフトウェアに新機能が追加されたり、既存機能が大幅に改善されたりした場合に増加します。これらの変更は通常、後方互換性があります。
  • パッチバージョン: ソフトウェアのバグやセキュリティ問題が修正された場合に増加します。これらの変更は通常、小さく、ソフトウェアの機能性や特徴に大きな変更を伴いません。

キャレット(^)とチルダ(~)の理解

**package.json**ファイルで依存関係を指定する際、キャレットとチルダ記号は許容されるパッケージバージョンの範囲を決定するための特別な意味を持ちます。

  • キャレット(^): npmがパッチまたはマイナーレベルのアップデートのみを許可し、メジャーバージョンのアップデートは許可しないことを示します。例えば、"^5.0.2"は、npmが同じメジャーバージョン内(例:5.1.0、5.0.3など)のアップデートは許可するが、新しいメジャーバージョンへのジャンプ(例:6.0.0)は許可しないことを意味します。
  • チルダ(~): キャレット記号をチルダ記号に変えることで、パッチレベルのアップデートのみを受け取ります。"~5.0.2"を使用した場合、5.0.3が利用可能であればそれを取得しますが、5.1.0は取得しません。

その他のバージョニング表記

特定の範囲内で最新バージョンを取得したい場合、別の表記法を使用できます。

  • 最新のパッチバージョン: 「5.0.x」の表記を使用して、与えられたメジャーとマイナー番号の最新バージョンをインストールします。
  • 最新のマイナーおよびパッチバージョン: 「5.x.x」という表記を使用して、同じメジャーバージョン内でのアップデートを許可しますが、マイナーバージョンに制限はありません。

依存関係のアップデート

**package.json**ファイル内のバージョン番号を変更する際には、依存関係のアップデートを適切に管理することが重要です。

  • npm install: パッケージの依存関係とそれらの依存関係に依存するもの(トランジティブ依存関係)をインストールします。また、**package-lock.json**ファイルが存在しない場合は、それを作成します。
  • npm update: **npm installとは異なり、互換性のあるバージョンのみをダウンロードするだけでなく、指定された範囲に合う最新バージョンにパッケージをアップデートします。また、package-lock.json**ファイルも更新されます。

Discussion