1月29日、著名なJavaScriptパッケージマネージャーの「Yarn 6プレビュー版」が公開された。この記事では、YarnのRustへの全面的な移行と、それに伴うアーキテクチャの刷新について詳しく紹介されている。

以下に、その内容を紹介する。
本記事は、以下のエキスパートに監修していただきました:
監修者 古川陽介さんからのコメント
正直なことを言うと、 yarn がまだ続いているということ自体知らなかったです。
corepack がdeprecatedになったのは懐かしいですが、そこからも今もyarnをRustに変えて続けていたんですねぇ。
こんな事を言うと失礼かもしれないんですが、 yarn と npm で争っていた時代が懐かしいなと思います。あの頃争っていたのは yarn の zero install を打ち出した頃で、その試みがうまく行かず、 npm もそれに対抗した仕組みを構想として出してましたが、それもうまく行かず、npmは資金難で有耶無耶になり、GitHubに買収され、yarnは zero install とか berry の構想は続いていたものの、互換性の問題で旧バージョンからの乖離が生まれて、余り流行らず、そうこうする間に新しいサーバサイドランタイムが出たり、pnpmが出たりしている間に yarn をアンインストールしてしまった所も多いように思いました。
私見ですが、yarn の不評だった zero install は避けられ、性能を重視したアップデートで期待に応えられると良いなと思う反面、今もう求められているのは性能だけではなく、安定性だったり、コマンド体系のAIへの学習しやすさ(≒学習リソースの多さ)だったりすると思うので、気にしていますが、僕は今更移行しようとは思っていません。
ただまだ Preview 版だと思うので、正式リリース時にどうなるのかも含めて期待はしています。
Yarnは、JavaScriptエコシステムにおいて「正確性」「開発者体験」「パフォーマンス」の3要素を同時に満たすことを目指してきた。しかし、数千規模のワークスペースを持つ巨大なモノレポにおいて、Node.js(JavaScript)ベースの従来実装ではパフォーマンスの限界に直面していた。これを受け、プロジェクト開始から10年を機に、コアロジックをRustで再構築する「Yarn 6」のプレビュー版が公開された。この移行により、応答性能の劇的な向上とメモリ使用量の削減が実現される。
パフォーマンスの劇的な向上
Rustへの移行により、特にキャッシュ利用時の速度向上が顕著である。以下は、既存のYarn(Before)、Rust版Yarn(After)、および競合ツールであるpnpmとの比較データである。
| テスト内容 | Before | After | Pnpm |
|---|---|---|---|
| Next.js - 少数かつ重い依存関係 | |||
| コールドキャッシュ | 4.1s | 2.5s | 3.0s |
| ウォームキャッシュ | 577ms | 184ms | 686ms |
| Gatsby - 多数の小さな依存関係 | |||
| コールドキャッシュ | 19.8s | 11.7s | 13.1s |
| ウォームキャッシュ | 1.7s | 0.3s | 1.9s |
(より詳細なベンチマークはこちらで公開されている)
主要な新機能と設計思想の転換
Yarn 6では、Rust化の恩恵を最大限に活かすべく、以下の機能が導入されている。
1. Yarn Switch:自立したバージョン管理
これまでYarnのバージョン管理は、Node.jsに同梱される「Corepack」に依存する形が推奨されてきた。しかし、Node.jsプロジェクトがCorepackの同梱を将来的に停止(Unbundle)する方針を固めたことを受け、Yarnは独自のバイナリ「Yarn Switch」を開発した。
- 専用設計のメリット: Yarn SwitchはYarn専用のツールであり、他マネージャー(npm等)をサポートしない制限はある。しかし、Rustによる単一バイナリとして提供されるため、Node.jsのランタイム起動を待たず、極めて軽量かつ高速に動作する。
- 透過的な解決:
package.jsonのpackageManagerフィールドを自動解析し、必要に応じて適切なYarnバージョンをバックグラウンドでダウンロード・実行する。これにより、Node.js側の環境変化に左右されない安定した開発体験を提供する。
2. Lazy Installs:ゼロ・インストールの操作感とリポジトリの軽量化
Yarn 6では、従来の「Zero Installs」とは全く異なるアプローチで、同等の快適さを実現する「Lazy Installs」を導入した。
- アプローチの刷新: 従来のZero Installsは依存ファイルをすべてGit管理することで「インストール不要」を実現していたが、リポジトリの肥大化が課題であった。Lazy Installsでは、依存ファイルはGitに含めない。
- 自動化と爆速チェック:
yarn runなどの日常的なコマンド実行時に、Rust実装の高速スキャンエンジンが依存関係の整合性を数ミリ秒でチェックする。差分がある場合のみ、実行直前に自動(Lazy)でインストールを行う。 - 開発体験: これにより、開発者は「手動でインストールを叩く」手間から解放される。あたかも最初から環境が整っている(Zero Installs)かのような即時性と、リポジトリの軽量さを両立させている。
ロードマップ
- Yarn 5.x: 現在のJavaScriptコードベースの最終版として、数ヶ月以内にリリース予定である。
- Yarn 6.x(安定版): Rust実装が既存機能との互換性を完全に満たした段階(2026年第3四半期以降を想定)でリリースされる。
- サポート体制: Yarn 6.xの安定版リリース後、Yarn 5.xはLTSとして約30ヶ月間のバグ修正が行われる。
今後の課題
プレビュー版としての公開であり、現在は以下の項目が開発の重点となっている。
- Windows環境のサポート
- インタラクティブコマンドの実装
- サードパーティ製ツールとの互換性向上
詳細はYarn 6 Previewを参照していただきたい。