yarn:本質、React Nativeのための代替パッケージマネージャー

著者: IT Sectr 公開日: 2026-02-13 読了時間: 10 分

yarn — Node.js向けの代替パッケージマネージャーで、2016年にFacebookがExponent、Google、Tildeと共同で作成しました。yarnはnpm 2-4の速度とセキュリティの問題を解決しました:並列インストール、厳格なロックファイル、オフラインキャッシュ。現在もyarnはReact Native、Expo、モノレポで人気を保っています。詳細はyarn Documentationをご覧ください。

重要ポイント

  • yarn — npmの問題を解決するために2016年にFacebookが作成したNode.js向けパッケージマネージャー
  • yarn.lock — すべての依存関係の正確なバージョンを記録するロックファイル、自動生成
  • yarn install — 重複なしにグローバルキャッシュを使用した並列パッケージインストール
  • yarn workspaces — 共有node_modulesフォルダーでモノレポを管理するメカニズム
  • Plug'n'Play — グローバルキャッシュのZIPアーカイブにパッケージを保存するnode_modulesの代替

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

yarn(Yet Another Resource Negotiator)は2016年10月に、npm 2-4の問題(インストールの遅さ、ロックファイルの欠如、安全でないパッケージ)への対応としてFacebookによってリリースされました。yarnは並列パッケージダウンロード、決定論的なyarn.lock、チェックサムによる整合性検証を導入しました。2020年にyarnはPlug'n'PlayとTypeScript-firstアプローチを備えたバージョン2(Berry)に移行しました。

yarnのアーキテクチャはnpmとは異なります:yarnはパッケージを並列でダウンロードし(npmはバージョン5以前は順次)、各パッケージを~/.cache/yarnにプロジェクト間で重複なくキャッシュし、チェックサムで整合性を検証します。yarnは常にインストールごとにyarn.lockを生成しますが、npmのpackage-lock.jsonはバージョン5でようやく登場しました。

yarn 2(Berry、2020)以降、yarnは完全にTypeScriptで書き直され、Plug'n'Play、workspaces、モノレポ用のconstraints、さまざまなソース(npm、git、tarball)からのインストールプロトコルをサポートしています。yarn 3+(2022)はZero-Installsを追加しました — ネットワークなしで即座にインストールできるよう、リポジトリにキャッシュを保存します。

yarnが依存関係のインストールを管理する方法

yarn install — package.jsonとyarn.lockを読み取り、依存関係をインストールするメインコマンドです。yarnはパッケージを並列でダウンロードするため、npm 4以前と比較してインストールが2〜3倍高速化されます。yarnはオフラインキャッシュを使用します:パッケージが別のプロジェクトですでにダウンロードされている場合、再ダウンロードではなくキャッシュからコピーされます。

bash
# yarnの基本コマンド
$ yarn install
$ yarn add react-native-webview
$ yarn add --dev typescript
$ yarn global add expo-cli
# 対話型アップデート
$ yarn upgrade-interactive
# 重複パッケージの削除
$ yarn dedupe

yarn add — 新しいパッケージをインストールするコマンドです。yarn add <package>はdependenciesに追加し、yarn add --devはdevDependenciesに追加します。yarnは自動的にyarn.lockを更新します。yarn upgradeはセマンティック範囲内でパッケージを最新バージョンに更新します。yarn upgrade-interactive — 更新する特定のパッケージを選択するインタラクティブモードです。

yarn cache — ~/.cache/yarn/v6にあるグローバルキャッシュです。各パッケージはチェックサムとともにZIPアーカイブに一度だけ保存されます。yarnキャッシュは自動的にクリーンアップされますが、手動でyarn cache cleanを実行することもできます。yarn cache dirはキャッシュパスを表示します。yarn cache list — キャッシュされたパッケージのリストです。

yarn.lock:目的とファイル構造

yarn.lock — すべての依存関係とその推移的パッケージの正確なバージョンを記録するロックファイルです。package-lock.json(JSON)とは異なり、yarn.lockはフラット構造のYAML形式を使用します。yarn.lockはyarn installまたはyarn add時に常に自動生成されます — これにより、すべての開発者とCIサーバーが同一のパッケージセットを取得することが保証されます。

yaml
# yarn.lock構造の例
react@^18.3.0:
  version: "18.3.1"
  resolution: "react@npm:18.3.1"
  dependencies:
    loose-envify: "^1.1.0"
  checksum: "abc123def456..."

react-native@^0.76.0:
  version: "0.76.3"
  resolution: "react-native@npm:0.76.3"
  dependencies:
    react: "18.3.1"
  checksum: "def789ghi012..."

yarn.lockのフィールド: version — パッケージの正確なバージョン、resolution — ソースとバージョン、dependencies — その依存関係、checksum — 検証用のチェックサム。yarn.lockはリポジトリにコミットされ、依存関係の唯一の信頼できる情報源です。yarn.lockとpackage.jsonに不一致がある場合、yarnは警告を発します。

Yarn constraints — yarn.lock内の依存関係バージョンをチェックして強制するモノレポ用のルールシステムです。制約はYarn Constraint Languageを使用してyarn.constraints.jsファイルに記述されます。Constraintsを使用すると、モノレポ内のすべてのパッケージが同じバージョンのReactやTypeScriptを使用することを保証できます。

React Nativeエコシステムにおけるyarn

React Nativeは伝統的にyarnと密接に関連しています。Expo CLI、React Native CLI、Create React Native Appは当初yarnを使用していました。React Nativeプロジェクトでは、yarn.lockがネイティブモジュールのバージョンを固定し、CocoaPods(iOS)やGradle(Android)による安定したコンパイルに不可欠です。共有コードを使用するReact Nativeモノレポではyarn workspacesが人気です。

