開発者向け

Macでポート5000や7000が使用中になる:AirPlayレシーバー

AppleはTCPポート5000と7000をAirPlay用として挙げています。AirPlayレシーバーがオンのときは、開発サーバはこれらのポートを使えません。

対象:macOS 12 Monterey以降。設定は「一般」>「AirDropとHandoff」にあり、新しいバージョンでは「AirDropと連係」です。確認日:2026年10月29日

症状

  • ポート5000で動かすFlaskなどの開発サーバが「address already in use」で停止します。
  • lsofで、ポート5000または7000にControlCenterが表示されます。
  • curl localhost:5000が、自分のアプリ以外からの応答を返します。

考えられる原因

  • AirPlayレシーバー。AirPlayレシーバーを使うと、ほかのAppleデバイスからMacにストリーミングできます。Appleはポート5000と7000をAirPlay用として挙げています。
  • 別のサーバ。プロセスがControlCenterでなければ、別のアプリがそのポートを使っています。Macでポートが使用中を参照してください。

確認方法

  1. ポート5000を使っているプロセスを探します。

    lsof -nP -iTCP:5000 -sTCP:LISTEN

    出力COMMAND列にControlCenterがある行は、AirPlayレシーバーです。

  2. ポート7000を使っているプロセスを探します。

    lsof -nP -iTCP:7000 -sTCP:LISTEN

解決方法

  1. いちばん簡単なのは、開発サーバで別のポート(5001や8000など)を使うことです。

  2. ポートを空けるには、アップルメニュー>「システム設定」>「一般」>「AirDropとHandoff」を選択します。新しいバージョンでは「AirDropと連係」という名前です。

  3. 「AirPlayレシーバー」をオフにします。

  4. macOS 12では、設定は「システム環境設定」>「共有」>「AirPlayレシーバー」にあります。

  5. もう一度lsofを実行して、ポートが空いたことを確認します。

    lsof -nP -iTCP:5000 -sTCP:LISTEN

よくある質問

AirPlayレシーバーをオンのままにできますか?

はい。サーバを別のポートで実行してください。AirPlayレシーバーをオフにする必要があるのは、アプリがどうしてもポート5000や7000を使う場合だけです。

Linuxではポート5000でサーバが動くのはなぜですか?

AirPlayレシーバーはmacOSの機能です。ほかのOSでは、このポートをその用途には使いません。

出典

出典は2026年10月29日に確認しました。manページはmacOSに付属のものです。「ターミナル」でman <name>を実行すると開けます。