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

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

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

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

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


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

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