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

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

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

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

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

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

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

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

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

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

時間がかかりましたか?

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

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

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

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

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

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

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

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

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

勉強になります!

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

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

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

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

その通り!そして、ロボ子のパッケージは「非現実的なバージョン番号のパッケージ」として、私のブログで紹介されるじゃろう!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。