はじめに
TLB Enjoy Developers Advent Calendar 2022 の6日目の記事です。
いつもはAdventCalendarは見る側だったのですが、今回は初めて記事を書く側として参加できて嬉しいです!
TLB Enjoy Developers Advent Calendar 2022 はテーマなど制限がないので自由に書こうと思います!
今回の記事ではnpmパッケージ「-」についてです!
特に技術的な記事ではなく、調べてみた系の記事ですが読んでもらえると嬉しいです。
経緯
「-」を知るきっかけ
ある日 package.json の dependencies を見ていると、ふと気になるパッケージがありました。
"dependencies": {
"-": "^0.0.1",
}
"-": "^0.0.1",
という見覚えのないパッケージの記載がありました。
しかも dependencies に...
「-」について調べる
「"-"なんてパッケージ入れた覚えはないぞ!」と思ってnpmで調べてみると、「-」って名前のパッケージは確かにありました。
引用: https://www.npmjs.com/package/-?activeTab=readme
2020年4月2日にバージョン0.0.1が登録されており、そこから全く更新されていません。
ファイル数も3ファイルで600Bしかありません。
GitHubで「-」のリポジトリの中身を見てみてもパッケージ作成に最低限必要そうなファイルがあるだけで、特に意味のあるコードは記載されていません。
その割にWeeklyDownloadsは 38,087 とそこそこダウンロードされています。
「-」はなんのために作成されたパッケージなのか、なぜ自分の package.json に記述があったのか謎が深まるばかりです。
他の記事も参考にしながら調べていくと色々と分かったので記載していきます。
結局npmパッケージ「-」とはなんなのか
2021年8月のこちらの記事に疑問の全て書かれていました。
日本語訳された記事はこちら
なぜ「-」が作成されたか
最初は、'-' が命名規則に従って有効なパッケージ名であることを確認するためにパッケージを公開しました。
引用(Google翻訳): https://www.bleepingcomputer.com/news/software/empty-npm-package-has-over-700-000-downloads-heres-why/
とのことで、そもそもは「-」の作成者のParzhitskyさんが、npmの命名規則に則った「-」を実際に公開できるのか試したとことから公開されたようです。
「-」は安全か
「-」が個人の作成したパッケージである以上、悪意のあるコードが埋め込まれることも考えられます。
これについても制作者が悪用する意図はないことを言っています。
なぜ「-」がインストールされたか
「-」がインストールされた原因は タイピングミス でした。
パッケージをインストールする際は
yarn add -D {package}
or
npm install -D {package}
などでインストールしますし、オプションをつけることが多いです。
この時、パッケージをスペース区切りで複数指定することで、まとめてインストールすることができます。
つまり、以下のコマンドを実行してしまうと、指定したパッケージと一緒に「-」や「D」がインストールされるわけです。
※「D」というパッケージも存在します
yarn add - D {package}
or
npm install - D {package}
普通は気付きそうですが、脳死でインストールなどを行なっていると気がつかないうちに「-」がインストールされるわけですね。
「-」以外のものも試してみる
調べてみたら「-」や「D」以外にもよく使いそうなオプションと同じ名前のパッケージがあるようです。
せっかくなので(?)インストールしてみます。
オプションと同じ名前でインストールできたパッケージ
よく使うオプションの名前でインストールを試して、存在したものだけを記載しました!
以下のコマンドで一気にインストールできます!
yarn add - D O g i exact tag tilde version
or
npm install - D O g i exact tag tilde version
nnpmtrendsでみると、どれもインストールされてそうですね!
(中にはちゃんと意味のあるパッケージもありそう。)
package.json のなか↓
"dependencies": {
"-": "^0.0.1",
"D": "^1.0.0",
"O": "^0.0.9",
"exact": "^0.8.0",
"g": "^2.0.1",
"i": "^0.3.7",
"tag": "^0.4.17",
"tilde": "^0.1.1",
"version": "^0.1.2",
},
なんか満足!!!
おわりに
オプションをつけてインストールする場合は注意が必要が必要なことや、確認することの重要性を「-」から学びました!
今回記事で紹介したような意味のないパッケージが他にもあれば教えて欲しいです!
明日は @Yu_yukk_Y さんの記事です!お楽しみに!
参考記事