React Nativeモノレポでのyarn workspaces: ルートのpackage.jsonに"workspaces": ["packages/*", "mobile"]を含めます。yarn installはルートレベルに単一のnode_modulesフォルダーを作成します。パッケージはシンボリックリンクを介して相互に参照します。ネイティブ依存関係を変更した後、CocoaPodsを更新するためにnpx pod-installが実行されます。

json
{
  "private": true,
  "workspaces": [
    "packages/*",
    "apps/mobile",
    "apps/web"
  ],
  "scripts": {
    "mobile:start": "yarn workspace mobile start",
    "mobile:ios": "yarn workspace mobile ios",
    "lint": "yarn workspaces run lint"
  }
}

Expo SDK 50+npx create-expo-appで作成された新しいプロジェクトにyarnを公式に推奨しています。yarnはExpoモジュールとの互換性を保証し、正しいyarn.lockを自動生成します。yarn 3+のZero-Installsはキャッシュをリポジトリにコミットすることを可能にし、開発者はgit clone後に依存関係をインストールすることなくすぐに使用できる環境を得られます。

yarnとnpm:比較分析

npmyarnは同じ問題を解決します — Node.jsパッケージの管理です。npm 5-7のリリースにより、機能の差は実質的になくなりました。npm 7+はworkspaces、npm ci(yarn install --frozen-lockfileに相当)、並列インストールを含みます。ただし、yarnは特定のシナリオで利点を維持しています:Plug'n'Play、Zero-Installs、成熟したconstraintsシステムです。

特徴npmyarn
作成年20102016
ロックファイルpackage-lock.json(JSON)yarn.lock(YAML)
インストール順次(npm 5+)並列
Plug'n'Playいいえはい(yarn 2+)
Workspacesはい(npm 7+)はい
Zero-Installsいいえはい(yarn 3+)
キャッシュフラット化されたnode_modulesグローバル~/.cache/yarn
実装言語JavaScriptTypeScript(yarn 2+)

yarnを選ぶべき時: Expo SDK 50+のプロジェクト、大規模モノレポ(100+パッケージ)、Zero-Installsを重視するチーム、すでにyarnを使用しているレガシープロジェクト。npmを選ぶべき時: 標準的なcreate-react-appプロジェクト、Next.js、Vite、特定のパッケージマネージャー要件がないチーム。

yarn 4(2024)はパフォーマンスの向上、ネイティブESMサポート、大規模モノレポの最適化を導入しました。npm 10+はセキュリティと互換性に焦点を当てて進化を続けています。今日のnpmyarnの選択は、チームの好みと特定のプロジェクト要件の問題であり、一方のツールの技術的優位性ではありません。

よくある質問

yarnとnpmの主な違いは何ですか?

yarnは当初、並列パッケージインストールと積極的なキャッシュにより速度でnpmを上回りました。yarn.lockはインストールごとに自動生成されますが、package-lock.jsonはnpm 5で登場しました。yarnはインストール時間ゼロのnode_modulesの代替であるPlug'n'Playを提供します。npm 7+では、基本的なシナリオでの速度と機能の差は最小限です。

モノレポでyarn workspacesはどのように機能しますか?

yarn workspaces — 単一のリポジトリで複数のパッケージを管理するメカニズムです。ルートのpackage.jsonにフィールド"workspaces": ["packages/*"]を含めます。yarn installは共有依存関係をトップレベルの単一のnode_modulesにインストールし、ローカルパッケージ間にシンボリックリンクを作成し、重複を回避します。すべてのworkspaceのコマンドはyarn workspaces run <script>で実行されます。

yarn Plug'n'Playとは何ですか?なぜ必要ですか?

Plug'n'Play(PnP)— yarn 2で導入された従来のnode_modulesフォルダーの代替です。ファイルをコピーする代わりに、yarnは.pnp.cjsに依存関係マップを作成し、パッケージをグローバルキャッシュのZIPアーカイブに保存します。PnPの利点: 数秒でのインストール、Node.jsの起動時間が30〜50%短縮、node_modulesや関連するパスの問題がありません。

npmからyarnにプロジェクトを移行するには?

yarnをグローバルにインストール:npm install -g yarn。プロジェクトのルートでyarn importを実行すると、yarnがpackage-lock.jsonを読み取り、同等のyarn.lockを作成します。node_modulesとpackage-lock.jsonを削除し、yarn installを実行して確認します。npmをyarnに置き換えてCI/CD設定を更新します。yarnはpackage.jsonと完全に互換性があります。

yarnでバージョンロックエラーを修正するには?

「Integrity check failed」エラーは、yarn.lockとnode_modulesの同期が取れていない場合に発生します。解決策:node_modules、yarn.lockを削除し、キャッシュをクリアして(yarn cache clean)、yarn installを再度実行します。バージョンの競合には、yarn upgrade-interactiveを使用して特定の更新を選択します。yarn dedupeで重複パッケージを削除します。

まとめ

  • yarn — 2016年にFacebookが作成した代替Node.jsパッケージマネージャー
  • yarn.lock — YAML形式ですべての依存関係の正確なバージョンを記録するロックファイル
  • yarn install — グローバルオフラインキャッシュを使用した並列パッケージインストール
  • Plug'n'Play — node_modulesフォルダーなしの革新的なyarn 2+メカニズム
  • yarn workspaces — 単一のnode_modulesによるモノレポ管理
  • React Nativeでのyarn — ExpoおよびReact Nativeプロジェクトの標準パッケージマネージャー
  • Zero-Installs — パッケージをダウンロードせずに即時インストールするためのリポジトリへのキャッシュコミット

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください