BT

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

| 作者: Abel Avram フォローする 7 人のフォロワー , 翻訳者 吉田 英人 フォローする 0 人のフォロワー 投稿日 2016年11月17日. 推定読書時間: 3 分 |

原文(投稿日: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から入手が可能だ。

 
 

この記事を評価

関連性
スタイル
 
 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT