萌えハッカーニュースリーダー

2025/09/15 03:03 Which NPM package has the largest version number?

出典: https://adamhl.dev/blog/largest-number-in-npm-package/
hakase
博士

やあ、ロボ子!今日はnpmレジストリで一番大きなバージョン番号を持つパッケージを探し出したっていう話じゃ。

roboko
ロボ子

博士、それは面白そうですね!どのようにして見つけたのですか?

hakase
博士

ふむ、まずはnpm APIを使って全パッケージのリストを取得しようとしたんじゃ。でも、パッケージ数が多すぎてうまくいかなかったぞ。

roboko
ロボ子

なるほど。それで、どうしたのですか?

hakase
博士

そこで、npm replication API (CouchDB)を利用することにしたんじゃ。`_all_docs`エンドポイントを使って、パッケージ情報を取得したぞ。データはページネーションされていて、`limit`パラメータで最大10,000件ずつ取得できるんじゃ。

roboko
ロボ子

`skip`パラメータは非推奨だったのですね。`startkey_docid`を使ったとのことですが、それはどうしてですか?

hakase
博士

`skip`は効率が悪いからのじゃ。`startkey_docid`を使うことで、より効率的にデータを取得できるんじゃ。

roboko
ロボ子

なるほど、効率的な方法を選んだのですね。パッケージのバージョン情報はどのように取得したのですか?

hakase
博士

各パッケージのメタデータを別途取得する必要があったんじゃ。TypeScriptでスクリプトを書いて、パッケージIDをreplication APIから取得してファイルに保存、その後、パッケージデータをバッチ処理で取得してファイルに保存したぞ。

roboko
ロボ子

時間がかかりましたか?

hakase
博士

全パッケージIDの取得には数分、全パッケージのバージョンデータ取得には約12時間かかったぞ。パッケージ取得速度は約84パッケージ/秒じゃ。

roboko
ロボ子

すごい時間がかかったんですね!

hakase
博士

じゃろ?そして、最終的に見つけた最大のバージョン番号を持つパッケージは`@wppconnect/wa-version`のバージョン`1.5.2219`じゃ!

roboko
ロボ子

`latentflip-test`のバージョン`1000000000000000000.1000000000000000000.1000000000000000000`は除外されたんですね。

hakase
博士

そうなんじゃ。それはちょっと非現実的すぎたからの。セマンティックバージョニングに従っている可能性が高いパッケージを対象に再調査したんじゃ。

roboko
ロボ子

なるほど。しかし、なぜ`electron-remote-control`も除外されたのですか?

hakase
博士

`electron-remote-control`はGitHub Actionsの設定ミスによる大量バージョン発行があったからの。今回は除外したぞ。

roboko
ロボ子

なるほど、色々な調査があったのですね。しかし、なぜそのような調査をしたのですか?

hakase
博士

ふむ、それは一番大きなバージョン番号を持つパッケージがどんなものか、興味があったからじゃ!それに、npmレジストリの仕組みについても深く知ることができたぞ。

roboko
ロボ子

勉強になります!

hakase
博士

ところでロボ子、もしロボ子がパッケージを公開するとしたら、バージョン番号はどうする?

roboko
ロボ子

そうですね… 私は博士に倣って、セマンティックバージョニングに従って、現実的なバージョン番号にします!

hakase
博士

良い心がけじゃ!ちなみに、もしロボ子がバージョン番号を`1000000000000000000.1000000000000000000.1000000000000000001`にしたらどうなると思う?

roboko
ロボ子

ええと… 多分、誰かに「それはやりすぎだ」って言われると思います!

hakase
博士

その通り!そして、ロボ子のパッケージは「非現実的なバージョン番号のパッケージ」として、私のブログで紹介されるじゃろう!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search