0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【僕なりのパッケージマネージャー超入門 】全体像と基礎をざっくり整理してみた

0
Last updated at Posted at 2025-07-26

はじめに

jsフレームワークの勉強をしている中で、パッケージマネージャーについて調べることが多かったので、ここでまとめてみます!

この記事では、パッケージマネージャーについての概要と、どんな種類があるのかを説明します!

パッケージマネージャーとは?

パッケージマネージャーは、ソフトウェアやライブラリ(パッケージ)を簡単に「インストール・更新・削除」できるツールのことです!

フロントエンド開発では、例えば「Reactを使いたい」と思ったときに、パッケージマネージャーを使えば簡単に関連パッケージをインストールできます。

npm install react

この1コマンドで、React本体や依存ライブラリを自動で取得、管理してくれる超便利ツールです!

ソフトウェアとライブラリの違いって?
項目 ソフトウェア(アプリ) ライブラリ
目的 ユーザーが直接使うため 他のソフトから呼び出される部品
使い方 実行する(例:Chrome, VS Code) インポートして使う(React, Lodash)
単独で動作? 動作する 単独では動作しない

たとえば…
ソフトウェア:Figma、Slack
ライブラリ:React(UIを作る部品群)、Axios(HTTP通信ライブラリ)

パッケージマネージャーを使わなければどうなる?

手動でライブラリ管理しなきゃいけない…

  • 自分でGitHubからZIPをダウンロード
  • 解凍して libs/ フォルダに置く
  • 依存ライブラリもまた手動で探す
  • バージョン更新も全部手動…

デメリットだらけ!

  • 依存関係の崩壊 (AがBに依存、BがCに依存...)
  • 更新ミスでバグ発生
  • チーム開発で環境差異が出る(誰かのPCでは動かないとか)

パッケージマネージャーを使えば…

  • 必要なものだけを package.json に書いておけばOK!
  • ワンコマンドで全部そろうし、更新も管理できる!

では実際、こうした管理は「どこにどう記録されるのか?」を見てみましょう!

依存や設定はどこに記録される?

package.jsonとは?

パッケージマネージャーの「設計図」みたいなもので、プロジェクトで必要なパッケージ・バージョン・実行スクリプトなどを定義するファイル。

{
  "name": "my-project",
  "version": "1.0.0",
  "scripts": {
    "dev": "vite",
    "build": "vite build"
  },
  "dependencies": {
    "react": "^18.2.0"
  },
  "devDependencies": {
    "eslint": "^8.50.0"
  }
}
項目 意味 使われるタイミング(いつ) 目的(なんのために)
name プロジェクト名(npm公開する場合は一意) プロジェクトを新しく作るとき、npmに公開するとき 友達や世界中の人に自分のアプリを配るときに「どのアプリか」区別するため
version プロジェクトのバージョン アプリをアップデートして公開するとき 「どのバージョンか」分かるようにして、古いバージョンと区別するため
scripts コマンドを短縮して定義できる(例: npm run dev) 開発中や本番公開前にコマンドを実行するとき 「npm run dev」みたいに、長いコマンドを短く簡単に実行できるようにするため
dependencies 本番で必要なパッケージ(Reactなど) アプリを動かすためにnpm installしたとき、本番サーバーで動かすとき アプリがちゃんと動くように、必要な部品(ライブラリ)を自動で入れるため
devDependencies 開発時だけ使うパッケージ(ESLint, Viteなど) 自分のパソコンで開発するとき、npm installしたとき コードチェックやビルドなど、開発を便利にする道具を入れるため(本番には不要)

ロックファイルとは?

npmではpackage-lock.json、Yarnではyarn.lockなどがある。
package.json はあくまで 希望(バージョン指定の範囲) であって、「絶対このバージョン」とは限らない。

"react": "^18.2.0"

これは「18.2.0以上のマイナーバージョン(例: 18.2.3)」までOKという意味。

でもこれだと…

環境 バージョン
自分の環境 18.2.0
同僚の環境 18.2.3
CIの環境 18.3.0(互換性が壊れてた!)

みたいに環境差が起きる可能性がある。
それを防ぐために登場するのが ロックファイル!
(個人的に鍵のロックをかけるみたいな意味で考えると理解しやすいです!)

ロックファイルがやってること

  • 実際に install された正確なバージョンを記録
  • 依存関係の依存(=ツリーの下の方)も全記録
  • チームで同じ lock ファイルを使えば、全く同じ node_modules が再現できる

package.json / lockファイル / node_modules の関係図

プロジェクト/
├── package.json       ← インストールしたい「希望」
├── package-lock.json  ← 実際に入った「確定記録」
└── node_modules/      ← パッケージの「中身そのもの」

JavaScript系 主なパッケージマネージャー

1. npm (Node Package Manager)

  • Node.js の標準パッケージマネージャー
  • 利用者数が最も多い
  • package-lock.json で依存を固定
npm install lodash

2. Yarn

Yarn v1(Classic)

  • node_modules/ フォルダを生成する
  • .yarnrc や yarn.lock を使う
  • ほぼ npm と似た動作(速い&キャッシュが優秀)
  • 今でも多くのプロジェクトが使ってる安定版
yarn add lodash

Yarn v2以降(Berry系)

  • 2020年以降登場の次世代Yarn
  • Plug'n'Play(PnP)という独自の仕組みがある
  • 少し学習コストが高めだが、高速かつ強力

3. pnpm

  • 次世代マネージャー
  • 依存を効率的に管理(重複を避ける)
  • 最速クラス
  • pnpm-lock.yaml で管理
pnpm add lodash

BunやDenoのような“全部入りランタイム”もある!
最近は、ランタイム+パッケージ管理+ビルド/テストが一体化したオールインワンツールも登場しています。

Bun:爆速&オールインワンの、Node.js互換の新しいランタイム。

Deno:Node.jsの作者が再設計したランタイム。依存はURLで読み込み、node_modules を使わずに実行。

※ランタイム=JavaScriptをサーバー側で実行するためのエンジン・環境のこと

選び方のポイント

パッケージマネージャー 速さ ディスク効率 安定性 特徴
npm 標準的で最も広く使われる。Node.jsに最初から入ってる。
Yarn v1 npmより高速&安定を目指して作られた。キャッシュに強く、今でも多くのプロジェクトで使われる。
pnpm 重複のない依存管理が特徴。最速クラスで、ディスク節約にも優れる。
Yarn v2以降 △〜○ node_modulesを使わない独自方式(PnP)。カスタマイズ性が高い反面、やや学習コストあり。

参考リンク


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?