npmパッケージとtestファイル群

某パッケージのイシューを眺めていたら、ファイルが多すぎてnpm installが遅いのでfilesフィールドを使おうやというようなプル・リクエストが投げられていた。そこではあっさりと却下され、他にあった同様のプル・リクエストで少し議論(ケンカ)がなされていた。どちらにも一理あり、興味深かった。

プル・リクエストを投げたdeepsweet(様々なプロジェクトに同様のプル・リクエストを送っているようだ)は、filesフィールドを使わない問題点として、インストールするファイルが多くなることがあるとしている。例えば100MBくらいテスト関係のファイルがあったらひどいことになるじゃないか、とも言い、そのことはnpm installが遅いという問題の理由のひとつと主張してもいる。また.gitignoreをメインに据えたブラックリスト方式だと、どうしてもプライベートなファイルがうっかり流出してしまうことが避けられないともしている。

対して.gitignoreだけで良いとしてこのプル・リクエストを取り込まなかった開発者側は、npm exploreを使ってテストを走らせたいとしており、そのためテスト関係のファイルは必要だと言う。npm installが遅い問題はファイルの量やサイズではなく、もっと別のところにあり、それはパッケージ開発者ではなくnpmの開発者が責任を持って改良すべきところだとしている。ホワイトリスト方式については、必要なファイルの追加を忘れるという問題を避けることが難しく、そのことは壊れたパッケージを公開することに直結するのでよくないのではないかとしていた。

双方がそれぞれ気にしているデメリットへのとらえ方の溝がとても深そうだ。


僕はfilesフィールドで安全に倒すという考え方は、面倒だなと感じることもしばしばあるが、悪くはないと考えている。しかし、そういったfilesフィールドを使った運用で起こりうる壊れたパッケージを公開してしまうということは、他人のプロジェクトを破壊してしまうと言いかえることができるとも考えるようになった。そうなるとnpm installが遅くなる問題よりも避けるべき大きな問題と言えそうだ。

少しずつfilesフィールドを削除する方向で調整していきたい。