フロントエンド - ビルド・ツール

yarn やーん

パッケージマネージャーnpmNode.js依存関係管理JavaScriptPlug'n'Play
yarnについて教えて

簡単に言うとこんな感じ!

yarnはJavaScriptのライブラリ(部品)を管理するツールだよ!「このプロジェクトにはこのライブラリのこのバージョンを使う」ってのを自動で整理してくれる。npm(エヌピーエム)という標準ツールの弱点を補うために作られた、ちょっと賢い版の管理ツールってこと!


yarnとは

yarnは、JavaScriptのプロジェクトで使う外部ライブラリ(パッケージ)を管理するためのパッケージマネージャーです。Webアプリやシステムを開発するとき、世界中の開発者が公開したコード部品を組み合わせて使うのが一般的ですが、その「どの部品をどのバージョン使うか」を管理するのがyarnの役割です。

2016年にFacebook(現Meta)がnpm(Node Package Manager)の課題を解決するために開発・公開しました。当時のnpmは、インストール速度が遅い・チーム内で環境の差異が出やすい・セキュリティが弱いといった問題を抱えていました。yarnはこれらを「ロックファイル」「並列ダウンロード」「キャッシュ活用」の3つのアプローチで解決し、大規模プロジェクトでも安定して使えるツールとして急速に普及しました。

現在はバージョン1系(Classic)とバージョン2/3/4系(Berry)の2系統が存在します。yarn Berryでは「Plug’n’Play(PnP)」という革新的な仕組みが導入され、従来のnode_modulesフォルダを使わない依存管理も選べるようになっています。


yarnの核心的な仕組み

基本的なコマンド対応表

操作yarnコマンドnpmコマンド
パッケージ追加yarn add パッケージ名npm install パッケージ名
開発用パッケージ追加yarn add -D パッケージ名npm install --save-dev パッケージ名
全パッケージをインストールyarn installnpm install
パッケージ削除yarn remove パッケージ名npm uninstall パッケージ名
スクリプト実行yarn スクリプト名npm run スクリプト名
グローバルインストールyarn global add パッケージ名npm install -g パッケージ名

yarnの3つの強み

特徴内容
ロックファイル(yarn.lock)「このバージョンで動いた」という状態を記録。チーム全員・本番環境でも同じ構成を再現できる
並列ダウンロード複数のパッケージを同時に取得するので、npmより高速にインストールできる
オフラインキャッシュ一度取得したパッケージをローカルに保存。ネット接続なしでも再インストール可能

サブトピック1: 覚え方

「yarn=毛糸」 と覚えよう。糸(ライブラリ)をきれいに束ねてプロジェクトを編み上げるイメージ!ロックファイルは「この毛玉(バージョン)でこの模様(動作)ができた」というレシピメモだよ。

サブトピック2: yarn.lockファイルの役割

# yarn.lock の例(自動生成されるファイル)

react@^18.2.0:
  version "18.2.0"
  resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz"
  integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==
  dependencies:
    loose-envify "^1.1.0"

このファイルがあることで、「Aさんのパソコン」「Bさんのパソコン」「本番サーバー」が全員まったく同じバージョンのライブラリを使えるようになります。必ずGit等でチームと共有するのが鉄則です。


歴史と背景

  • 2010年 — npmがNode.jsの標準パッケージマネージャーとして登場。当初は個人・小規模向けで十分だった
  • 2015年頃 — FacebookなどのメガIT企業がJavaScriptを大規模利用し始め、npmの「インストールが遅い」「環境差異が出る」問題が顕在化
  • 2016年10月 — FacebookがGoogleやExponentと共同でyarn v1を公開。ロックファイルと並列ダウンロードで一気に普及
  • 2018年 — npmもv5でロックファイル(package-lock.json)を導入。両者の機能差が縮まり始める
  • 2020年yarn v2(Berry) リリース。Plug’n’Play・Zero-Installsなど大幅に設計を刷新。ただし破壊的変更が多く移行は段階的に
  • 2022〜現在 — yarn v3/v4がリリース。npmも大幅改善され、pnpmという第3の選択肢も台頭。3つどもえの競争状態に

yarn / npm / pnpm の比較

3大パッケージマネージャーの特徴を整理します。

パッケージマネージャー比較 yarn 🚀 高速インストール 🔒 yarn.lock 📦 オフラインキャッシュ ⚡ Workspaces対応 v1 Classic / v2+ Berry npm 🟢 Node.js標準搭載 🔒 package-lock.json 🌐 最大のレジストリ 📖 ドキュメント豊富 v9〜 大幅改善済み pnpm 💾 ディスク節約(共有) 🔒 pnpm-lock.yaml 🏎️ 最速クラス 🔗 厳格な依存解決 近年急速に普及中 ※ どれを選んでもnpmレジストリのパッケージが使える

Workspaces(モノレポ)への対応

大規模なプロジェクトでは「モノレポ(ひとつのリポジトリに複数のアプリを入れる構成)」が使われます。yarnはWorkspaces機能で複数パッケージをまとめて管理できます。

my-project/
├── package.json        ← ルートの管理ファイル
├── yarn.lock
├── apps/
│   ├── web/            ← Webアプリ
│   │   └── package.json
│   └── admin/          ← 管理画面
│       └── package.json
└── packages/
    └── shared/         ← 共通コンポーネント
        └── package.json

yarn install を一度実行するだけで、すべてのアプリの依存関係をまとめてインストールできます。


関連する規格・RFC

※ yarnはOSSツールであり、IETF RFC・ISO等の標準規格ではなく、パッケージレジストリの仕様が関連します。

規格・仕様内容
CommonJS仕様package.jsonのフォーマット基礎仕様

関連用語

  • npm — Node.js標準のパッケージマネージャー。yarnの比較対象として最も重要
  • pnpm — ディスク効率と速度を重視した第3のパッケージマネージャー
  • Node.js — JavaScriptをサーバー・CLIで動かす実行環境。yarnはここで動作する
  • package.json — プロジェクトの依存関係・スクリプトを記述する設定ファイル
  • Webpack — JavaScriptのモジュールをまとめるバンドラー。パッケージマネージャーと組み合わせて使う
  • Vite — 高速なフロントエンドビルドツール。yarnと組み合わせてよく使われる
  • モノレポ — 複数アプリを1つのリポジトリで管理する開発スタイル。yarn Workspacesと相性が良い