Laravel

Laravel Herdとは|PHPバージョン切替と.test公開の仕組み・Sailとの使い分け

Laravel Herdとは|PHPバージョン切替と.test公開の仕組み・Sailとの使い分け

Laravel Herdは、Dockerもコンテナも使わずにPHPとnginxをマシン上で直接動かすローカル開発環境です。インストーラを実行するとPHP 7.4から8.5のバイナリとnginx、Node.jsが入り、ディレクトリを登録するだけで.testドメインから開ける仕組みです。この記事では、Herdの同梱物と.testが解決される経路、herd useとherd isolateによるPHPバージョンの切り替え、herd.ymlでのチーム共有を、1.30.0(2026年8月19日)時点の公式ドキュメントで確認した内容から整理します。あわせてLaravel Sail(Docker)との使い分け、移行時に書き換える.envの差分、Herdを選ばないほうがよい条件まで踏み込みます。

まとめ:Laravel Herdを選ぶ条件とSailを残す条件

Herdは、開発機の起動時間とセットアップ工数を削るための道具です。Docker Desktopを立ち上げずにPHPが動く反面、本番と同じOSイメージ・同じ拡張構成を開発時点で担保する仕組みは持ちません。この一点が選択の分かれ目になります。

案件が「Laravelアプリ+MySQL+Redis」の標準的な構成で開発者が数人以内なら、Herdに寄せて構いません。逆に、本番がKubernetesやECSで、独自ミドルウェアをdocker-compose.ymlに抱えているなら、Sailを残したほうが事故が減ります。日常はHerd、リリース前だけSailという併用も成立します。

費用は、PHP・nginx・DNS・Node.jsを含むHerd Basicが無料、サービス管理とDumps・Mail・Log Viewerが付くHerd Proが年99ドルです。チームで環境を揃えるなら、herd.ymlをリポジトリに入れてherd initで復元する運用が前提になります。

Laravel Herdの構成要素と.testドメインが解決されるまでの経路

Herdの実体は、PHP・Webサーバ・DNS解決・Nodeを1つのアプリに束ねたローカル環境の管理ツールです。

同梱されるPHP 7.4〜8.5とnginx・dnsmasqの役割分担

公式サイトの表記は「Herd comes with PHP 7.4 – 8.5」で、この範囲のPHPがあらかじめコンパイルされた状態で配布物に含まれます。macOS版はnginxとdnsmasq、Node.jsも同梱し、Homebrewへの依存がありません。Windows版はPHP・nginx・Node.jsの3つです。

PHPがリクエストを処理し、nginxがpublicディレクトリへのルーティングを担い、macOSではdnsmasqが.testの名前解決を引き受けます。この分担により、ポート競合かDNSの不調かを切り分けやすい構成です。コマンドラインにはherdのほかphp、laravel、composer、nodeが通ります。Composerとlaravelインストーラ、トンネル公開ツールのExpose、Nodeのバージョン管理(nvm)も配布物側に入っているため、追加インストールなしでプロジェクト作成まで進めます。1.30.0(2026年8月19日)ではPHP 8.6のベータ対応とNode.js 24のサポート、コマンドラインツールCPXの同梱が入りました。

parkとlinkの違いと.testドメインが名前解決される流れ

サイトの登録方法は2種類あります。parkはディレクトリを1つ登録し、その直下のサブディレクトリすべてを自動でサイトとして扱う方式です。~/Herdをparkしておけば、その中に作ったプロジェクトは追加操作なしでプロジェクト名.testから開けます。linkは任意の場所にある特定のプロジェクトを1件だけ登録する方式で、parkの外に置いた既存リポジトリをそのまま扱いたいときに使います。

Windows版の公式ドキュメントは、インストール後の挙動を「it routes all requests to *.test domains to sites on your local machine」と説明しています。ブラウザが.testを引くとローカルへ向き、nginxが登録済みディレクトリのpublicへ渡す、という流れです。登録時に.envのAPP_URLが古いまま残る問題には、1.28.0(2026年3月31日)でherd linkに追加された--update-envフラグが効きます。

