Laravel HerdはデフォルトでHTTP配信 — HTTPS化が必要になる場面とは
先に結論を言うと、Laravel HerdでサイトをHTTPS化するにはherd secureコマンドを実行するか、Site Managerで対象サイトの鍵アイコンをクリックするだけです。どちらもローカルにTLS証明書を生成し、以後はHTTP/2の暗号化通信で配信されます。詳しい手順は後述します。
Laravel Herd(macOS向けのローカル開発環境)は、標準では各サイトをHTTPで配信します。通常の開発なら困りませんが、リダイレクトURLの検証やセキュアCookie、外部サービスのWebhookコールバックといったHTTPS前提の挙動を試したいときは、ローカルでもTLS(暗号化通信)が要ります。
HerdはこのTLS化に対応し、有効にするとHTTP/2で配信されます。導入がまだならLaravel Herdの導入手順を先に済ませておいてください。

Laravel HerdでサイトをHTTPS化する2つの手順
方法はGUIとCLIの2通り。単発の切り替えならGUIが直感的で、スクリプトやセットアップ手順に組み込むならCLIが確実です。いずれも初回はローカル証明書を生成するため、パーミッション関連のポップアップが1つ以上表示されることがあり、その場合はすべて許可する必要があります。
Site Managerのロックアイコンで切り替えるGUI操作
メニューバーのHerdアイコンから「Sites」を開くとサイト一覧が並びます。閉じた鍵アイコンは保護済み、斜線入りの鍵は証明書なしのHTTP配信です。鍵をクリックすると状態が切り替わり、保護に切り替える際はパーミッション確認のポップアップが1つ以上出るので、すべて許可します。
マウス操作だけで完結するため、「このサイトだけ一時的にHTTPSで確認したい」といった単発の用途に向いています。逆に、複数サイトを一括で保護したい、あるいはプロジェクトのセットアップ手順として再現性を持たせたい場合は、次のCLIのほうが確実です。
herd secureコマンドで任意のサイトを保護するCLI操作
ターミナルからはherd secureで保護できます。引数なしならカレントディレクトリのサイト、サイト名を渡せば別の場所からでも指定可能です。
# カレントディレクトリを保護
herd secure
# example-site.test をどこからでも保護
herd secure example-site
サイト名は末尾の.testを省いて渡せます(example-site.testならexample-site)。HTTPへ戻すときはherd unsecureを使い、こちらも同じようにサイト名を引数に取れます。
# カレントディレクトリをHTTPに戻す
herd unsecure
# example-site.test をどこからでも解除
herd unsecure example-site
証明書の有効期限確認とHTTPへ戻す際のリダイレクトキャッシュ対策
保護後の実務では、「本当に効いているか」の確認と、解除時のブラウザ挙動が落とし穴になります。とくに後者は、コードを直しても直っていないように見えるため、原因究明で時間を溶かしがちです。
herd securedで発行済み証明書と有効期限を一覧チェックする
herd securedを使うと、ローカル証明書を持つサイトと有効期限(Valid Until)が表で出力されます。保護したはずのサイトが一覧に見当たらないなら、コマンドを実行したディレクトリやサイト名の指定ミスを疑うのが早道です。
herd secured
出力は次のように、サイト名と有効期限が並んだ表形式になります。
+----------------------------+----------------------------+
| Site | Valid Until |
+----------------------------+----------------------------+
| expose.dev.test | 2027-08-10 12:07:38 GMT |
| herd-templates.test | 2027-09-05 15:12:37 GMT |
| reverb-110.test | 2027-09-11 13:44:56 GMT |
| tinkerwell.app.test | 2027-10-16 19:53:32 GMT |
+----------------------------+----------------------------+
unsecure後にHTTPSへリダイレクトされ続ける原因と対処
HTTPへ戻したのに、ブラウザがHTTPSへ飛ばし続けることがあります。原因はコードではなく、Google Chromeをはじめ多くのブラウザがHTTPSへのリダイレクトをキャッシュしているためです。herd unsecure自体は成功していても、ブラウザが過去の転送を覚えている状態というわけです。まずはブラウザのセッションを再起動し、それでも残るならシークレットウィンドウで開いてみると、キャッシュ由来かどうかを切り分けられます。
カスタマイズに関するお問い合わせはこちら
本記事のコード・挙動に関する記述は、Laravel 13.23.0 の実際のソースコードと照合して確認しています。