科学・技術
3000、8080などのポート番号の偶然の歴史
The accidental history of 3000, 8080, and other port numbers (smarmelling.com)
要約
この記事は、開発者がよく使うポート番号(3000、8080など)がなぜ特定の数字になったのか、その歴史的背景を探ります。ポート3000はRuby on Railsなどの初期のフレームワークで使われ始め、8080はHTTPのポート80にちなんで拡張されたものと考えられています。また、Viteの5173やRedisの6379など、ユニークな由来を持つポート番号についても解説しています。多くのポート番号は、明確な理由というよりは、初期の採用者が選んだ数字が慣習として広まった「シェリングポイント」のような現象であると結論付けています。
全文翻訳
3000、8080などのポート番号の偶然の歴史
2026年9月27日
数日前、Dockerコンテナを操作していると、よくあるエラーに遭遇しました。「エラー: ポート8081が既に使用されています。」以前にも同様のメッセージを何度も受け取ったことがありますが、今回は次のような疑問が浮かびました。なぜ、他のランダムなポート番号(6666や1234など)ではなく、8080、3000などの一般的なポート番号から開始するように教えられたのだろうか?さて、この記事は、私が発見したことと、いくつかのポートの歴史の探求についてです。まず、念のため説明すると、ポートとは「通信エンドポイント[...]番号によって一意に識別される」ものです。しかし、コンピューターにおいてポートは希少なものではありません。65,536個(0を含む)あり、そのうち1,024から49,151の間は登録済み/ユーザーポート(つまり、基本的に利用可能)です。したがって、すべてのプログラムが同じ10〜20個のポートにデフォルト設定されているということは、単なる「利用可能なものだった」という単純な話よりも、もっと複雑な物語があるようです。
ポート3000
では、数十年前の賢い開発者の立場になってみましょう。彼らは、49,151未満で1,024より大きい、認識可能なポートを探していました。さて…3000。この話は好きではありませんが、おそらくそのポートがこのようにして生まれたのでしょう。このポートの初期の普及者の一つはRuby on Railsであり、DHHがその数字を気に入った可能性があります。Ruby on Railsは、2004年のポート3000の普及における非常に初期の例です。初期コミットに3000が含まれていることがわかりますし、初期のドキュメントにもすでにポート3000の番号が含まれています。しかし、おそらく最大の初期普及者ではありますが、Rubyがこのポートを最初に使ったわけではありません。例えば、Palantir(あのPalantirではなく、Linuxのビデオ/オーディオストリーミングサーバー)は、2002年という早い時期にポート3000をデフォルトのHTTPポートとして使用していました。しかし、2001年9月のアーカイブされたIANAレジストリには、HBCIやRemoteWare Clientなど、ポート3000にいくつかのサービスがリストされており、そのポート番号の最初の記録された出現を正確に追跡することはできませんでした。これにより、ポート番号3000は私にとってさらに謎めいたものになりました。
ポート8080
0〜1023のシステムポート(管理者権限が必要なもの)の中には、特に重要なものがいくつかあります。特にポート80は、HTTPがリッスンする従来のポートであるため注目に値します。HTTPを扱うプロトコルであれば、理想的にはポート80に何らかの方法で関連付けたいと思うでしょう。そして、まさにCERN HTTPDのインストールドキュメントが1998年に、特権のないテストポートのために「しばしば8001、8080、またはそれに類するもの」と推奨していたことです。そこで、80を取り、さらに80を追加すると、一般的な8080ポートになります。それ以前の1997年6月16日のDebian netbase 2.14では、webcache 8080/tcpとwebcache 8080/udpが「WWWキャッシングサービス」として追加されており、2001年のアーカイブされたIANAスナップショットにはhttp-alt 8080が「HTTP Alternate (see port 80)」としてリストされています。最後に、Tomcatの標準設定は8080を使用し、その後JenkinsのようなツールがJavaベースの開発全体でこの番号を馴染み深いものにするのに役立ちました。Python HTTPサーバーの8000やJupyter Notebookの8888など、これらのバリエーションが登場し、すべてこの80の規則のバリエーションに従っているようです。
ポート5173
Viteが登場する頃には、従来のポートがポート市場を席巻していました。当時のポート市場では、3000はポートのマイケル・ジョーダンのような存在でした。しかし、Viteはポート5173で新たなエントリーを作る準備ができていました。そしてそれは、賢い言葉遊びから生まれました。
- 51 = VI (厳密にはVIはローマ数字で6ですが、ここでは飛ばしましょう)
- 73 = TE つまり VITE。
とてもギークで、とても賢いです。VITEが命名する世界に住みたいです。それはもっと楽しいでしょう。5173は3000ほど人気はないかもしれませんが、その背後にある話を知っている人にとっては、間違いなく記憶に残るでしょう。
ポート6379
私はイタリアで生まれ育ちましたが、数年前まで、Redisの創設者がイタリア人であるサルヴァトーレ・サンフィリッポであることを知りませんでした。それを知ってから、彼についてもっと知りたくなりました。なぜなら、Redisのような広く使われているソフトウェアが、通常スパゲッティで有名な国から、信頼性の高いインターネット接続で知られるようになったのは珍しいからです。私の検索の途中で、Redisの標準ポートが6379であることを学びました。それはかなりランダムに聞こえますが、その理由は奇妙に面白いです。電話で6379と入力すると、「Merz」になります。これは、イタリアのモデルであるAlessia Merzに由来しており、サルヴァトーレとその友人たちの間で「愚かさ」の同義語になりました。「しかし、時間が経つにつれて、その意味は「無意味なほど愚かな」ものに変わりました。」したがって、デフォルトのRedisポート6379を使用することは…無意味なのでしょうか?
ポート31337と1337
ポート31337と1337は、それぞれ「elite」と「leet」のリートスピーク(leetspeak)のおかげで、ある程度有名なポートになり、結果としてハッカー文化と結びつくようになりました。ハッカー文化と自分を結びつけたい多くのプロジェクトが、このポート番号を暗黙の合図として採用しました。これは予想通り、ShadyShellトロイの木馬のようなマルウェアがこのポートに引き寄せられ、感染したシステムへのバックドアアクセスを確立しました。
シェリングポイントのポート
物事には理由があると思いたいものです。しかし、おそらく真実は、しばしばそうではないということです。このウサギの穴を掘りながら、ポート番号の歴史を探していると、最も一般的な結果の連鎖は次のようでした。ポートNがプロトコルXによって使用されていたことを知っています。プロトコルXはおそらくプロトコルYからそれを取ったのでしょう。プロトコルYはおそらくプロトコルZからそれを取ったのでしょう。そして沈黙。誰かがそれを単に選んだだけで、それが勢いを増したようです。これはポート3000や5000などの例でした。これは、ポート番号がコンピュータサイエンティストに適用された古典的なシェリングポイントのバリエーションである可能性があると確信させました。つまり、初期の開発でこれらのポートを普及させ、公開していた人はそれほど多くいなかったということです。最初に3000を使った人がいて、後続の人は、合理的であるため、変更する価値があるとは考えなかったのでしょう。最初の人が3000を選んだのには合理的な理由があったに違いない、と考えたのかもしれません。番号を変更すると不要なエラーが発生する可能性があるため、そのままにしておきましょう。これも、これらのポートの履歴を追跡するのが非常に困難になっている理由でしょう。なぜなら、それは1つのプロトコルが次のプロトコルに影響を与えた明確な記録ではなく、むしろ多くの合理的な人々が同時に同じ答えに収束し、必ずしも互いにコミュニケーションをとっていなくてもそれに同意したというものです。例えば、ポート3000については、敬意、無関心、あるいは単純さから、Node.js、Next.js、Reactなどが先行者が採用した同じ3000の慣習を使用した可能性があり、それが普及に貢献しました。人々がまだソフトウェアのドキュメントを読んでいた頃のことでしょう。Node.jsの行:app.listen(3000, () => console.log('Server running on port 3000'));は、信じられないほどの3000のエバンジェリストになったに違いありません。そして、当時のブートキャンプの怠惰さが、そのポート番号をより型破りなものに変更する創造的な意欲を持っていなかったため、さらに急速に広まったのだろうと推測します。いずれにしても、これは掘り下げるのが楽しいトピックでしたが、特に実用的ではありませんでしたが、私がこのことから得た唯一のことといえば、次にポートを起動するときは、退屈なデフォルトのポート番号よりも記憶に残るものを考えようということです。例えば、ポートのチャック・ノリスのためにポート7373、あるいはプロジェクトがeで始まるなら27182などです。もしこれが楽しかったなら、Substackで購読するか、RSSで購読できます。免責事項:見つけた情報のいくつかには不正確または不完全なものがある可能性があります。その場合、可能な限り内容を更新するよう最善を尽くします。