Tutorial
12 min read
61 views

Expose vs ngrok: PHP逆プロキシのセルフホスティング方法

IT
InstaTunnel Team
Published by the InstaTunnel team | Editorial policy
Expose vs ngrok: 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 guide

Quick answer

Expose vs ngrok: PHP逆プロキシのセルフホスティング: 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.

Laravel & PHPエコシステム:Exposeとngrokの比較

現代のPHPやLaravel開発者にとって、ローカル開発はスムーズに進む仕組みです。おそらくLaravel Herd、Valet、Sailなどのツールを使って.testドメインでアプリケーションを提供しているでしょう。しかし、外部とローカル環境を共有する必要が出てきたとき—クライアントに進行中の機能をデモしたり、StripeやGitHubのWebhookをテストしたり、実機のスマートフォンでレスポンシブレイアウトをプレビューしたり—そのためにはトンネルが必要です。

10年以上にわたり、標準的な選択肢はngrokでした。堅牢でどんなスタックにも対応しますが、無料プランにはワークフローを妨げる制約があります。もう一つの選択肢として注目されているのがExposeです。これはBeyond CodeのMarcel Pociotが開発したオープンソースのPHPネイティブトンネリングツールで、Laravel HerdやTinkerwellの開発チームによるものです。

このガイドでは、実際の運用状況に基づき、両ツールを比較し、予算に優しいVPS上に自分でExposeサーバーをホスティングする方法も解説します。


ngrokの無料プランについて正確に理解する

ngrokは単なるトンネリングユーティリティを超え、フルのインゲスプラットフォームへと進化しています。無料プランは多くの比較コンテンツよりも寛容ですが、実際には制限があり、よくある誤解も存在します。

ngrokの公式ドキュメントによると、無料プランの制限は以下の通りです

リソース 無料プランの制限
データ送信量 1 GB/月
HTTP/Sリクエスト 20,000/月
オンラインエンドポイント 最大3
同時エージェント 3
TCP接続 5,000/月
HTTPリクエストレート 4,000/分
TCP接続レート 100/分
カスタム/ブランドドメイン 無料では利用不可(Hobbyistはngrokブランドドメイン、独自ドメインはPay-as-you-go)

特に誤解されやすいポイントは以下の通りです:

  • 無料プランにはセッションタイムアウトがありません。 ngrokのドキュメントには明記されており、無料エンドポイントはバックグラウンドサービスとして無期限に動作可能です。定期的な再起動は不要です。
  • 毎回新しいランダムサブドメインを取得する必要はありません。 2023年以降、すべてのngrokアカウント(無料も含む)は、永続的に所有できる*静的*ドメイン(例:panda-new-kit.ngrok-free.app)を1つ取得可能です。これにより、再起動時にURLが変わらずに済みます。完全なカスタムドメインではありませんが、「再起動ごとにStripeのWebhook URLを更新しなければならない」問題を解決します。静的ドメインを取得していなければ、接続ごとに新しいランダムURLが割り当てられます。
  • HTTP/Sトラフィックにはブラウザ上に”クリックして続行”のインタースティシャルページが表示されることがありますが、これはフィッシング対策です。WebhookのPOSTリクエストなどプログラムからのリクエストには影響せず、User-Agentngrok-skip-browser-warningヘッダーを送信することでバイパス可能です。

ngrokの有料プランは以下の通りです: - Hobbyist($8–10/月、年払い/月払い選択可、ngrokブランドドメイン、インタースティシャルなし) - Pay-as-you-go($20/月基本料金+従量課金、エンドポイント無制限、独自ドメイン対応) - Enterprise(カスタム価格、SSO/SCIM/コンプライアンス対応)


Expose:PHPネイティブのオープンソース代替

ExposeはHTTP/HTTPSトラフィックのみを扱います。ngrokのようなTCP/UDPの汎用トンネリングは行いません。代わりにWeb開発のワークフローに特化し、そのコアは完全にオープンソース(MITライセンス)でPHPで書かれています。何か問題があれば、実行中のコードを直接読むことが可能です。

