← 記事一覧

localhostのサイトをスマホで確認する方法(実機とスマホ表示)

ローカル開発中のサイトを実機のスマホやPCのスマホ表示で開く方法。LANのIPと--host、Chromeのポート転送、トンネル、エミュレーターでのアドレス、よくあるトラブルの対処法。

localhostのサイトをスマホで開くには、開発サーバーをネットワークで待ち受けるようにし(たいていは --host オプション)、スマホを同じWi-Fiにつないで、PCのローカルIPアドレスとポートを開きます。たとえば http://192.168.1.20:5173 です。ネットワークでブロックされる場合は、USB経由のChromeのポート転送かトンネルを使います。スマホでのレイアウトを見たいだけなら、スマホは使わずに、PCのChromeでlocalhostをスマホ表示で開けば済みます。

一番手軽なのは、PCのChromeでlocalhostをスマホ表示にする方法

PCの localhost はPC上のどのツールからも開けるので、ネットワークの設定は不要です。

  • Chrome DevToolsのデバイスモード:DevToolsを開き、Ctrl + Shift + M(Macは Cmd + Shift + M)でデバイスツールバーを切り替えてスマホを選びます。Chromeのスマホエミュレーターの使い方をご覧ください。
  • ローカルページに対応したスマホ表示の拡張機能。Mobile View Extension は localhost で動作し、ローカルのページ間を移動してもスマホ表示を保つので、開発中ずっと開いたままにしておけます。

オンラインの「レスポンシブチェッカー」の多くはこれができません。自社のサーバーからURLを読み込むため、あなたのPCに届かないからです。

実際のタッチ操作、実際のキーボード、Safariが必要になったら、実機に移りましょう。

方法1:同じWi-FiとPCのローカルIP

1. 開発サーバーをすべてのインターフェースで待ち受ける

多くの開発サーバーは、デフォルトでは localhost(127.0.0.1)でしか待ち受けておらず、ほかの端末からはアクセスできません。ネットワークで待ち受けるよう指定します。

ツール コマンド
Vite npm run dev -- --host
Astro npm run dev -- --host
Next.js next dev -H 0.0.0.0
Create React App / webpack dev server HOST=0.0.0.0 または host: '0.0.0.0' を設定
Python python -m http.server 8000 --bind 0.0.0.0

ViteとAstroは --host 付きで起動すると「Network」のURLを表示します。それがスマホで開くアドレスです。

2. ローカルIPアドレスを調べる

ツールが表示しない場合は、macOSなら システム設定 > Wi-Fi > 詳細、Windowsなら ipconfig を実行してIPv4アドレスを、Linuxなら ip addr を実行して確認します。通常は 192.168. か 10. で始まります。

3. スマホで開く

スマホを同じWi-Fiネットワークにつなぎ、http://<PCのIP>:<ポート> を開きます。

開けない場合

  • ファイアウォール。 macOSやWindowsが、NodeやPythonへの受信接続をブロックしていることがあります。確認が出たらアプリを許可するか、ポートのルールを追加します。
  • ゲスト用や社内のネットワーク。 端末どうしを分離している(クライアント分離)ネットワークが多くあります。方法2か3を使いましょう。
  • localhost が直書きされたURL。 フロントエンドが http://localhost:8080/api を呼んでいると、スマホは自分自身に接続しようとします。相対URLにするか、APIのホストを環境変数にしましょう。
  • CORSとCookie。 新しいオリジン(192.168.1.20:5173)になることで、localhost だけを許可しているCookieやCORSの設定が効かなくなることがあります。

方法2:AndroidスマホへのChromeのポート転送

AndroidスマホをUSBでつなぎ、USBデバッグを有効にしていれば、Chromeがスマホ側のポートをPCにつなげてくれます。

  1. PCで chrome://inspect/#devices を開きます。
  2. Port forwarding をクリックし、ポート(例:5173)と転送先 localhost:5173 を追加して、Enable port forwarding にチェックを入れます。
  3. スマホのChromeで http://localhost:5173 を開きます。

スマホ側でも localhost を使うので、CookieやCORSはPCと同じように動き、PCのDevToolsからページを検証することもできます。USBデバッグの設定手順はPCからAndroid表示を確認する方法で解説しています。

方法3:公開HTTPS URLを持つトンネル

トンネルを使うと、ローカルサーバーに一時的な公開アドレスが付きます。どんなネットワークでも使え、Service Worker、位置情報、カメラ、Secure属性のCookieなど、一部の機能に必要なHTTPSも使えます。

よく使われるのは次の2つです。

  • Cloudflare Tunnel:cloudflared tunnel --url http://localhost:5173 で、一時的な trycloudflare.com のURLが表示されます。
  • ngrok:ngrok http 5173 で転送用URLが表示されます(無料アカウントが必要)。

トンネルが動いている間は、URLを知っている人なら誰でも開発サーバーにアクセスできます。使い終わったら止め、管理画面や本番データは公開しないようにしましょう。また、未知のホスト名をデフォルトでブロックするフレームワークもあります。たとえばViteでは、トンネルのドメインを server.allowedHosts に追加する必要があります。

方法4:エミュレーターとシミュレーター

  • Xcode Simulator(Mac): Macのネットワークを共有するので、シミュレーター上のSafariで http://localhost:5173 をそのまま開けます。iPhoneなしでiPhone表示を確認する方法をご覧ください。
  • Android Studioのエミュレーター: localhost はエミュレーター自身を指します。PCに接続するには http://10.0.2.2:5173 を使います。

どの方法を使うか

状況 使う方法
コーディング中のレイアウト確認 PCのChromeでのスマホ表示
自宅で自分のスマホでタッチやキーボードを試す 同じWi-Fi+ローカルIP
Androidスマホ、社内ネットワーク、DevToolsが必要 Chromeのポート転送
HTTPS必須の機能、または同僚に共有したい トンネル
iPhoneなしでSafariの挙動を確認 Xcode Simulator

よくある質問

スマホでlocalhostが開けないのはなぜですか?

スマホ上の localhost はスマホ自身を指すからです。PCのローカルIPアドレスを使い、--host や 0.0.0.0 で開発サーバーをネットワークで待ち受けるようにしましょう。

iPhoneでlocalhostを確認するには?

同じWi-FiとPCのIPアドレスを使うか、トンネルを使うか、localhost がそのまま使えるMacのXcode Simulatorを使います。

スマホなしでlocalhostのモバイル版を見られますか?

見られます。DevToolsのデバイスモードか、ローカルページに対応したスマホ表示の拡張機能を使います。

次のサイトをモバイル表示で確認しましょう。

拡張機能を追加して、作業中のタブのまま端末プレビューを開けます。