T-CREATOR

Yarn コマンド チートシート:add/up/dedup/dlx/workspaces 早見表

Yarn コマンド チートシート:add/up/dedup/dlx/workspaces 早見表

JavaScript や TypeScript のプロジェクト開発において、Yarn は高速で信頼性の高いパッケージマネージャーとして広く使われています。しかし、コマンドやオプションが豊富で「どのコマンドをどう使えばいいのか」迷ってしまうこともあるでしょう。

本記事では、Yarn の中でも特に使用頻度が高い addupdedupedlxworkspaces の 5 つのコマンドに焦点を当てて、早見表形式で整理します。実務ですぐに使える具体例とともに解説しますので、開発効率を高めるヒントとしてお役立てください。

コマンド早見表

#コマンド主な用途代表的なオプション使用例
1yarn addパッケージのインストール-D(開発依存)、-E(完全一致バージョン)yarn add react
2yarn upパッケージの更新-i(対話モード)、-C(範囲指定)yarn up react
3yarn dedupe重複パッケージの削除-s(戦略指定)、--check(確認のみ)yarn dedupe
4yarn dlx一時的なパッケージ実行-p(パッケージ追加指定)、-q(静穏モード)yarn dlx create-react-app my-app
5yarn workspacesモノレポ管理foreach(一括実行)、--all(全ワークスペース)yarn workspaces foreach run build

オプション詳細早見表

yarn add オプション

#オプション効果使用例
1-D, --devdevDependencies に追加yarn add -D typescript
2-P, --peerpeerDependencies に追加yarn add -P react
3-O, --optionaloptionalDependencies に追加yarn add -O fsevents
4-E, --exact完全一致バージョンで固定yarn add -E react@18.2.0
5-T, --tildeマイナーバージョン範囲で固定yarn add -T react
6-C, --caretメジャーバージョン範囲で固定yarn add -C react

yarn up オプション

#オプション効果使用例
1-i, --interactive対話的に更新対象を選択yarn up -i
2-E, --exact完全一致バージョンに更新yarn up -E react
3-T, --tildeマイナーバージョン範囲に更新yarn up -T react
4-C, --caretメジャーバージョン範囲に更新yarn up -C react

yarn dedupe オプション

#オプション効果使用例
1--check重複をチェックのみ(実行しない)yarn dedupe --check
2-s, --strategy重複解消の戦略を指定yarn dedupe -s highest
3--mode更新モードを指定yarn dedupe --mode=update-lockfile

yarn workspaces オプション

#オプション効果使用例
1foreach各ワークスペースでコマンド実行yarn workspaces foreach run test
2--allすべてのワークスペース対象yarn workspaces foreach --all run build
3--parallel並列実行yarn workspaces foreach --parallel run build
4--topological依存順に実行yarn workspaces foreach --topological run build
5--include特定ワークスペースのみ対象yarn workspaces foreach --include packages​/​* run test

背景

パッケージ管理の重要性

モダンな Web 開発では、数多くの外部ライブラリやフレームワークを組み合わせてアプリケーションを構築します。これらの依存関係を適切に管理することは、プロジェクトの安定性や保守性に直結する重要な作業です。

Yarn は npm の代替として登場し、以下の特徴で支持を集めています。

  • 高速なインストール: 並列処理とキャッシュ機構により、npm よりも高速
  • 決定論的な依存解決: yarn.lock により、チーム全員が同じバージョンを使用
  • モノレポ対応: Workspaces 機能により、複数パッケージの統合管理が可能

Yarn のバージョンと進化

Yarn には Classic(v1)と Berry(v2 以降)の 2 つの系統があります。本記事では Yarn Berry(v3・v4)を前提に解説しますが、多くのコマンドは v1 でも使用できます。

以下の図は、Yarn の進化とバージョンの関係を示しています。

mermaidflowchart LR
  v1["Yarn Classic<br/>(v1.x)"] -->|進化| v2["Yarn Berry<br/>(v2.x)"]
  v2 -->|改善| v3["Yarn 3.x<br/>(安定版)"]
  v3 -->|最新| v4["Yarn 4.x<br/>(最新版)"]

  v1 -.->|互換性あり| cmd["基本コマンド<br/>(add/install)"]
  v2 -.->|新機能| adv["高度な機能<br/>(dlx/workspaces)"]