このプロジェクトは現在も活発で、exposedev/exposeリポジトリはGitHubで約4,500以上のスターと300以上のフォークを持ち、最新リリースは2026年3月のバージョン3.2.2です。クライアントはPHP 8.2以上が必要です。composer.jsonに明記されており、推奨ではなく必須です。古いPHP 7.4+のガイダンスは時代遅れです。

クライアントのインストール方法

サポートされている方法は以下の通りです:

Laravel Herd — Herdを既に使っている場合は、Herdの設定にトークンを入力するだけです。

PHPアーカイブ(PHAR) — 公式の方法です:

curl https://github.com/exposedev/expose/raw/master/builds/expose -L --output expose
chmod +x expose
sudo mv expose /usr/local/bin/expose

Composer経由:

composer global require exposedev/expose

(注:過去はbeyondcode/exposeとして公開されていましたが、現在はexposedev/exposeが公式です。Packagistもこの名前を解決します。)グローバルのComposerバイナリディレクトリがPATHに含まれていることを確認してください。

サイトの共有

expose token YOUR_TOKEN

次に、.testプロジェクトディレクトリ(Herd/Valetの慣例)から引数なしでexposeを実行するか、明示的なURLを共有します:

expose share http://localhost:8000

ローカルリクエストのダッシュボードはhttp://127.0.0.1:4040にあり、ngrokのインスペクターと似た機能を持ちます。

よくある誤解の修正:Exposeの無料ホスティングではカスタムサブドメインは利用できません。 --subdomainを使うには、Expose Pro/Teamアカウントか自己ホスティングサーバーが必要です:

expose share my-site.test --subdomain=my-site

無料のsharedwithexpose.comサーバー(Beyond Codeがドイツでホスティング)では、各接続にランダムサブドメインが割り当てられ、接続は時間制限があります。安定したカスタムURLを望むならセルフホスティングが最適です。

Exposeの料金(expose.dev)

プラン 価格 内容
Hobby 無料 TLS/SSL、時間制限付き接続、ランダムURL、EUサーバー
Pro $79/年/ユーザー 無制限、永続URL、カスタムドメイン・サブドメイン、グローバルサーバー
Team $229/年/チーム(最大10ユーザー) Proの内容に加え優先サポート

Laravel ValetとHerdとの連携

Laravel Valet(Taylor Otwellのコミュニティ運営のローカル開発ツール)は、現在ngrok、Expose、Cloudflareのcloudflaredの3つの共有ツールをサポートしています。valet share-tool ngrok|expose|cloudflaredで選択可能です。Valetは選択したツールをインストール促し(ngrokやcloudflaredはHomebrew、ExposeはComposer)、valet shareコマンドで使用します。

Beyond CodeのHerdは、Exposeをネイティブに組み込み済みで、Herdの設定UIから直接設定可能です(別途インストール不要)。


機能比較

ngrok (無料/Hobbyist) Expose (Hobby/Pro)
主な用途 ネットワーク全体のインゲス;エンタープライズAPI/K8s Web開発環境、HTTP/Sのみ
言語 Go(クライアント/サーバー) PHP(MITライセンス)
プロトコル HTTP/S, TCP, TLS HTTP/Sのみ
無料URLの安定性 あり(静的ドメイン取得済みの場合) なし(接続ごとにランダム)
カスタムサブドメイン 有料のみ 有料(Pro)または自己ホスティング
リクエストインスペクター あり(localhost:4040風ダッシュボード) あり
自己ホスティング 不可(管理のみ) 可能(詳細ドキュメントあり)

予算内での自己ホスティング:Expose on a VPS

PHP/Laravelに特化し、安定したカスタムサブドメインを年会費なしで持ちたいなら、セルフホスティングが差別化ポイントです。以下は最新の正しい手順です—古いガイドと異なる点に注意してください:自己ホスティングサーバーはクライアントとは別パッケージとなり、独自のバイナリとリポジトリを持ちます。

