ngrok vs. Expose: Web開発者向けのオープンソースPHPトンネル

Current comparison
Looking for the main ngrok alternative guide?
We keep the latest ngrok alternative comparison, CLI commands, pricing notes, and webhook examples on one canonical page.
Open the InstaTunnel ngrok alternative guideQuick answer
ngrok vs Beyond CodeのExpose:オープンソーストンネル: quick answer
If free tunnel limits interrupt your workflow, compare session length, stable URLs, concurrent tunnels, and paid-plan pricing before choosing a localhost tunnel tool.
What free tunnel limits should developers check first?
Check session duration, URL stability, concurrent tunnels, custom subdomains, bandwidth or request limits, and whether webhook callbacks survive restarts.
How does InstaTunnel handle longer development sessions?
InstaTunnel Free is designed around 24-hour sessions, with Pro available for higher limits and MCP endpoint tunnel workflows.
APIを構築したり、Stripe、Shopify、GitHubのWebhookを設定したり、ステージングにデプロイせずにクライアントに動作確認を見せたりする必要がある場合、ほぼ確実に一度はngrokを使ったことがあるでしょう。10年以上にわたり、「localhostをどう共有するか」の標準解答として位置付けられています。
しかし、ngrokの製品は変化しています。シンプルな開発者向けユーティリティから、完全なイン ingressおよびAPIゲートウェイプラットフォームへと成長し、その無料プランもその変化を反映しています。これにより、より狭く、開発者に焦点を当てた代替案の余地が生まれました。その中でも特に確立されているのが、Beyond Code(Laravel HerdやTinkerwellの開発元)が作ったオープンソースのPHPトンネル、Exposeです。
この記事では、これら2つのツールを、古いブログ記事でよく語られる内容ではなく、実際の現状に基づいて比較します。
(注:これはBeyond CodeによるExposeであり、他のクロスプロトコルトンネルツールであるLocalXposeではありません。異なる製品で、似た名前です。)
なぜローカルトンネルが必要なのか
ローカルサーバー(http://localhost:8000)はインターネットからアクセスできません — これがデフォルトの設定です。しかし、次のような場合に問題となります:
- Webhook:StripeやGitHubなどのサービスは、公開URLにPOSTイベントを送る必要があります。
- モバイルテスト:スマホやエミュレータが、あなたのローカルバックエンドと通信できる実際のエンドポイントを必要とします。
- クライアントデモ:進行中の作業をデプロイせずに見せる場合。
トンネリングツールは、あなたのマシン上でクライアントを実行し、リレーサーバーへのアウトバウンド接続を開きます。そのサーバーが公開URLを提供し、トラフィックをトンネル経由であなたのローカルポートに転送します。
ngrok:現状のリーダー
2013年にAlan Shreveによって作られ、Go言語で書かれたngrokは、多くの開発者がトンネリングを学んだツールです。それ以降、自身のマーケティングでは「ユニバーサルゲートウェイ」と呼ばれる位置付けに再定義され、Kubernetes ingressやトラフィックポリシールール(WAF、OAuth/OIDC、SAML)、エンドポイントプールによる負荷分散、エンタープライズ向けのSOC 2/HIPAA準拠など、多彩な機能を提供しています。HTTP、HTTPS、TCP、(有料プランで)TLSトラフィックをサポートし、Webサーバー以外の用途(SSHセッション、ゲームサーバー、データベースポートなど)にも適しています。
無料プランの制限(とその範囲外)
ngrokの現在の無料プランの制限は以下の通りです:
| リソース | 無料プランの制限 |
|---|---|
| オンラインエンドポイント | 最大3 |
| データ送信量 | 1 GB/月 |
| HTTP/Sリクエスト | 20,000/月 |
| TCP接続 | 5,000/月(TCPを有効にするにはカード認証必要) |
| TLSエンドポイント | 利用不可 |
| チームメンバー | 1 |
ngrokの無料プランに関する誤解を解くための補足:
- 2時間のセッションタイムアウトはありません。 ngrokのドキュメントには、無料プランはエンドポイントにタイムアウトがなく、バックグラウンドサービスとして無期限に動作させられると明記されています。多くの比較記事でこれが事実として語られていますが、ngrokの最新ドキュメントでは正確ではありません。
- 無料URLは毎回ランダムではありません。 ngrokアカウント(無料も含む)は、1つの「開発用ドメイン」(例:
your-name.ngrok-free.app)を割り当てられ、セッションごとに新たに生成されるわけではありません。カスタマイズや独自ドメインの追加は無料プランではできませんが、古い記事のように頻繁に変わるわけではありません。 - 警告ページはアップグレード不要で回避可能。 ngrokは無料エンドポイントにセキュリティの警告ページを挿入しますが、これは
ngrok-skip-browser-warningヘッダーや非デフォルトのUser-Agentを送ることでスキップ可能です。API/Webhookトラフィックには影響しません。アップグレードによって完全に除去されますが、無料プランでも実質的に問題ありません。
実際に制限となるのは、月1GBのデータと20,000リクエストがすぐに消費されること、TCPトンネルにはカード認証が必要な点です。
現行の有料プラン
ngrokはプラン名を簡素化しています。現状、「Personal」プランはなく、以下の4つです:
- Hobbyist — $8/月(年払い、月額$10): 3つのオンラインエンドポイント、5GBのデータ転送、100,000リクエスト、警告ページなし、ngrokブランドのドメイン。
- Pay-as-you-go — $20/月($20の利用分含む)+従量課金: 無制限のオンラインエンドポイント、独自ドメイン利用可能、チームメンバー無制限(3人含む)。
- Enterprise — カスタム価格設定、SSO/SCIM、HIPAA BAA、専用サポート。
Expose:PHPネイティブの代替
ExposeはMarcel PociotとBeyond Codeチーム(Laravel HerdやTinkerwellの開発元)によって作られました。ngrokとは異なり、完全にPHPで書かれ、HTTP/HTTPSに特化しています — 生のTCPやUDPには対応せず、Kubernetes ingressコントローラーを目指していません。主にこのブログで取り上げるワークフロー(ローカルWeb開発、Webhookテスト、クライアントプレビュー)に焦点を当てています。
オープンソース(MITライセンス、クライアントとサーバー両方)であり、これがngrokとの最大の差別化ポイントです。
インストール方法
Exposeの公式ドキュメントに基づく現在のインストール方法:
Composer(グローバルインストール):
composer global require exposedev/expose
グローバルのComposerバイナリディレクトリがPATHに含まれていることを確認してください。
PHPアーカイブ(PHAR)、Composer不要:
curl https://github.com/exposedev/expose/raw/master/builds/expose -L --output expose
chmod +x expose
sudo mv expose /usr/local/bin/expose
一つ注意点:PHARの”バイナリ”としてインストールしても、ローカルにPHPが必要です — Beyond CodeのFAQもこれを確認しています。PHPを他の目的で使っていない場合、ngrokの単一Goバイナリとは異なり、依存関係があります。
プロジェクトのGitHub組織はbeyondcodeからexposedevに移動しています。古いbeyondcode/exposeのComposerパッケージも存在しますが、ドキュメントはexposedev/exposeを指しています。
認証とサイト共有
expose token YOUR_TOKEN
expose share http://localhost:8000
ProまたはTeamアカウントを持つ場合(または自サーバー運用の場合)、固定サブドメインをリクエストできます:
expose share http://localhost:8000 --subdomain=my-awesome-app
ダッシュボード
ExposeはローカルWebダッシュボード(http://127.0.0.1:4040、ngrokと同じ)を提供し、受信HTTPリクエストの検査やリプレイが可能です。Expose 3(現在のメジャーバージョン)には、最近追加された便利な機能があります:
- リプレイと修正 — ヘッダーやURI、ペイロードを編集してからリプレイ可能。
- Request Plugins — GitHubやPaddle BillingのWebhook形式を認識し、ダッシュボードやCLIで関連ペイロードフィールドを直接表示。
- Vite検出 — Vite開発サーバーが動作中の場合、自動的にViteトンネルをルーティングし、ホットリロードされたCSS/JSが共有トンネルで壊れる問題を解決。
catch-allコマンド — 何でも返すトンネルを起動し、Webhookペイロードの素早い検査に便利。
自ホスティングと無料のマネージド tier の違い — 重要なポイント
これについての比較記事は簡略化しすぎていることがあります。「Exposeはオープンソースなので無料で全て使える」というのは、自己ホスティングしない場合は正確ではありません。
Exposeの無料(”Hobby”)マネージドtierは、Beyond Codeのドキュメントによると、実際には制約があります。1つのサーバー(EUデータセンター)、毎回ランダムなトンネル名、接続ごとに時間制限です。これはngrokの無料プランと比べて大きく異なり、安定したドメインとタイムアウトなしの状態を提供します。
オープンソースサーバーを自己ホスティングすれば、これらの制約は実質的に解除されます。ドメインは自分で設定でき、時間制限もなく、帯域幅も自分のインフラ次第です。ただし、VPSなどのサーバーを立てて維持管理する必要があります(HetznerやDigitalOceanの低コストVPSで十分)。これは継続的な責任となります。
Expose ProとTeam(有料のマネージドプラン)は、持続的なURLやカスタムドメイン、予約サブドメイン、Beyond Codeのグローバルサーバーネットワークを提供し、自分でサーバーを運用する必要はありません。
現在の料金設定:
| プラン | 価格 | 内容 |
|---|---|---|
| Hobby | 無料 | EUの単一サーバー、ランダムなトンネル名、接続時間制限 |
| 自ホスティング | 無料(インフラコストのみ) | 完全制御、カスタムドメイン、時間制限なし、帯域幅は自己管理 |
| Pro | $79/ユーザー/年 | 持続的URL、カスタムドメイン、予約サブドメイン、グローバルサーバーネットワーク、時間制限なし |
| Team | $229/チーム/年 | Proの全機能、最大10ユーザー、優先サポート |
Laravelとの連携(修正済み)
よくある誤解は、ExposeがLaravel Valetの「デフォルト」をngrokに置き換えたというものです。これは正確ではありません — Valet 4+は3つの共有ツール(ngrok、expose、cloudflared)をサポートし、valet share-tool <tool>で選択します。ngrokは引き続きValetのデフォルトです。
ExposeはLaravel Herdとの連携がより密接です。これはBeyond Codeの最新のローカル開発環境(Valetの後継で、macOSとWindows対応)で、ExposeをHerdの設定UIから直接認証トークン設定できるなど、より便利になっています。(出典:expose.dev/docs/getting-started/authentication)
機能比較
| 機能 | ngrok | Expose |
|---|---|---|
| 主な用途 | ネットワーク ingress;エンタープライズAPIゲートウェイ | Web開発用HTTP/HTTPSトンネル |
| 言語 / 実行環境 | Go(単一バイナリ) | PHP(PHARはPHP必要) |
| プロトコル | HTTP/S、TCP、TLS(有料) | HTTP、HTTPSのみ |
| オープンソース | いいえ | はい(MIT、クライアント+サーバー) |
| 無料プランの帯域/リクエスト | 1 GB / 20,000リクエスト/月 | ボリューム制限なし(ただし単一サーバー+時間制限) |
| 無料URL | アカウントごとに固定の開発用ドメイン | 接続ごとにランダムサブドメイン |
| Webhookの警告ページ | あり(ヘッダーでバイパス可能) | なし |
| リクエスト検査 | ローカルダッシュボード、リプレイ | ローカルダッシュボード、編集リプレイ、Webhook対応Request Plugins |
| カスタムドメイン | 有料プランのみ($8–10/月) | 自ホスティングなら無料、Proは$79/ユーザー/年 |
| Kubernetes/エンタープライズ ingress | あり(ビルトインのオペレーター、SSO/SCIM、HIPAA対応) | 対象外 |
それぞれのツールが適するケース
ngrokを使い続けるべき場合: - HTTP以外のトンネリング(SSH、データベースポート、ゲームサーバー、TCP/TLS)を必要とする場合。 - Kubernetes ingressやSSO/SAML、HIPAAやSOC 2のコンプライアンスが必要な場合。 - PHPを依存関係にしたくない場合。
Exposeを検討すべき場合: - HTTP/Webhookの作業が多く、PHP/Laravel環境(Herd、Valet、Sail)にいる場合。 - 完全無料で無制限のセットアップを望み、オープンソースサーバーを自サーバーに自己ホスティングできる場合。 - Webhook対応ダッシュボード(GitHub/Paddleペイロード検出、Vite自動ルーティング)が実際のデバッグに合う場合。
どちらも「勝ち負け」ではなく、重なる部分と異なる部分があり、純粋なTCP/エンタープライズ ingress(ngrokの領域)か、PHPネイティブのシンプルなHTTPトンネル(Exposeの領域)かによって選択が変わります。
更新履歴
元のドラフトに加筆・修正した内容と出典:
- ngrokの無料プランの「2時間セッションタイムアウト」誤情報を削除。 ngrokのFree Plan Limitsには、エンドポイントにタイムアウトがなく、無期限にバックグラウンドで動作できると明記されています。(出典:ngrokドキュメント、Free Plan Limits)
- URLが毎回ランダムに変わるとの記述を修正。 ngrokはアカウントごとに1つのdevドメイン(例:
your-name.ngrok-free.app)を割り当て、セッションごとに新たに生成されません。2023年頃からのドメイン変更に伴う仕様です。(出典:ngrokドキュメント、Free Plan Limits) - 警告ページはアップグレード不要で回避可能と修正。 ngrokは無料エンドポイントにセキュリティ警告ページを挿入しますが、
ngrok-skip-browser-warningヘッダーやカスタムUser-Agentで回避でき、API/Webhookには影響しません。(出典:ngrokドキュメント、Free Plan Limits) - ngrokのプラン名と価格を更新。 古い「Personal」プランは廃止され、現行はFree、Hobbyist($8/月、年払い)、Pay-as-you-go($20/月+従量)、Enterpriseです。(出典:ngrok.com/pricing)
- Exposeのインストールコマンドを修正。
composer global require exposedev/exposeが正しい。GitHub組織もbeyondcodeからexposedevに移行済み。PHARインストールも紹介。(出典:expose.dev/docs/getting-started/installation) - PHARのバイナリはPHPが必要。 ngrokのような単一バイナリではなく、PHP依存があります。(出典:expose.dev FAQ)
- Exposeの料金体系を更新。 Hobby(無料、制限あり)、Pro($79/ユーザー/年)、Team($229/チーム/年、最大10人)を掲載。(出典:expose.dev/pricing)
- 無料のHobbyプランには制約があることを明示。 ランダムなトンネル名、接続時間制限、EUサーバー1つ。自己ホスティングなら制約なし。(出典:expose.dev/docs/getting-started/authentication)
- Laravel Valetとの連携について修正。 Valet 4+はngrok、expose、cloudflaredを選択可能で、ngrokがデフォルトです。(出典:laravel.com/docs Valet、Valet 4.0リリースノート)
- Laravel Herdとの連携を追加。 HerdはExposeとより密接に連携し、設定UIから認証トークン設定可能です。(出典:expose.dev/docs/getting-started/authentication)
- Expose 3.0の新機能を追加。 ダッシュボードの改良、リプレイ修正、Webhook対応Request Plugins、Vite自動検出、
catch-allコマンドなど。(出典:expose.dev/docs/release-notes) - 未検証・曖昧な記述を削除。 VPSの具体的な価格例などは控え、一般的な低コストVPSの表現に留めました。
- SEOやプロモーション表現を除去。 タイトルやメタ記述も自然な表現に修正しています。
Related InstaTunnel pages
Continue from this article into the most relevant product guides and workflows.
Related Topics
Keep building with InstaTunnel
Read the docs for implementation details or compare plans before you ship.