図で理解できる要点:

  • Yarn は v1 から v4 へと進化し、機能が拡張されてきました
  • 基本コマンドは互換性を保ちながら、新機能が追加されています
  • v2 以降(Berry)で dlx や workspaces などの高度な機能が強化されました

課題

よくある Yarn 運用の悩み

開発現場では、以下のような課題に直面することがあります。

パッケージ追加時の迷い

新しいパッケージを追加する際、「どのオプションを使えばいいのか」「バージョン指定はどうすべきか」といった疑問が生じます。特に、開発依存なのか本番依存なのか、バージョン範囲はどう設定するかなど、判断に迷うポイントが多くあります。

更新作業の複雑さ

依存パッケージを更新する際、「安全に最新版に上げたい」「一部だけ更新したい」といったニーズに対して、適切なコマンドやオプションを選ぶ必要があります。

重複パッケージによる肥大化

プロジェクトが大きくなると、同じパッケージの異なるバージョンが複数インストールされ、node_modules が肥大化することがあります。この重複を効率的に解消する方法が必要です。

一時的なツール実行の手間

プロジェクト初期化や一度きりのコード生成など、グローバルインストールせずにツールを実行したい場面があります。

モノレポ管理の難しさ

複数のパッケージを一つのリポジトリで管理するモノレポ構成では、各パッケージへの一括操作や依存関係の整理が課題になります。

以下の図は、これらの課題がプロジェクトのどの段階で発生するかを示しています。

mermaidflowchart TD
  start["プロジェクト開始"] --> add_phase["パッケージ追加<br/>フェーズ"]
  add_phase --> maintain["保守・運用<br/>フェーズ"]
  maintain --> scale["スケール<br/>フェーズ"]

  add_phase -.->|課題| q1["オプション選択<br/>の迷い"]
  maintain -.->|課題| q2["更新・重複管理<br/>の複雑さ"]
  scale -.->|課題| q3["モノレポ管理<br/>の難しさ"]

  q1 --> solution["Yarn コマンド<br/>チートシート"]
  q2 --> solution
  q3 --> solution

図で理解できる要点:

  • プロジェクトの各フェーズで異なる Yarn �� マンドが必要になります
  • 課題は「追加」「保守」「スケール」の 3 段階に分類できます
  • チートシートを活用することで、各フェーズの課題を解決できます

解決策

頻出コマンドの体系的理解

Yarn の主要コマンドを体系的に理解し、場面ごとに適切なコマンドとオプションを選択できるようにすることが解決策です。本記事では、以下の 5 つのコマンドを中心に解説します。

1. yarn add - パッケージのインストール

新しい依存パッケージをプロジェクトに追加するコマンドです。開発依存、本番依存、バージョン固定など、目的に応じたオプションを選択できます。

2. yarn up - パッケージの更新

既存のパッケージを最新版または指定バージョンに更新します。対話的な更新モードや、範囲指定による柔軟な更新が可能です。

3. yarn dedupe - 重複パッケージの削除

同じパッケージの異なるバージョンが複数インストールされている場合、それらを統合して node_modules のサイズを削減します。

4. yarn dlx - 一時的なパッケージ実行

グローバルインストールせずに、npm パッケージを一時的にダウンロードして実行します。create-react-app などのジェネレーターツールで便利です。

5. yarn workspaces - モノレポ管理

複数のパッケージを一つのリポジトリで管理するモノレポ構成をサポートします。各ワークスペースへの一括コマンド実行や依存関係の最適化が行えます。

以下の図は、これらのコマンドが解決する課題と使用場面の関係を示しています。

mermaidflowchart TB
  subgraph commands["Yarn コマンド"]
    add["yarn add<br/>(追加)"]
    up["yarn up<br/>(更新)"]
    dedupe["yarn dedupe<br/>(最適化)"]
    dlx["yarn dlx<br/>(一時実行)"]
    workspaces["yarn workspaces<br/>(モノレポ)"]
  end

  subgraph scenarios["使用場面"]
    install_new["新規パッケージ<br/>導入"]
    update_deps["依存関係<br/>更新"]
    optimize["サイズ<br/>最適化"]
    temp_tool["ツール<br/>一時使用"]
    monorepo["複数パッケージ<br/>管理"]
  end

  add --> install_new
  up --> update_deps
  dedupe --> optimize
  dlx --> temp_tool
  workspaces --> monorepo

