npmとクライアント側でのパッケージ管理の議論

https://www.youtube.com/watch?v=ziIsXjP1c58

1 comment | 1 point | by WazanovaNews 2年以上前 edited


Jshiike 2年以上前 edited | ▲upvoteする | link

npmに登録されているパッケージ数は10万、月間ダウンロード数も5億を超えました。7月の段階で月間3億程度ですから、こちらのグラフで見てもわかるように、かなり成長が加速してきていますね。

EdgeConf4において、パッケージ管理をテーマにしたディスカッションに、npmのCTOであるLaurie Vossと、npmのpeer dependencyをつくったGoogle Chrome TeamのDomenic Denicola(ES6のPromiseの取組みでも知られた人ですね。)が参加しています。この二人と、BowerのJosh Peekを中心に議論が進んでいます。ちなみにJoshはGitHubの社員で、最近では、左右に並べてdiffを比較できる便利な機能をつくった人でもあります。

「サーバサイドのパッケージマネジャとしては、CPANやRubygem、npmのように開発言語ごとにプレーヤーが存在するが、クライアント側(web側)のソリューションはどうあるべきか?」という点について、JavaScript / CSS / HTML / Web ComponentなどをとりまとめるビルドツールとしてのBowerと、クライアントやサーバにこだわらずJavaScriptをまとめてパッケージ管理したいnpmという議論の構図です。

BowerのJoshの発言の趣旨は、

  • Bowerはpublishingのメカニズムは持たずにGit URLのみ。既存のGitのツールで管理。レジストリもライトなもので、ビルドツールという立ち位置。どうやって見つけるか、メンテしていくかは、GitHubに依存。npmみたいに別途パッケージをパブリッシュすることについては、ミラーとかレプリケーションとかができるという意味でよい点はある。
  • ソースコードだけでなく、コンパイルしたビルドの管理もGitHubを利用すればよい。
  • (コンパイルしたビルドの管理もnpmを利用することになると、)デプロイのときにnpmのようなサードパーティに依存すると、そのサーバが稼働していないと作業に支障がでることになってしまう。
  • メタデータのフォーマットをpackage JSONに統一できれば、異なるツール間でも共有 & 利用できるようになり、デベロッパーコミュニティ全体にとってのメリットは大きい。でもそうすると、npmとしては完全なコントロールができなくなるので、やりたくないだろうね。(これに対してnpm側は、「npmはスキーマレスDBなので、何がpackage JSONに入っていても、インデックスやレプリができるのでOK。」という反応。)

それに対して、npm勢は、

  • (パッケージ管理かビルドツールかという議論からすると、シンプルに言うと、)npmはもっとたくさんのことをやってるだけ。コンパイルしたビルドを変わることなく管理できるとか。ミラーとかレプリは使ってるCouchDBの機能としてたまたまあっただけではあるが、添付されたメタデータをもとに、ソースコード管理とは別にデリバリーのメカニズムを管理できるようにしている。
  • コンパイルしたビルドをGitHubに置くのは、まるで.exeをレポにコミットしてるようなもの。ソースとビルドは別に管理したいはず。(「であれば、ブランチわけて管理すればよいだけなので、どうして問題なのか?」というJoshの反論あり。)
  • ソフトウェアのパッケージとコンパイルしたビルドという区分でいくと、npmは元来は前者に最適化されたものであったが、最近は後者に力を入れてきている。

  • コードの再利用という観点が大切。今書いているJavaScriptコードが、サーバ用かクライアント用かは考えずに再利用できるようにしたい。サーバとクライアントのJavaScriptパッケージマネジャを一つにすることによって、ネットワーク効果が起きて、コードの再利用がもっと促進されるはず。

  • npmには全てに対応してほしいという要望も多いし、ユーザは自分の流儀を変更したくはないはず。そこで、今後の方向性としては、npmはデフォルトのプロセスを用意するが、プロセスをモジュール化することで、一部のステップをユーザ側で変更したければ、自由に変えられるようにしていきたい。

  • (クライアント + サーバの)JavaScriptのパッケージマネジャには簡単になれるが、ユーザが望んでいるのはそれだけではないというのはよく理解している。パッケージマネージャとしてクライアント全体を管理できるかどうかは、これから更に検討していくことになる。

  • これからリニューアルするnpmのウェブサイトでは、ブラウザ用とか、Browserify用とか、RequireJS用とか、Web Component用とか、パッケージを利用できるエコシステム毎に検索できるようにする。

法人を設立して、ベンチャーキャピタルからの資金調達も終え、当然積極的に拡大路線を模索するnpmチームと、Bowerをデベロッパーコミュニティのためにどうよくしていきたいかということに加えて、GitHubの社員としての立ち場も微妙に見え隠れするJoshとのやりとりが興味深いものでした。

ちなみに、npmのFounderであるIssac Schlueterは、NodeupのPodcastで、「Bowerはユーザの問題をしっかり解決しているから存在するわけで、npmとしてもフロント側のソリューションは来年のどこかでだしたい 。」と発言しています。

#npm, #bower


ワザノバTop200アクセスランキング


Back