【実務・中級編】yarnの「Zero-installs」とは?CI時間を劇的に短縮する設定と運用ガイド – ビルド・パッケージ管理ツール生産性向上バイブル

Yarn Berry “Zero-installs”:CIのボトルネックを破壊し、開発体験を極限まで高めるアーキテクチャ

こんにちは。テックリードです。

「また `npm install` してるの?」

CIのログを眺めて、プログレスバーが埋まるのをただ待つ時間は、エンジニアにとって最も生産性の低い時間です。特にプロジェクトが肥大化するにつれ、`node_modules` の依存関係解決とディスクI/Oは、ビルド時間の8割を占める「悪」となります。

本日は、Yarn Berry (v2+) の真骨頂である 「Zero-installs」 について、単なる導入手順を超えた「アーキテクチャの思想」と「現場で使い倒すためのプロの技術」を伝授します。

—

1. Zero-installs の本質:なぜ「インストール」を過去にするのか

従来の `node_modules` 方式(Hoisting)は、依存関係をフラットに並べるために、シンボリックリンクの張り直しや、膨大なファイル探索コストを強いてきました。

Zero-installs は、Yarn の PnP (Plug’n’Play) 機構を最大限に活用します。

  • PnPによる解決: `.pnp.cjs` という単一のマップファイルで全依存関係を解決します。
  • Zero-installs: 依存ライブラリのキャッシュ(`.yarn/cache`)を Git リポジトリに含めてしまうという、一見「非常識」な戦略です。

なぜこれが最強なのか?
CIにおいて「キャッシュのリストア失敗」や「ロックファイルの不整合」という古典的な問題が物理的に消滅するからです。Git にキャッシュが含まれているため、`yarn install` が実質的に「何もする必要がない(=ゼロ秒)」状態で完了します。

—

2. 実践:Zero-installs を構築する構成設定

以下の設定を `.yarnrc.yml` に記述してください。これが Zero-installs を有効化するための「神設定」です。

.yarnrc.yml
PnPモードを有効化し、node_modulesの生成を禁止する
nodeLinker: pnp

キャッシュをzip形式でリポジトリ内に保持する(これがZero-installsの核)
enableGlobalCache: false
cacheFolder: .yarn/cache

依存関係のチェックサムを厳格に管理する
enableImmutableInstalls: true

Gitへの反映ルール

`.yarn/cache` には zip ファイルが格納されます。これを Git に push する必要があります。
`.gitignore` は以下のように設定してください。

.gitignore
.pnp.
.yarn/
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions
!.yarn/cache # <- ここを許可し、中身をGit管理下に置く ---

3. CI/CDを劇的に高速化するGitHub Actionsの実装

Zero-installs の恩恵を最大限に受けるには、CI側での振る舞いを変える必要があります。

.github/workflows/ci.yml
jobs:
build:
runs-on: ubuntu-latest
steps:

  • uses: actions/checkout@v4

# 以前はここで node_modules のキャッシュをリストアする複雑な処理が必要だった
# Zero-installsなら、ただ実行するだけでいい

  • name: Install dependencies

run: yarn install –immutable
# –immutable フラグにより、キャッシュとロックファイルが不整合なら即座に失敗させる
# これにより、開発環境とCIの「動いた・動かない」を完全に排除する

—

4. テックリードが教える「現場で震える」運用テクニック

① VS Code の統合(必須プラグイン)

PnP環境では `node_modules` が存在しないため、IDEがライブラリを認識できません。以下のプラグインを入れ、SDKを生成してください。

  • プラグイン: `ZipFS` (VS Code Marketplace)
  • これを入れると、`.yarn/cache` 内の zip 圧縮されたライブラリの中身を直接エディタで閲覧・デバッグできるようになります。
  • コマンド: `yarn dlx @yarnpkg/sdks vscode`
  • これを実行すると `.yarn/sdks` が生成され、TypeScript サーバーが PnP を理解できるようになります。

② チーム開発で役立つ共有化ルール:`yarn patch`

ライブラリに致命的なバグがあり、修正を待ちきれない場合。`yarn patch` を使ってください。

yarn patch

これで生成されたパッチファイルは Git 管理下に置けます。`node_modules` を直接いじるという「禁忌」を犯さず、プロジェクトレベルで永続的な修正を共有可能です。

③ 隠れたキーボードショートカット (Yarn Berry)

ターミナルでの作業効率を上げるためのショートカットです。

  • `yarn why `: 依存の依存関係を可視化する。Zero-installs 環境では特に必須。
  • `yarn up -i`: インタラクティブに依存関係を更新する。バージョン固定の事故を防ぐための定石。

—

5. 結論:なぜ今、移行すべきなのか

Zero-installs への移行は、単なるビルドの高速化ではありません。「開発者の環境とCI環境を物理的に同一にする」という、DevOpsの究極形への到達です。

キャッシュのリストア時間に悩まされ、`rm -rf node_modules && yarn` を繰り返す日々に別れを告げましょう。この構成を一度導入すれば、チームメンバー全員が「環境構築の苦しみ」から解放され、本来注力すべき「コードの価値」に集中できるようになります。

さあ、今すぐ `.yarnrc.yml` を書き換え、CIのログが「0.5秒」で完了する快感を体験してください。それが、モダンなフロントエンドアーキテクトの第一歩です。

タイトルとURLをコピーしました