開発者向け
Macでポート5000や7000が使用中になる:AirPlayレシーバー
AppleはTCPポート5000と7000をAirPlay用として挙げています。AirPlayレシーバーがオンのときは、開発サーバはこれらのポートを使えません。
症状
- ポート5000で動かすFlaskなどの開発サーバが「address already in use」で停止します。
lsofで、ポート5000または7000にControlCenterが表示されます。curl localhost:5000が、自分のアプリ以外からの応答を返します。
考えられる原因
- AirPlayレシーバー。AirPlayレシーバーを使うと、ほかのAppleデバイスからMacにストリーミングできます。Appleはポート5000と7000をAirPlay用として挙げています。
- 別のサーバ。プロセスがControlCenterでなければ、別のアプリがそのポートを使っています。Macでポートが使用中を参照してください。
確認方法
ポート5000を使っているプロセスを探します。
lsof -nP -iTCP:5000 -sTCP:LISTEN出力COMMAND列に
ControlCenterがある行は、AirPlayレシーバーです。ポート7000を使っているプロセスを探します。
lsof -nP -iTCP:7000 -sTCP:LISTEN
解決方法
いちばん簡単なのは、開発サーバで別のポート(5001や8000など)を使うことです。
ポートを空けるには、アップルメニュー>「システム設定」>「一般」>「AirDropとHandoff」を選択します。新しいバージョンでは「AirDropと連係」という名前です。
「AirPlayレシーバー」をオフにします。
macOS 12では、設定は「システム環境設定」>「共有」>「AirPlayレシーバー」にあります。
もう一度lsofを実行して、ポートが空いたことを確認します。
lsof -nP -iTCP:5000 -sTCP:LISTEN
よくある質問
AirPlayレシーバーをオンのままにできますか?
はい。サーバを別のポートで実行してください。AirPlayレシーバーをオフにする必要があるのは、アプリがどうしてもポート5000や7000を使う場合だけです。
Linuxではポート5000でサーバが動くのはなぜですか?
AirPlayレシーバーはmacOSの機能です。ほかのOSでは、このポートをその用途には使いません。
出典
- Appleサポート:Appleソフトウェア製品で使われるTCPおよびUDPポート
- Appleサポート:MacでAirDropと連係の設定を変更する
- lsof(8)、macOS 27.2に付属のmanページ
出典は2026年10月29日に確認しました。manページはmacOSに付属のものです。「ターミナル」でman <name>を実行すると開けます。