新卒から開発を始めて数年。
今まで yarn
や npm
など、何となく使用してきました。
ここで一度きちんと理解したいと思い、
今回はパッケージマネージャーについて調べてみました。
パッケージマネージャーとは
そもそもパッケージマネージャとは何でしょうか。
こちらのサイトには下記の記述がありました。
パッケージマネージャーとはその名のとおりパッケージを管理するソフトウェアやシステムのことです。一言でパッケージマネージャーと言っても色々ありますが、大まかには以下の二種類に分けられます。
- OSレベルの機能やソフトウェアパッケージを管理するもの
- ソフトウェア開発時に使用する機能部品や実行部品を管理するもの
二種類存在するとは知りませんでした。
冒頭に述べたような yarn
や npm
は後者に該当するので、
今回はそちらについて取り上げます。
パッケージマネージャの主な役割
パッケージマネージャーの主な役割についてみていきましょう。
①依存関係の管理
プロジェクトで利用するパッケージとその依存関係を追跡・解決します。
とあるパッケージを動作させるため、
別のパッケージが必要となる関係性のことを 依存関係 と呼びます。
この依存関係を把握して管理し、
必要に応じてインストールやバージョンアップなどを行います。
パッケージマネージャ動作の仕組み
(日立ソリューションズより)
-
設定ファイルを読み込み、必要なパッケージを調べる
-
必要なパッケージが未取得であればインターネット上の公開リポジトリを参照して取得
-
取得したパッケージにも設定ファイルがありこれを参照
-
取得したパッケージの設定ファイルに記載されている必要なパッケージをリポジトリから取得
-
さらに取得したパッケージの設定ファイルを参照して…と必要なすべてのパッケージが揃うまで2.から4.を繰り返す
-
最終的に必要なパッケージがすべて開発環境側に取得され、
開発に利用できるようになり、また、ランタイムライブラリとしてアプリケーションに組み込まれる
②パッケージのインストール管理
指定したパッケージをローカル環境にインストールします。
特定のバージョンを指定しての導入も可能。
後述しますが、
npm
の場合、package.json
が設定ファイルになります。
このpackage.json
にはいくつかのセクションが記載されています。
これらのうち、インストールに関するセクションは下記です。
-
dependencies
実際のアプリケーション実行時に必要なもの -
devDependencies
開発環境で使用するもの
それぞれに必要なパッケージやバージョンを記載し、
npm install
コマンドを実行すると該当するパッケージが追加されます。
バージョン形式について
バージョンの指定はセマンティックバージョニングに基づいているようです。
MAJOR.MINOR.PATCH
- MAJOR: 後方互換性を壊す変更
- MINOR: 機能追加(後方互換性あり)
- PATCH: バグ修正や微細な変更
③スクリプトの実行
プロジェクト内で定義されたタスク(スクリプト)を簡単に実行できます。
package.json
の scripts
セクションにスクリプトを定義します。
"scripts": {
"start": "node server.js",
"build": "webpack --mode production",
"test": "jest"
}
上記の設定の場合、
npm run start
をコマンド入力すると "start"
に定義されたスクリプトが実行されます。
JSの主なパッケージマネージャー
それではJSの主なパッケージマネージャーをみていきましょう。
①npm (Node Package Manager)
Node,jsのデフォルトパッケージマネージャー。
Node.jsに内蔵されているため、追加インストールの必要がない。
②yarn (Yet Another Resource Negotiator)
Facebookによって開発されたパッケージマネージャー。
セキュリティ面においてnpmよりも安全性を保持。
並行してパッケージをインストールするため、npmよりも高速。
③pnpm (Performant npm)
効率的なディスク仕様と高速なインストールを行うパッケージマネージャー。
パッケージをディスク上にあるフォルダ内にまとめて配置され、
各プロジェクトからハードリンクが張られるためでぃくす容量を節約可能。
おわりに
今回でパッケージマネージャーがどのようなもので、
どのような動きをするのか知ることができました。
yarn
や npm
は使用したことがありますが、
pnpm
はまだないので実際に使用し、
速度等も計測してみたいなと思います。
それでは。
参考文献