図で理解できる要点:

  • 各コマンドは特定の使用場面に最適化されています
  • コマンドを使い分けることで、効率的なパッケージ管理が実現できます
  • 場面に応じた適切なコマンド選択が重要です

オプションの使い分け方針

各コマンドには多様なオプションが用意されており、状況に応じて使い分けることで、より細やかな制御が可能になります。

バージョン固定オプション

-E(完全一致)、-T(チルダ範囲)、-C(キャレット範囲)により、依存関係の更新範囲を制御します。安定性を重視する場合は -E、セキュリティ更新を受け入れる場合は -C を選択します。

依存関係タイプオプション

-D(開発依存)、-P(ピア依存)、-O(オプショナル依存)により、パッケージの役割を明確化します。ビルドツールやテストライブラリは -D、フレームワークの前提ライブラリは -P を使用します。

実行モードオプション

-i(対話モード)、--parallel(並列実行)、--topological(依存順実行)により、コマンドの実行方法を制御します。

具体例

yarn add - パッケージのインストール

yarn add は新しいパッケージをプロジェクトに追加する最も基本的なコマンドです。ここでは、実務でよく使うパターンを紹介します。

基本的な使い方

最もシンプルな形は、パッケージ名だけを指定する方法です。

typescriptyarn add react

このコマンドを実行すると、以下の処理が行われます。

  • React の最新安定版が dependencies に追加されます
  • package.json にパッケージ情報が記録されます
  • yarn.lock に決定論的なバージョン情報が記録されます
  • node_modules にパッケージがインストールされます

開発依存として追加

TypeScript やテストライブラリなど、開発時のみ必要なパッケージは -D オプションを使います。

typescriptyarn add -D typescript

開発依存パッケージは devDependencies に記録され、本番ビルドには含まれません。これにより、本番環境のバンドルサイズを削減できます。

以下のパッケージは開発依存として追加するのが一般的です。

  • TypeScript (typescript)
  • テストフレームワーク (jest, vitest)
  • リンター (eslint, prettier)
  • ビルドツール (webpack, vite)

バージョンを完全固定

特定のバージョンで固定したい場合は -E オプションを使用します。

typescriptyarn add -E react@18.2.0

package.json には ^~ などの範囲指定記号なしで、完全一致のバージョンが記録されます。

json{
  "dependencies": {
    "react": "18.2.0"
  }
}

完全固定が有効な場面は以下の通りです。

  • 本番環境での安定性重視: 予期しない更新を防ぐ
  • 再現性の確保: CI/CD で常に同じバージョンを使用
  • 既知の不具合回避: 特定バージョンの問題を避ける

複数パッケージの同時追加

スペース区切りで複数のパッケージを一度に追加できます。

typescriptyarn add react react-dom next

これにより、3 つのパッケージが一度にインストールされ、依存関係の解決も同時に行われます。プロジェクト初期化時に便利です。

Git リポジトリからのインストール

GitHub など Git リポジトリから直接インストールすることも可能です。

bashyarn add https://github.com/user/repo.git

また、特定のブランチやコミットを指定することもできます。

bashyarn add https://github.com/user/repo.git#branch-name
yarn add https://github.com/user/repo.git#commit-hash

このパターンは、公開前のパッケージや、フォークした独自版を使用する際に活用できます。

yarn up - パッケージの更新

yarn up は既存のパッケージを更新するコマンドです。Yarn v2 以降で導入され、v1 の yarn upgrade に相当します。

基本的な更新

特定のパッケージを最新版に更新します。

bashyarn up react

このコマンドは、package.json で許可されている範囲内で最新版に更新します。例えば "react": "^18.0.0" と記載されていれば、18.x.x の最新版に更新されます。

すべてのパッケージを更新

パッケージ名を省略すると、すべての依存関係が更新されます。

bashyarn up

ただし、メジャーバージョンアップは自動では行われません。package.json の範囲指定に従った更新のみが実行されます。

対話的な更新

-i オプションを使うと、対話的に更新対象を選択できます。

bashyarn up -i

実行すると、更新可能なパッケージの一覧が表示され、個別に選択できます。大規模プロジェクトで一部のパッケージのみ更新したい場合に便利です。

bash? Pick the packages you want to upgrade.
  ◯ react: 18.2.0 → 18.3.0
  ◉ typescript: 5.0.0 → 5.4.0
  ◯ next: 13.0.0 → 14.1.0