ステップ1:サーバーの準備とDNS設定

DigitalOceanの基本Dropletは月額$4(512 MiB RAM、1 vCPU、10 GiB SSD、500 GiB転送)から始められます。Ubuntu 24.04 LTSがおすすめです。

DropletのIPに向けて以下のDNS Aレコードを追加: - expose(または任意のサブドメイン例:expose.yourdomain.com) - *.expose(ワイルドカード、すべてのトンネルサブドメインを解決)

ステップ2:PHPとComposerのインストール

ExposeのサーバーパッケージはPHP 8.2以上が必要です:

sudo apt update
sudo apt install php-cli php-curl php-mbstring php-xml php-zip php-sqlite3 unzip git -y

curl -sS https://getcomposer.org/installer -o composer-setup.php
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer

ステップ3:Exposeサーバーのインストール(クライアントではありません)

自己ホスティングサーバーはexposedev/serverリポジトリにあります。クローンして依存関係をインストール:

git clone https://github.com/exposedev/server.git
cd server
composer install

このサーバーコアはトンネリングインフラを提供しますが、Exposéのダッシュボードや課金管理は含まれません(これは管理されたexpose.devプラットフォーム専用です)。

ステップ4:サーバーの起動

php expose-server serve expose.yourdomain.com

このコマンドはデフォルトでポート8080をリッスンします。--port=3000で変更可能です。--validateAuthTokensを付けると認証トークン所有者だけに制限できます(トークンは管理インターフェースから発行・管理)。

ステップ5:TLSのためにNginx(またはApache)を設定

ExposeサーバーはSSL終端を行わないため、リバースプロキシが必要です。まずワイルドカード証明書を取得(CertbotとDNSチャレンジ推奨)、次にNginx設定例:

