Cloudflare Tunnel でローカルの React アプリをインターネットに公開する
Cloudflare Tunnel を使い、port を開けたり firewall を触ったりせずに localhost:5173 の React アプリを HTTPS で公開します。Vite の Blocked request エラーの対処と、1 コマンドの Quick Tunnel も扱います。
Lab Overview and Learning Objectives
開始前の注意
Cloudflare Tunnel は cloudflared プロセスを通じて、マシンから Cloudflare ネットワークへの outbound 接続を張ります。そのため公開 port を開けたり固定 IP を用意したりする必要がありません。Cloudflare が前段の reverse proxy として HTTPS を提供し、マシンの実 IP を隠します。本ラボはサンドボックスアカウントとデモアプリを使い、実際の社内サービスは公開しません。
- Cloudflare アカウントと、Cloudflare に追加済みの domain を用意します(スクリーンショットは devtest.uk を使用。ご自身の domain に読み替えてください)。
- cloudflared をインストールできるマシン(本ラボは Windows)と、管理者としてコマンドを実行できる権限を用意します。
- Vite で React アプリを作成・起動できるよう Node.js をインストールします。
- マシンから Cloudflare へ port 7844 の outbound 通信ができることを確認します。
- 本ラボでは実データや機密情報を含むサービスを tunnel で公開しないでください。
1. シンプルな React アプリを作成して起動
tunnel には向き先となる稼働中のアプリが必要です。ここでは Vite で React アプリを素早く作成します。dev server は既定の port 5173 で動きます。別 port で動くアプリが既にある場合は、その port を以降の手順で使います。
- Node.js が入ったマシンでターミナルを開きます。
- 下のコマンドで Vite の React アプリを作成し、依存関係をインストールします。
- npm run dev を実行して dev server を起動します。
- ラボ中は dev server を起動したままにします。
npm create vite@latest my-react-app -- --template react
cd my-react-app
npm install
npm run dev
2. localhost でアプリが動くことを確認
インターネットに公開する前に、ローカルで正しく動くことを確認します。この画面は、ラボ最後に公開アドレス経由で再度目にすることになります。
- ブラウザで http://localhost:5173 を開きます。
- 既定の React ページに Get started の見出しと Count is 0 ボタンが表示されることを確認します。
- Count is 0 を押して、静的なページではなく実際に動作していることを確認します。

3. Networking → Tunnels を開き Create Tunnel を押す
Cloudflare は tunnel を dashboard の Networking 配下で管理します。後から tunnel の接続状態を確認する場所でもあります。
- Cloudflare Dashboard にサインインします。
- 左メニューで Networking を開き、Tunnels を選びます。
- Get started with Cloudflare Tunnel の画面で Create Tunnel を押します。

4. tunnel に名前を付けて作成
Create a Tunnel 画面は非常にシンプルで、名前を付けて作成するだけです。この段階では connector の種類を選びません。cloudflared connector のインストールは直後の手順で行います。
- Tunnel name に分かりやすい名前(例: react-tunnel)を入力します。
- Create Tunnel を押します。

5. OS と Architecture を選び cloudflared をダウンロード
Setup Environment では、選んだ OS に応じたインストール手順と tunnel の token が表示されます。token のすぐ上に Security Notice があります。token はアカウントへのアクセス権を持つため、必ず秘密にしてください。
- Operating System でマシンの OS(例: Windows)を選びます。
- Architecture で 64-bit または 32-bit を選びます。
- cloudflared-windows-amd64.msi のリンクからインストーラーをダウンロードし、実行します。
- macOS/Linux/Docker の場合は、その選択で表示されるコマンドに従います。

6. 管理者権限の Command Prompt で connector をインストール
service install コマンドは cloudflared を Windows service として登録し、token でこのマシンを作成した tunnel に紐付けます。service を作るため管理者権限が必要です。
- Command Prompt を管理者として開きます。
- dashboard の Run the following command のコマンドをそのままコピーします(token が含まれています)。
- Command Prompt に貼り付けて実行します。コマンドの形は下記のとおりです。
- ログに Agent service for cloudflared installed successfully が出ることを確認します。
cloudflared.exe service install <YOUR_TUNNEL_TOKEN>
7. Tunnel connected successfully を確認
Connection Status は最初 Waiting for your Tunnel to connect... と No connection detected yet を表示します。インストールコマンドを実行すると数秒で handshake が完了し、ページを再読み込みせずに状態が変わります。
- tunnel のページを開いている dashboard のタブに戻ります。
- Connection Status が Tunnel connected successfully に変わるのを待ちます。
- Continue を押してセットアップを完了します。

8. 一覧で tunnel が Healthy であることを確認
Tunnels 一覧は後から健全性を確認する場所です。Healthy は connector が Cloudflare への接続を維持している状態、Replicas はこの tunnel で動いている connector の数を示します。
- Networking → Tunnels を再度開きます。
- 一覧から react-tunnel の行を探します。
- Status が Healthy、Replicas が 1 であることを確認します。
- Routes 列がまだ No routes であることに注目します。次の手順で設定します。

