第8章: cloudflared でローカル環境を安全公開(実践チュートリアル)
個人開発で Stripe Webhook、LINE Bot、GitHub Actions、スマートフォンの実機テストを行う際、ngrok 等の有料プランや時間制限に悩まされた経験はありませんか?
cloudflared(Cloudflare Tunnel) を使えば、完全無料・無制限・高セキュリティ・独自ドメイン対応 でローカル環境を公開できます。
本チュートリアルのゴール
- Quick Tunnel(即時公開):
- アカウント設定すら不要で10秒でローカルポートを世界へ公開
- Named Tunnel(固定ドメイン永続トンネル):
cloudflared tunnel createによる永続トンネル作成dev.your-domain.comへのDNSルーティング自動設定- 設定ファイル(
config.yml)による複数ポート振り分け
【トンネルの仕組み】[ あなたのMac/PC ] (ポート 3000) ↓ (アウトバウンド通信のみで接続)[ Cloudflare エッジネットワーク ] ↓[ 世界中のユーザー / Webhook ] (https://dev.your-domain.com)※ ルーターのポート開放(Port Forwarding)は一切不要!Part 1: Quick Tunnel(今すぐ10秒で公開)
アカウントの認証やドメイン設定を一切行わずに、手元で動いているWebサーバーを即座に公開する手法です。
1. cloudflared のインストール
# macOS (Homebrew)brew install cloudflared
# Linuxsudo apt-get install cloudflared2. ローカルサーバーを立ち上げておく
(例: ポート 3000 で Next.js や Vite が動作している状態)
3. ワンライナーで公開
cloudflared tunnel --url http://localhost:3000ターミナルに以下のような出力が表示されます。
+--------------------------------------------------------------------------------------------+| Your quick Tunnel has been created! Visit it at: || https://silent-night-xxxx.trycloudflare.com |+--------------------------------------------------------------------------------------------+この trycloudflare.com のURLにブラウザやスマホからアクセスすると、手元の localhost:3000 の画面が表示されます。
Webhookテストが終わったら、ターミナルで Ctrl + C を押すだけで安全に通信が切断されます。
Part 2: Named Tunnel(独自ドメインで永続運用)
「毎回ランダムURLが変わるとWebhookの管理画面で再設定するのが面倒」という場合は、固定のサブドメインを割り当てられる Named Tunnel を作成します。
Step 1: Cloudflareアカウントへログイン
cloudflared tunnel loginブラウザが立ち上がり、認可画面が表示されます。ご自身のCloudflare管理下にあるゾーン(ドメイン)を選択して「認可」します。
Step 2: 永続トンネルの作成
cloudflared tunnel create my-dev-tunnel出力例:
Tunnel credentials written to /Users/.../.cloudflared/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.json.Created tunnel my-dev-tunnel with id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxトンネルID(UUID)と認証情報ファイルが作成されます。
Step 3: DNSレコードの自動ルーティング登録
CloudflareのDNSへ、このトンネルへ繋ぐサブドメインを1コマンドで登録します。
# 例: dev.my-saas.com でトンネルに繋げる場合cloudflared tunnel route dns my-dev-tunnel dev.my-saas.comCloudflareのDNSダッシュボードを見ると、dev.my-saas.com のCNAMEレコードがトンネル宛てに自動追加されていることが確認できます。
Step 4: 設定ファイル(config.yml)の作成
~/.cloudflared/config.yml を作成し、ローカルのどのポートにルーティングするかを記述します。
tunnel: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx # ステップ2で出力されたTunnel IDcredentials-file: /Users/your-username/.cloudflared/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.json
ingress: # フロントエンド(React / Next.js) - hostname: dev.my-saas.com service: http://localhost:3000
# バックエンドAPI(Hono / Express) - hostname: api-dev.my-saas.com service: http://localhost:8787
# 一致しないリクエストは404 - service: http_status:404Step 5: トンネルの起動
cloudflared tunnel run my-dev-tunnelこれだけで、世界中どこからでも https://dev.my-saas.com にアクセスすると、安全に自宅のMac上の開発サーバーへ通信が届くようになります。
バックグラウンド常駐サービス化(Mac / Linux)
PC起動時に自動でトンネルを動かしたい場合は、サービスとして登録します。
# システムサービスとしてインストールsudo cloudflared service install
# サービスの開始sudo systemctl start cloudflared # Linuxsudo launchctl start com.cloudflare.cloudflared # macOSまとめ
- Quick Tunnel: アカウント不要、検証や一時的なスマホ確認に最適。
- Named Tunnel: 固定の独自ドメインで、Webhookや自宅サーバーを安全に公開。
- ポート開放ゼロ: 外向きの暗号化コネクションしか張らないため、ルーターに穴を開けるセキュリティリスクが皆無。
次章(第9章)では、このトンネルに対してGoogleログインやGitHubログインの認証壁を設置する Zero Trust(Cloudflare Access) の設定に進みます。
💡 用語解説コラム
[!NOTE] ポート開放 (Port Forwarding)
ルーターの設定で外部からの通信をローカルPCへ通す危険な設定。Cloudflare Tunnelは「外向きの暗号化トンネル」を内側から張るため、ルーターのポートを一切開けずに世界公開できます。
[!NOTE] リバースプロキシ (Reverse Proxy)
クライアントとWebサーバーの間に立ち、リクエストを中継するサーバー。負荷分散、SSL暗号化、セキュリティ保護を一元的に行います。