macOS 12以上とWindows 10以上で分かれる導入要件

macOS版はmacOS 12.0以上、Windows版はWindows 10以上で、Windowsはセットアップ中に管理者権限を要求します。1.29.0(2026年6月30日)ではmacOS 26との互換性が改善されました。

誤解が多いのがWSLとの関係です。Windows版HerdはWSLの上で動くLinux環境ではなく、Windowsネイティブで動きます。WSL2上にDockerを置いてSailを回す構成と比べると、ファイルシステムをまたぐ際の遅さがそもそも発生しません。ただし本番がLinuxである以上、パスの大文字小文字の扱いや改行コードの差は開発機側の責任として残ります。macOSでValetを使っていた場合は、Herd側が既存の設定とサイトを自動検出して引き継ぎます。

herd useで切り替える既定バージョンとherd isolateのサイト固定

受託開発では、PHP 7.4のまま動く保守案件と8.4の新規案件が1台のマシンに同居します。Herdのバージョン管理はこの状況を前提にした作りです。

herd php:listで確認しherd useで切り替えるグローバル設定

マシン全体の既定バージョンはherd use 8.2のように指定します。インストール済みの一覧はherd php:list、新しいバージョンの追加はherd php:install 8.3、既存バージョンの更新はherd php:update 8.4です。

サイト単位で固定したいときは、対象ディレクトリに移動してherd isolate 8.0を実行します。別のサイトを指定する場合はherd isolate 8.0 --site="site-name"の形です。固定済みの一覧はherd isolatedで確認でき、グローバル設定へ戻すときはherd unisolateを使います。

固定した後の注意点は1つです。素のphp artisanはグローバル側のPHPで動くため、固定したサイトではherd phpやherd composerを経由させます。この2つはカレントサイト用のPHPを自動で選ぶので、7.4固定のプロジェクトで8.4のcomposerを走らせて依存解決が壊れる、という取り違えを防げます。

herd.ymlにPHPとサービス版を書いてリポジトリで共有する形

個人の設定をマシンに閉じ込めると、参画者が増えたときに再現できません。Herdはプロジェクトルートのherd.ymlに環境定義を移せます。

持てるキーはname(プロジェクト名)、php(PHPバージョン)、secured(TLS証明書の有無)、aliases(追加ドメインのリスト)、services(サービス定義)です。services配下ではMySQLなどにversionとportを指定でき、ポートは環境変数のプレースホルダで書けます。PHPだけでなくミドルウェアの版まで文字にできる点が、Sailのdocker-compose.ymlと対応する部分です。

ファイルの生成はherd initで行います。対話形式でプロジェクト名・エイリアス・PHPバージョン・証明書設定を聞かれ、Herd Proならサービスの選択が続き、.envの内容から初期値が埋まる流れです。再実行しても既存の設定は保持され、追加分だけが適用されます。既存ファイルを捨てて作り直すときだけ--freshを付けてください。

更新の追従で気をつけるのは、このherd.ymlに書いた版との整合です。Windows版は2026年7月の更新でherd php:update allによる一括更新とMariaDBのサービス追加が入り、macOS版は2026年6月にValkey 7.xと8.xへ対応しました。ローカルだけ先に上げるとservicesで指定した版と実際に動く版がずれるため、更新はリポジトリ側の記述変更とセットで行ってください。

Herd BasicとProの機能境界と受託開発での費用判断

Herdは無料版だけでもLaravelアプリを動かせます。有償のProで増えるのは「サービスの面倒を見る機能」と「デバッグの道具」です。

無料のHerd Basicで足りる範囲とProが要る具体的な作業

