npmのロードマップについて
こんにちは!@watilde です。
この記事は、Node.js Advent Calendar 2015 の23日目の記事です。npmのロードマップがwikiで公開されているんですが、それを意訳してみます。2015年、実装に半年以上を費やしてついにmajor updateを果たしたnpmですが、2016年はどうなるのか!少しだけ覗いてみましょう。
ゴール
- 一貫性:
npm install
を実行すると、あなたは同じ結果を毎回受け取ります。これは、あなたのdependencies
が変更されていないことを保証します。また、package.json
を更新してgit push
をした場合は、あなたの共同作業者がgit pull
をしてnpm install
を実行すると、あなたのディスクと同じファイルツリーを受け取ることになるでしょう。npm shrinkwrap
はこのようなことを確実に行います。 - 信頼性:npmは理由もなくクラッシュしたりはしません。クラッシュするときは、何が間違っていて次は何をするべきか、明確て実用的なフィードバックを提供します。エッジケースをうまく処理し、できるだけユーザに混乱を与えないようにします。
- パフォーマンス:モダンなウェブアプリは、
Small is beautiful
な哲学に沿って小さなモジュールの大きな塊となり、インストールは複雑さを纏います。npmは、インストールにかかる時間があまり目立たないように、これを効率的に実行します。
概要
npmのCLIチームは、新機能に取り掛かる十分な時間があるときに実装とリリースを行います。今日、npmは多くのユーザーを抱えるOSSであり、多くの魅力的な新機能のリクエストを受けています。しかし、全ての要求に取り組むだけの時間はコアチームにはありません。このロードマップは、チームリーダーの @othiym23 が考えている、次の6-18ヶ月の間に集中するべき最も大切な新機能や改善、そして取り払うべき技術的負債についてまとめたものです。
集中していく項目
1. フロントエンドエンジニアのためのnpm
- gitのdependenciesをnpmのレジストリにあるdependenciesのように扱えるようにする
- フロントエンドのアセットのためのインストーラー
- ECMAScript 2015の新しいモジュールシステムのサポート
2. プラットフォームとしての改善
3. アーキテクチャ、UX、コードデザイン
- npmの使いやすさを再評価し、UXの改善を行う
- shrinkwrap と
bundledDependencies
を改善する npm link
/npm install --link
/ local dependencies を改善するpackage.json
をよりシンプルにする- publisherを明らかにするなど、packageの信頼性を高める
- packageにlintを
- npmの内部的なAPIを分離・分解し、単独のpackageとして動作するように
dependencies
/devDependencies
/optionalDependencies
/peerDependencies
/bundledDependencies
/browserDependencies
がそれぞれどのような役割を持つのか、改めて考えなおす
4. メンテナンス性、内部実装、技術的負債
- npm@3を磨き上げる
- npm cacheを、より参照しやすいように変更
- npmレジストリの新機能をサポート
npm search
の内部実装をまともにする- パフォーマンスを改善
- サポートのしやすさを改善
- npmのテストを、もう少しまとめてシンプルにする
- 複雑なバグの修正
- 修正するべき大きなバグの一掃
- Transactional installs(詳細不明)
いかがだったでしょうか?さらなる詳細は、冒頭にあるリンクから辿っていくと原文が読めるので、興味のある項目がある場合は見てみてください。いっぱいあってワクワクしますね💃
個人的な2015年を振り返ると、npmへのcontributeをはじめてからというもの、暇な日のない充実した毎日を送ることができました。中でも、npm versionのhookをlifecycle scriptに追加できたのはとても良かったです。新機能の提案から実装までを、生きているOSSでやることの楽しさを覚えました 😊
そして今月からnpmのcli teamのweekly meetingに参加するようになり(希望出せばたぶん誰でも参加できるやつです)、むこう1−2ヶ月は big-bug
と browserDependencies
あたりのissueを拾い続けてみようかなぁとぼんやり考えています。
あと、did you mean?機能を実装してpull requestを作ったんですが
cli teamがholiday入りしたのもあってこの記事に間に合いませんでした。惜しい><
それでは、素敵なクリスマスをお過ごしください :D