バージョン範囲を指定して更新

-C オプションでキャレット範囲(メジャーバージョン固定)での更新が可能です。

bashyarn up -C react

これにより、package.json のバージョン指定が ^18.3.0 のような形式に更新され、次回以降は 18.x.x の範囲で自動更新されます。

同様に、-T オプションでチルダ範囲(マイナーバージョン固定)、-E オプションで完全一致指定もできます。

パターンマッチによる更新

ワイルドカードを使って、複数のパッケージを一括更新できます。

bashyarn up '@types/*'

このコマンドは、@types​/​ で始まるすべての TypeScript 型定義パッケージを更新します。モノレポや関連パッケージをまとめて更新する際に有効です。

yarn dedupe - 重複パッケージの削除

yarn dedupe は、同じパッケージの異なるバージョンが複数インストールされている状態を解消し、依存関係を最適化するコマンドです。

重複が発生する仕組み

プロジェクトが成長すると、異なるパッケージが同じ依存関係の異なるバージョンを要求することがあります。

mermaidflowchart TB
  app["アプリケーション"] --> pkgA["パッケージ A"]
  app --> pkgB["パッケージ B"]

  pkgA -.->|要求| lodash1["lodash@4.17.20"]
  pkgB -.->|要求| lodash2["lodash@4.17.21"]

  lodash1 --> node1["node_modules<br/>(重複発生)"]
  lodash2 --> node1

図で理解できる要点:

  • 複数のパッケージが同じライブラリの異なるバージョンを要求します
  • 結果として、node_modules に重複したパッケージがインストールされます
  • yarn dedupe により、互換性のある範囲で統一できます

基本的な使い方

引数なしで実行すると、すべての重複を自動解消します。

bashyarn dedupe

実行後、yarn.lock が更新され、可能な限り単一バージョンに統一されます。これにより、node_modules のサイズが削減され、インストール速度も向上します。

確認のみ実行

実際に変更を加えず、重複の有無だけを確認したい場合は --check オプションを使います。

bashyarn dedupe --check

CI/CD パイプラインで重複チェックを自動化する際に便利です。重複が検出された場合、終了コードが 0 以外になるため、テストを失敗させることができます。

戦略を指定して実行

-s オプションで重複解消の戦略を指定できます。

bashyarn dedupe -s highest

主な戦略は以下の通りです。

  • highest: 最も高いバージョンに統一
  • lowest: 最も低いバージョンに統一(互換性重視)

新機能や改善を取り入れたい場合は highest、安定性を重視する場合は lowest を選択します。

特定パッケージのみ dedupe

パッケージ名を指定して、特定のパッケージのみ重複解消することも可能です。

bashyarn dedupe lodash

大規模プロジェクトで、影響範囲を限定したい場合に活用できます。

yarn dlx - 一時的なパッケージ実行

yarn dlx は、パッケージをグローバルにインストールせず、一時的にダウンロードして実行するコマンドです。npm の npx に相当します。

基本的な使い方

最もシンプルな形は、実行したいコマンドを直接指定する方法です。

bashyarn dlx create-react-app my-app

このコマンドは以下の処理を行います。

  1. create-react-app パッケージを一時的にダウンロード
  2. コマンドを実行(my-app ディレクトリに React アプリを生成)
  3. 実行後、一時ファイルを削除

グローバル環境を汚さず、常に最新版を使用できるメリットがあります。

TypeScript プロジェクトの初期化

TypeScript プロジェクトを初期化する際にも便利です。

bashyarn dlx tsc --init

tsconfig.json が生成され、TypeScript コンパイラの設定が初期化されます。プロジェクトに typescript をインストールしていない状態でも実行できます。

コードフォーマッターの一時実行

Prettier などのフォーマッターを試したい場合にも活用できます。

bashyarn dlx prettier --write src/**/*.ts

プロジェクトに Prettier をインストールせず、一度だけフォーマットを実行したい場合に便利です。

複数パッケージを指定して実行

-p オプションで、追加のパッケージを指定できます。

bashyarn dlx -p typescript -p ts-node ts-node script.ts

このコマンドは、typescriptts-node の両方を一時的にインストールして、TypeScript スクリプトを実行します。

バージョンを指定して実行

特定のバージョンを使用したい場合、@バージョン 構文を使います。

bashyarn dlx create-next-app@13 my-next-app