Basicに含まれるのはPHP、nginx、DNS、Node.js、Laravel Forge統合、コミュニティサポートで、アプリを.testで開いてNodeでフロントをビルドするところまでは無料で完結します。

Proで加わるのは、Dumps(デバッグ出力の収集)、Mail(ローカルのメール受信)、Log Viewer、Services(データベースやキャッシュの管理)、Xdebugの検出です。Servicesの対象はMySQL、MariaDB、PostgreSQL、Redis、Typesense、Meilisearch、MinIO、Laravel Reverbです。データベースを既にDockerや別途入れたMySQLで持っているならBasicで支障ありません。案件ごとにPostgreSQLとMeilisearchを組み直す開発でだけ、UIから数十秒で用意できるProの差が効きます。

年99ドルのProライセンスをチームの人数分買うかどうかの判断材料

価格はHerd Proが99ドル(1年)、Herd Teamsが299ドル(10ライセンス)で、14日間の返金保証が付きます。

項目 Herd Basic Herd Pro Herd Teams
価格 無料 99ドル(1年) 299ドル(10ライセンス)
PHP・nginx・DNS・Node.js あり あり あり
サービス管理(MySQL・Redis等) なし あり あり
Dumps・Mail・Log Viewer なし あり あり
Xdebug検出 なし あり あり

Teamsなら1人あたり年30ドル弱です。ただし全員に配る必要はなく、バックエンドを主に触る担当者だけProにして、フロント中心の担当者はBasicで運用する分け方でも破綻しません。

Sail(Docker)との使い分けとHerdを採用しない条件

ここが選定の本体です。HerdとSailは「速いか遅いか」ではなく「開発機で何を再現したいか」で分かれます。

起動の速さと本番環境の再現性のどちらを優先するかで決まる分岐

Sailはアプリとミドルウェアをコンテナに閉じ込め、docker-compose.ymlで環境全体を記述します。誰が動かしても同じイメージが立ち上がる代わりに、Docker Desktopの起動とコンテナ層のオーバーヘッドを毎回払います。Herdはネイティブ実行なのでこの層がありません。公式サイトは静的バイナリの採用によってテスト実行が35%、Webリクエストが100%速くなると表記しています。

この差が効くのは、1日に何十回もテストを回す局面です。逆にコンテナが価値を持つのは、OSライブラリやPHP拡張の差による不具合を本番到達前に潰したい局面になります。Sail側のコマンド体系とdocker-compose.ymlの扱いはLaravel Sailとはの解説で個別に整理しているので、比較の前提が曖昧ならそちらを先に確認してください。

Herdを開発機に採用しない3つの条件と切り替えで壊れる箇所

次の3条件のいずれかに当てはまるなら、Herdへの全面移行は見送るべきです。第一に、本番がコンテナ基盤で、拡張モジュールやOSライブラリのバージョン差を開発段階で検出したい案件。第二に、参加メンバーのOSがmacOSとWindowsとLinuxで混在し、CIも含めて完全に同一のイメージを配りたい案件。第三に、docker-compose.ymlにKafkaやElasticsearchなどHerdのサービス一覧にないミドルウェアが載っている案件です。

壊れやすいのは3箇所です。.envのホスト名(コンテナ名からループバックアドレスへ)、sail artisanを前提に書かれた開発用スクリプトやMakefile、CI側のdocker-compose依存。ローカルだけHerdにしてCIをSailのまま放置すると、手元では通るのにCIで落ちるパターンが増えます。

3条件のどれにも当たらない小〜中規模の受託案件なら、Herdへ寄せて構いません。「念のためDockerも残す」と決めきらないまま両方を中途半端に維持する状態が、いちばん保守コストを払います。

日常はHerd・検証はSailという併用でCIの差分を潰す運用

併用は成立します。リポジトリにdocker-compose.ymlとherd.ymlの両方を残し、CIが参照するのはコンテナ定義、日常の開発はHerdという分担にします。

