BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース FacebookがJavaScriptパッケージマネージャのYarnをオープンソース公開

FacebookがJavaScriptパッケージマネージャのYarnをオープンソース公開

ブックマーク

原文(投稿日:2016/10/12)へのリンク

FacebookがYarnをオープンソースとして公開した。YarnはnpmまたはBowerレジストリにストアされたJavaScriptモジュールを対象とするプロキシパッケージマネージャだ。

Facebookの3人のエンジニアの記事によると,同社では長年にわたってnpmを利用してきた。当初はそれでうまくいっていたのだが,同社のチームとコードベースの規模がある点に達すると,”一貫性やセキュリティ,パフォーマンス”に関するいくつかの問題点が表面化し始めた。

ReactなどFacebookのプロジェクトの多くは,コードをnpmレジストリに依存しています。 しかしながら内部開発の規模が大きくなるにつれ,さまざまなマシンやユーザ用に依存対象をインストールする時の一貫性や依存関係のプルに要する時間などの問題が明らかになりました。さらに,npmクライアントがこれら依存関係のコードを自動実行することから,セキュリティが懸念されるようにもなったのです。

Facebookはまた,CIツールで動作させた場合のnpmのインストールに関する問題にも言及している。同社の開発環境はセキュリティ上の理由から,インターネットに接続されていないからだ。すぐに浮かぶ解決策は,必要なモジュールをすべて別々にダウンロードして,プロジェクトのソースコードに収めていくというものだ。しかし,いくつかのモジュールのアップデートが大きな影響を与える場合がある。

例えばbabelのマイナーバージョンをアップデートした時には,800,000行のコミットが実行されて収拾がつかなくなったため,utf8の不正シーケンスやWindows式の改行,png変換されていないイメージなどを検出するlintルールが導入されることになりました。node_modulesのマージ変更には,エンジニアが1日掛かりになることも珍しくありません。

第3の方法として考えられたのは,ソースコードからそれらのモジュールを削除して,社内CDNに保持する方法だ。しかしこれには開発環境やCIビルドサーバをインターネットに接続する必要があるため,受け入れることはできなかった。最終的に同社では,高速で信頼性があり,セキュアな,Yarnと呼ばれる独自のパッケージマネージャの開発を決定した。

Yarnにはいくつかの特徴がある。

  • オフラインモード: パッケージを事前にインストールしておくことで,インターネット接続がなくても再インストールが可能になる。
  • 決定論性: 同じ依存関係は,インストールの順序に関わらず,すべてのマシンに対して正確に同じ方法でインストールされる。
  • ネットワークパフォーマンス: 要求を効率的にキューすることにより,要求のウォーターフォールを防止し,ネットワークの使用率を最大化する。
  • ネットワークレジリエンス: ひとつの要求の失敗によってインストールが失敗することはなく,フェールが確定するまで再試行される。
  • フラットモード: 単一のバージョンに対する依存関係のバージョン不整合を解決することで,重複の発生を防止する。

もうひとつの注目すべき特徴は,npmとBowerの両リポジトリに対応していることだ。

npmレジストリを運営するnpm, Incは,既存のNode.jsマネージャに対する新たな選択肢としてYarnを歓迎するとともに,Yarnがパッケージをプルするregistry.yarmpkg.comが公式npmレジストリのプロキシである点を指摘している。Facebookからの具体的な言及はないが,Yarnはもうひとつ,npmレジストリがダウンした場合にすべてのNodeモジュールのセキュアなバックアップを保持する,という目的も解決する。昨年の春,npmが2時間半にわたって故障した時には,世界中の数千の開発者がビルド失敗という影響を受けた。Facebookのようなスケールや開発ニーズが存在しないためYarnが必要でないというのであれば,オリジナルのレジストリがダウンした場合に備えて,レジリエンス性のレイヤを提供するプロキシプロバイダ経由でパッケージを取得する方がよい。

FacebookはYarnについて,Exponent,Google,Tildeとのコラボレーションの成果であることを公表している。コードはBSDライセンスの下で公開されており,GitHubから入手が可能だ。

 
 

この記事を評価

関連性
スタイル
 
 

この記事に星をつける

おすすめ度
スタイル

BT