これにより、Next.js 13 系の create-next-app が実行されます。古いバージョンでのプロジェクト生成や、バージョン別の動作確認に役立ちます。

yarn workspaces - モノレポ管理

yarn workspaces は、一つのリポジトリで複数のパッケージを管理するモノレポ構成を実現する機能です。

モノレポの基本構成

モノレポでは、以下のようなディレクトリ構成を取ることが一般的です。

plaintextmy-monorepo/
├── package.json          # ルート package.json
├── packages/
│   ├── app/              # アプリケーション
│   │   └── package.json
│   ├── components/       # 共通コンポーネント
│   │   └── package.json
│   └── utils/            # ユーティリティ
│       └── package.json
└── yarn.lock

ルートの package.json で workspaces を定義します。

json{
  "name": "my-monorepo",
  "private": true,
  "workspaces": ["packages/*"]
}

private: true は、ルートパッケージを npm に公開しないための設定です。

すべてのワークスペースでコマンド実行

foreach サブコマンドで、各ワークスペースに対してコマンドを実行できます。

bashyarn workspaces foreach run build

このコマンドは、packages​/​apppackages​/​componentspackages​/​utils それぞれで yarn run build を実行します。

並列実行でビルド時間を短縮

--parallel オプションで、並列実行が可能です。

bashyarn workspaces foreach --parallel run build

依存関係のないワークスペースは同時にビルドされ、全体の実行時間が短縮されます。

mermaidflowchart LR
  start["ビルド開始"] --> parallel1["app<br/>(並列)"]
  start --> parallel2["components<br/>(並列)"]
  start --> parallel3["utils<br/>(並列)"]

  parallel1 --> done["ビルド完了"]
  parallel2 --> done
  parallel3 --> done

図で理解できる要点:

  • --parallel オプションにより、独立したワークスペースは同時にビルドされます
  • ビルド時間が大幅に短縮され、開発効率が向上します
  • 依存関係があるパッケージは、依存先の完了を待ってから実行 �� れます

依存順にビルド

パッケージ間に依存関係がある場合、--topological オプションで依存順に実行します。

bashyarn workspaces foreach --topological run build

例えば、appcomponents に依存している場合、自動的に componentsapp の順でビルドされます。

特定のワークスペースのみ対象

--include オプションで、対象を絞り込めます。

bashyarn workspaces foreach --include 'packages/app' run test

packages​/​app のみでテストが実行されます。部分的な検証や開発時の高速化に有効です。

ワークスペース間の依存関係を追加

ワークスペース内のパッケージを相互に参照する場合、workspace: プロトコルを使います。

packages​/​app​/​package.json の例:

json{
  "name": "app",
  "dependencies": {
    "components": "workspace:*"
  }
}

workspace:* により、同じモノレポ内の components パッケージが参照されます。この設定により、以下のメリットがあります。

  • ローカル開発時、常に最新のコードが参照されます
  • 公開時には、適切なバージョン番号に自動変換されます
  • シンボリックリンクにより、効率的なファイル管理が実現します

すべてのワークスペースの依存関係を更新

ルートディレクトリで yarn install を実行すると、すべてのワークスペースの依存関係が一括でインストールされます。

bashyarn install

各ワークスペースで個別に yarn install を実行する必要はありません。Yarn が自動的に依存関係を解決し、最適化されたインストールを行います。

まとめ

Yarn の主要コマンド addupdedupedlxworkspaces について、実務で役立つ使い方とオプションを解説しました。これらのコマンドを使いこなすことで、以下の効果が得られます。

開発効率の向上

適切なコマンドとオプションを選択することで、パッケージ管理にかかる時間を削減できます。特に yarn dlx による一時実行や、yarn workspaces によるモノレポ管理は、大規模プロジェクトで大きな効果を発揮するでしょう。

プロジェクトの安定性向上

yarn dedupe による重複解消や、-E オプションによる完全バージョン固定により、依存関係の予期しない変更を防ぎ、再現性の高い環境を構築できます。

チーム開発の円滑化

yarn.lock による決定論的な依存解決と、Workspaces による統一的なパッケージ管理により、チームメンバー全員が同じ環境で開発できます。

本記事で紹介したチートシート(早見表)を参照しながら、プロジェクトに最適なコマンドを選択してください。Yarn の強力な機能を活用することで、より快適で生産性の高い開発体験が実現できるはずです。

関連リンク