npmに変わるコマンドを作った

最近こんな記事をMediumの方に書きました。

medium.com

ツイッターで報告したら、Dat界隈の人たち + npm社の人たちがRTしてくれて 20k imp くらいに。びっくり。

せっかくなので日本語でも軽くフォローします。why, how, whatだけ。

npmの問題点

週次のリリースを月次リリースに変更、2年で3回のbreaking changeをしたにもかかわらず新機能は増加の一途。結果としてbug fixに時間が随分とかかるようになりました。原因は主に下記の3つがあります。

  • リリース頻度の減少
  • コミッター2名のみ体制
  • コードベースの肥大化

この問題点については、オンラインでもオフラインでも社員の人達と話したんですが、2人体制でできることも少なく、高いモチベーションで突破するほどの余裕はなさそうでした。

その解決策

そこで、マンパワーとモチベーション、両方とも増やす方法を考えました。Publicな場で大きな議論をして社外コミッターを受け入れる方向に持っていく・いっそforkして人を集めるように宣伝していく、などの方法を思いつきました

  • ガバナンスを変える提案を投げる
  • forkする

が、0から考えて作り直すの楽しそう、と興味が出て実際に作ってみました。

  • 作り直す

アウトプットについて

それがこちら、depです。goのpackage managerと名前かぶったらしいので、そのうち適当なものに変えます。

github.com

コンセプトは、モジュールのエンドユーザーが必要とする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のように使えます。

datproject.org

あと3つほど実験的な機能を予定しているので、shrinkwrapの実装が終わり次第、追加します。お楽しみに :)