Laravel + Docker + Cloudflare Tunnel: ローカル開発環境を外部公開してWebhookテストを簡単に
ローカルで開発するけどインターネットからの webhook を受け取りたい
Webサービスを作っているときに外部サービスからの webhook を受け取りたいこと、よくありますよね。
LINE の bot を作る時とか、Slack の bot を作る時とか。
ngrok とか無料で使えるけど、再起動したら URL が変わっちゃって webhook の URL を毎回毎回差し替えることになって萎えますよね。
でも、 Cloudflare Tunnel なら URL を固定できるのです。
しかも(Cloudflareのサービス料は)無料で。
Cloudflare に登録して、 Tunnel の設定をする
Cloudflare の設定方法はあちこちにありますのでそれを探すか、もしくは このスクラップを読んで下さい。
なお、サブドメイン名は誰にも推測不可能な名前にした方がセキュリティ的には良いので、この点は十分にご注意ください。
でも…コードを書いてる時だけ外部公開したい
ウェブ系の開発者なら分かると思うのですが、常に自宅サーバが公開されている状態は気持ち悪いですよね。
せめて、自分が開発作業をしている時だけ公開したい。
このスクラップにも書きましたが、公開を止めるには cloudflared を止める必要があるのでちょっと使い勝手が悪いです。
ならば、 Clodflare Tunnel を開発環境に統合すればいい
私は Laravel 大好きなので、普段は Laravel Sail を使っています。
これは Docker 環境で、使用時のみコンテナを立ち上げて使います。
ここに cloudflared のコンテナも追加して、開発環境が立ち上がっている間だけサーバも外部公開するようにすれば全て解決します。
ボイラープレートを作ってみた
Laravel12 + Cloudflare Tunnel を作りました。
開発環境が起動すれば自動で Cloudflare Tunnel を設定して外部公開されるようになります。これで安心。
使い方は非常に簡単です。
必要なものは Cloudflare のアカウントと独自ドメインだけ。
詳細はインストール方法 に譲りますが、お金がかかるのは独自ドメインのみです。
その独自ドメインも年額数百円で取得できますし、いちいち再設定する手間にかかる時給に比べれば非常に安いものです。
さらにこちらはチーム開発時にも威力を発揮します。
個人個人の環境で ngrok を設定して〜などは非常に効率が悪いのですが、 Laravel12 + Cloudflare Tunnel の場合は管理者が Cloudflare Tunnel のトークンを各開発者に配布するだけで環境が完成します。
さいごに
これで誰かの作業効率が上がると幸せです。
できることはできるだけ楽をしましょう🍻
Discussion