server {
    listen        443 ssl;
    listen        [::]:443 ssl;
    server_name   expose.yourdomain.com *.expose.yourdomain.com;

    ssl_certificate      /etc/letsencrypt/live/expose.yourdomain.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/expose.yourdomain.com/privkey.pem;

    location / {
        proxy_pass             http://127.0.0.1:8080;
        proxy_read_timeout     60;
        proxy_connect_timeout  60;
        proxy_redirect         off;

        # WebSocket対応
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

設定後、シンボリックリンクを作成し、Nginxを再起動します:

sudo ln -s /etc/nginx/sites-available/expose /etc/nginx/sites-enabled/
sudo systemctl restart nginx

ApacheやHAProxyも同様の設定が可能です(公式ドキュメント参照)。

ステップ6:Supervisorでサーバーを常駐させる

sudo apt install supervisor -y
sudo nano /etc/supervisor/conf.d/expose.conf

内容例:

[program:expose]
command=/usr/bin/php /path/to/expose-server expose.yourdomain.com
numprocs=1
autostart=true
autorestart=true
user=expose

設定後、以下のコマンドで管理を開始:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start expose

(docker-compose.yamlも利用可能です。.env-example.envにコピーし、PORTDOMAINを設定してdocker-compose up -dも同じ結果を得られます。)

ステップ7:ローカルクライアントをサーバーに接続

ローカルマシンにExposeクライアントをインストール済みの場合:

expose default-server expose.yourdomain.com
expose token YOUR_TOKEN

次に、固定サブドメインのサイトを共有:

expose share http://ecommerce.test --subdomain=checkout

これでhttps://checkout.expose.yourdomain.comにアプリが公開され、安定したカスタムURLと制限なしの接続時間を持ちます。


どちらが適しているか

ngrokを推奨する場合:TCP/TLSの生のトンネリング(データベース、SSH、ゲームサーバー)、Kubernetesのインゲス、組織レベルのSSOやコンプライアンスドキュメントが必要な場合。

Exposeを検討する場合:HTTP/HTTPSトラフィックのみ、Laravel/Herdエコシステムに既にいる、$4/月のVPSを使いたい、安定したカスタムサブドメインを年会費なしで持ちたい、または依存しているトンネリングツールの中身を理解したい場合。


変更履歴

ngrokとExposeの最新ドキュメント、GitHub/Packagistのメタデータ、DigitalOceanの価格ページを参照し、以下の修正・追記を行いました:

  1. ngrokのセッションタイムアウト — 元の草稿では無料プランにタイムアウトがあると誤記していましたが、ngrokの公式ドキュメントでは無料エンドポイントは無期限に動作可能と明記されています。
  2. ngrokの「再起動ごとにランダムサブドメイン」 — 2023年以降、すべてのアカウントは静的ドメインを1つ所有可能になり、再起動時も変わりません。未取得のアカウントは毎回新規のサブドメインを取得します。
  3. ngrokのリクエストレート — 以前の40リクエスト/分の記述は誤りで、現在はTCP接続試行100/分、HTTPリクエスト4,000/分です。
  4. DigitalOceanのDroplet価格 — 旧$5/月から$4/月に変更。
  5. Composerパッケージ名 — 旧beyondcode/exposeからexposedev/exposeへ変更。
  6. PHPバージョン要件 — 現在のクライアントは^8.2を必須としています。
  7. クライアントとサーバーのアーキテクチャ — 旧来の一体型から、サーバーはexposedev/serverリポジトリの別パッケージとなり、exposeクライアントはexposedev/exposeとして独立しています。サーバーはexpose-serverバイナリを使います。
  8. 無料サーバーのカスタムサブドメイン — 現在は--subdomainはPro/Teamまたは自己ホスティングのみ利用可能です。無料のsharedwithexpose.comはランダムサブドメインです。
  9. Exposeの料金 — Proは$79/年/ユーザー、Teamは$229/年/チーム(最大10人)です。
  10. Nginx設定例 — SSL終端を行う設定例に修正。
  11. Supervisor設定例expose-serverバイナリを指定した例に修正。
  12. Laravelとの連携 — Valetはcloudflaredもサポート、HerdはネイティブにExposeを組み込み済み。
  13. プロジェクトの活動状況 — GitHubスター約4,500以上、フォーク300以上、最新リリースは2026年3月の3.2.2。
  14. インタースティシャルページの注意点 — ngrokのブラウザ警告ページはWebhookなどには影響せず、ヘッダーを工夫すればバイパス可能。
  15. 不要な宣伝文の削除 — 中立的な比較に修正し、メタデータも整理済み。

Continue from this article into the most relevant product guides and workflows.

Related Topics

#Expose reverse proxy, Laravel Valet share alternative, self-hosted PHP tunnel, Beyond Code Expose vs ngrok, Beyond Code Expose, ngrok alternative for PHP, Laravel local development, PHP developer tools, self-hosted reverse proxy, DigitalOcean Expose tutorial, expose localhost to internet, PHP tunneling solution, Laravel Valet share, Valet share ngrok alternative, replace ngrok in Laravel, open-source ngrok alternative, Expose vs ngrok performance, self-hosted Expose server, DigitalOcean $5 droplet tutorial, local environment sharing, PHP local server, secure tunnel for PHP, reverse proxy in PHP, host your own ngrok, ngrok free tier limitations, expose local server, PHP developer environment, Laravel ecosystem, Laravel deployment, artisan serve alternative, Beyond Code tools, local dev server, webhook testing PHP, local API testing, expose local web server, secure reverse proxy, open source tunnel, PHP tunnel script, custom domain Expose, self host webhook tunnel, bypass ngrok limits, localhost tunneling, developer infrastructure tools, expose local API to internet, share local website, PHP networking, web development proxy, reverse proxy tutorial, Laravel tips and tricks, PHP artisan share, expose client configuration, self-managed PHP proxy, open source developer tools, Laravel dev workflow

Keep building with InstaTunnel

Read the docs for implementation details or compare plans before you ship.

Share this article

More InstaTunnel Insights

Discover more tutorials, tips, and updates to help you build better with localhost tunneling.

Browse All Articles