実務では、プルリクエストを出す前に一度Sailで動かす運用が現実的です。sail upで立ち上げてテストを流し、通ればHerdに戻ります。頻度は週に数回で足りるため、コンテナ起動の遅さは総量として問題になりません。避けたいのは、Herdでしか動かないコード(ローカルのパス前提、ホストの127.0.0.1直指定など)を放置することです。.env.exampleはコンテナ前提とネイティブ前提のどちらを書くのかを決め、差分はREADMEに1行で記録しておきます。

SailからHerdへ移行する手順と.envの書き換え差分一覧

既存プロジェクトの移行手順は公式に用意されています。順番を守れば作業は30分程度です。

sail downからcomposer removeまでの移行手順

公式の移行ガイドが示す流れは次のとおりです。

  1. ./vendor/bin/sail downで稼働中のコンテナを停止する
  2. Herdをインストールし、プロジェクトのディレクトリを登録する
  3. .envの接続先を書き換える
  4. 必要なサービス(MySQL、Redis等)を用意する
  5. composer remove laravel/sail --devで依存を外す
  6. sailを前提にした開発用スクリプトを書き換える
  7. herd.ymlを作成する(任意)
  8. herd initでプロジェクトを初期化する

意識したいのは5番目の位置です。.envとサービスの準備が終わる前にSailを削除すると、切り分けの手段が消えます。

DB_HOSTとREDIS_HOSTとMAIL_PORTの書き換え差分

コンテナ名で解決していたホスト名は、すべてループバックアドレスに変わります。メールの受け口もMailhogからHerd側へ移るため、ポート番号が変わります。

キー Sail Herd
DB_HOST mysql 127.0.0.1
REDIS_HOST redis 127.0.0.1
MAIL_HOST mailhog 127.0.0.1
MAIL_PORT 1025 2525

見落としがちなのがMAIL_PORTです。ホスト名だけ直してポートを1025のまま残すと、メール送信の箇所で接続に失敗します。

mysqldumpで移す既存データと移行時に詰まりやすい2箇所

コンテナのボリュームに入っていたデータはそのままでは引き継げません。公式ガイドも、mysqldumpでエクスポートしてからHerd側で取り込み直す手順を案内しています。

詰まる箇所は2つです。1つ目はポート競合で、以前から入れていたローカルのMySQLが3306を掴んでいると、Herd側のサービスが起動しません。herd.ymlのservicesでportを明示するか、既存のサービスを止めてから起動します。

2つ目はHTTPS化したサイトとフロントエンドのビルドサーバの組み合わせです。securedを有効にするとhttps://でアクセスすることになり、開発サーバの参照先と証明書の扱いを合わせる必要が出ます。Laravel Viteの使い方で整理した@viteの書き方と本番ビルドの注意点を確認して、APP_URLとビルド設定の整合を取ってください。

受託開発チームでのherd.yml共有と参画初日の環境準備手順

環境構築の速さが効くのは、個人の作業時間より「新しい人が入るたびに発生するコスト」の側です。

参画初日にherd initだけで環境を揃えるリポジトリ構成

リポジトリにherd.ymlを含めておけば、クローン後にherd initを実行するだけでPHPバージョン・証明書設定・サービスの版が適用されます。「PHPは8.3を入れて」と伝えていた手順書が1コマンドに置き換わります。

あわせて決めておくのは3点です。phpキーの値を本番と揃えるか、securedをtrueにするか、servicesのバージョンをどこまで固定するか。とくにservicesの版を空にすると人によって入るMySQLが変わり、SQLモードの差で挙動が割れます。整形ツールの設定と実行を扱ったLaravel Pintのプリセット選定とCI差分チェックの記事と合わせ、環境の再現とコード品質のチェックを両方リポジトリ側に持たせるのが、参画コストを下げる基本形です。

開発環境の属人化を外部の受託チームに預けるかどうかの判断の目安