9. Routes タブを開き Add route を押す
route は tunnel に入ってきた traffic の転送先を決める設定です。route がなければ Healthy な tunnel でも誰にも応答できません。
- tunnel 名 react-tunnel を押して詳細ページを開きます。
- Routes タブを選びます。
- 右上の Add route を押します。

10. route の種類で Published application を選ぶ
route には 4 種類あります。Published application はローカルアプリを public hostname でインターネットに公開する種類で、本ラボの目的に合致します。残りの 3 種類(Private hostname、Private CIDR、Workers VPC)は内部アクセス用で、公開アドレスは作られません。
- Add a route ダイアログで Published application のカードを選びます。

11. hostname と Service URL を入力して Add route
この手順で、公開アドレス(自分の domain のサブドメイン)をローカルで動くアプリに紐付けます。Service URL はマシン上の cloudflared が呼び出す先なので、公開アドレスではなく localhost を指定します。
- Subdomain に react-tunnel を入力します。
- Domain で自分の domain を選びます(スクリーンショットは devtest.uk)。
- Full hostname が react-tunnel.devtest.uk になっていることを確認します。
- Service URL に http://localhost:5173(手順 1 の dev server の port)を入力します。
- Path は空のまま Add route を押します。

12. route と DNS record が作られたことを確認
Cloudflare は hostname の DNS record を自動作成するため、DNS タブを開く必要はありません。record は tunnel を指す CNAME で、これによりマシンに公開 IP が不要になります。
- Route added successfully のメッセージを確認します。
- Type が Published application、Hostname が react-tunnel.devtest.uk であることを確認します。
- DNS record created の行に Type: CNAME があることを確認します。
- メッセージを閉じます。

13. エラーが出た場合: Vite の Blocked request
この時点で公開アドレスを開くと、多くの場合 Blocked request. This host is not allowed. という白い画面になります。これは tunnel の問題ではありません。tunnel は request をマシンまで届けていますが、Vite の dev server は Host が localhost の request しか受け付けず、DNS rebinding 攻撃を防ぐため未知の hostname を拒否します。
- ブラウザで https://react-tunnel.devtest.uk を開きます。
- Blocked request. This host ("react-tunnel.devtest.uk") is not allowed が出たら、その下のヒント行を読みます。
- Vite が報告している hostname を正確に控えます。次の手順で登録します。

14. vite.config.js の allowedHosts に hostname を追加
Vite では server.allowedHosts で受け付ける hostname を宣言できます。保護機能を丸ごと無効化するのではなく、tunnel の hostname だけを追加するのが最も安全な対処です。
- my-react-app フォルダの vite.config.js を開きます。
- 下記のように server.allowedHosts に自分の tunnel hostname を追加します。
- ファイルを保存すると、Vite が dev server を自動再起動します。
- 反映されない場合は Ctrl+C で停止し、npm run dev を再実行します。
import react from '@vitejs/plugin-react'
import { defineConfig } from 'vite'
// https://vite.dev/config/
export default defineConfig({
plugins: [react()],
server: {
allowedHosts: ['react-tunnel.devtest.uk'],
},
})
15. 公開 URL を再読み込みして確認
ブラウザ → Cloudflare → tunnel → マシン上の cloudflared → port 5173 の dev server という経路全体を確認する手順です。HTTPS 証明書は Cloudflare 側が用意するため、自分で管理するものはありません。
- https://react-tunnel.devtest.uk を再読み込みします。
- localhost:5173 と同じ React ページが表示されることを確認します。
- アドレスバーが https で、証明書の警告が出ないことを確認します。
- モバイル回線のスマートフォンから開き、実際に公開されていることを確認します。

16. Quick Tunnel を試す(任意)
テスト中にすぐ共有したいだけなら、Quick Tunnel が 1 コマンドで公開 URL を作ってくれます。tunnel の作成も domain も不要です。URL は trycloudflare.com 上のランダムな値で、あくまで一時的なものです。
- ローカルアプリを port 5173 で起動したままにします。
- 別のターミナルを開き、下のコマンドを実行します。
- cloudflared が https://<ランダム>.trycloudflare.com 形式の URL を出力します。
- Vite に再度ブロックされる場合は、その trycloudflare.com の hostname を allowedHosts に追加します。
- URL を開いて確認し、終わったら Ctrl+C で停止します。
cloudflared tunnel --url http://localhost:517317. クリーンアップ
使い終わったら tunnel と connector を削除し、マシンへの経路を残さないようにします。
- tunnel の Routes タブで、作成した react-tunnel の route を削除します。
- Tunnels 一覧で react-tunnel を削除します。
- マシン側で cloudflared service uninstall を実行します(または cloudflared パッケージをアンインストール)。
- React の dev server を停止します(ターミナルで Ctrl+C)。