npmに変わるコマンドを作った
最近こんな記事をMediumの方に書きました。
ツイッターで報告したら、Dat界隈の人たち + npm社の人たちがRTしてくれて 20k imp くらいに。びっくり。
I just published “dep: a little Node.js dependency installer” https://t.co/9umlUvCmxq
— Daijiro Wachi 📦⛓️ (@watilde) August 25, 2017
せっかくなので日本語でも軽くフォローします。why, how, whatだけ。
npmの問題点
週次のリリースを月次リリースに変更、2年で3回のbreaking changeをしたにもかかわらず新機能は増加の一途。結果としてbug fixに時間が随分とかかるようになりました。原因は主に下記の3つがあります。
- リリース頻度の減少
- コミッター2名のみ体制
- コードベースの肥大化
この問題点については、オンラインでもオフラインでも社員の人達と話したんですが、2人体制でできることも少なく、高いモチベーションで突破するほどの余裕はなさそうでした。
その解決策
そこで、マンパワーとモチベーション、両方とも増やす方法を考えました。Publicな場で大きな議論をして社外コミッターを受け入れる方向に持っていく・いっそforkして人を集めるように宣伝していく、などの方法を思いつきました
- ガバナンスを変える提案を投げる
- forkする
が、0から考えて作り直すの楽しそう、と興味が出て実際に作ってみました。
- 作り直す
アウトプットについて
それがこちら、depです。goのpackage managerと名前かぶったらしいので、そのうち適当なものに変えます。
コンセプトは、モジュールのエンドユーザーが必要とするnpmの最小単位を作る、です。ここでいうエンドユーザーとは、モジュールは利用するけど、自分で作ったりはしない人、です。
そのため、3つのサブコマンドしかありません。
- install: モジュールのインストールを行う。
- [WIP] lock: shrinkwrapをする。npmとの互換性をもたせるべく開発中。
- run: package.json の scripts にあるスクリプトを実行する。
この3つの機能にだけフォーカスして、issue reportの度になるはやでbug fixして随時リリースしていくフットワークの軽いpackage managerを目指していきます。
実験的な機能
ついでに、みなさんご存知 Dat protocolのサポートも実験的にしてみました。P2Pなdat networkをmodule registryのように使えます。
あと3つほど実験的な機能を予定しているので、shrinkwrapの実装が終わり次第、追加します。お楽しみに :)