Herdやherd.ymlで解けるのは開発機のばらつきだけです。本番をコンテナにするか、CIをどう組むか、レガシーなPHP 7.4の案件をどう畳むかは、環境ツールの選定では片付きません。

社内にPHPの担当者が1人しかおらず、その人の手元でしか動かない状態が続いているなら、体制そのものを見直す段階です。目安として、環境まわりの問い合わせ対応に週半日以上を使っているなら、内製の担当者を増やすより外部の開発チームへ一部を渡したほうが総コストは下がります。一創では業務用・Webアプリ開発として、Laravelを含むWebアプリの新規開発と既存システムの引き取りを受けており、環境が属人化したまま止まっているプロジェクトの立て直しも同じ枠で相談できます。

Laravel Herdの導入判断で迷いやすい点についてのよくある質問

判断が止まりやすい論点を5つ、公式ドキュメントで確認できる範囲で答えます。

Laravel HerdはWindowsでも使えますか?WSLは必要ですか?

Windows 10以上で使えます。セットアップ時に管理者権限が必要ですが、WSLは前提ではありません。Windows版HerdはPHP・nginx・Node.jsをWindowsネイティブで動かし、*.testへのリクエストをローカルのサイトへルーティングします。WSL2とDocker Desktopの構成で起きるファイル同期の遅さは生じません。

Herdの無料版だけでMySQLを動かせますか?

Herd Basicにデータベースの管理機能は含まれません。MySQLやPostgreSQLをUIから入れて起動する機能はHerd Pro(年99ドル)の「Services」側です。無料のまま進めるなら、MySQLを別途インストールするか、データベースだけDockerで残します。.envのDB_HOSTを127.0.0.1にすれば、この組み合わせでも動きます。

サイトごとにPHPバージョンを変えるにはどうしますか?

対象ディレクトリでherd isolate 8.0を実行します。別サイトの指定はherd isolate 8.0 --site="site-name"、一覧はherd isolated、解除はherd unisolateです。固定後はherd phpとherd composerを使うと、そのサイト用のバージョンが自動で選ばれます。チーム全体に効かせるならherd.ymlのphpキーに書いてください。

Laravel Sailと同時に入れておいても問題ありませんか?

併用は可能です。ただしSail側のMySQLが3306を掴んだままHerdのサービスを起動すると失敗するため、どちらかを止めるかherd.ymlのservicesでportをずらします。両方を残すなら、CIがどちらの定義を参照するかを先に決めておきます。

Herdはどのくらいの頻度で更新されますか?

公式のchangelogでは1.28.0が2026年3月31日、1.29.0が2026年6月30日、1.30.0が2026年8月19日と、おおむね2〜3か月間隔でマイナーバージョンが出ています。1.30.0ではPHP 8.6ベータへの対応とNode.js 24のサポートが入りました。PHP本体の更新はherd php:update 8.4、Windows版ならherd php:update allで行います。

関連記事

お気に入りに入れた記事の一覧

この記事は以下の記事からリンクされています

資料請求

今日のトレンド記事 直近 24 時間で、いつもより多く読まれている記事

  1. 2026.10.09 テックブログ IDCFクラウド(IDCフロンティア)不正アクセス・ランサムウェア:影響先・復旧・データは戻るか
  2. 2026.10.09 テックブログ ユニリタの不正アクセス:SaaS文書管理から漏れた顧客の認証情報と回す手順
  3. 2026.10.09 テックブログ ニッスイのサイバー攻撃で日水物流の入出荷停止|委託先クラウド障害に荷主が備える手順
  4. 2026.10.08 テックブログ 大阪公立大学のランサムウェア被害と仮想化基盤の停止|全授業休講に至った経緯とバックアップを守る設定
  5. 2026.10.09 テックブログ 京王電鉄のランサムウェア被害とグループ共通基盤:決済・ポイント・予約が止まった範囲と遮断の初動

RELATED POSTS 関連記事

目次