結論
Dusk では「別プロセスのブラウザ」からアクセスされても
セッション・キュー・キャッシュが壊れない設定にしている
Dusk では「別プロセスのブラウザ」からアクセスされても
セッション・キュー・キャッシュが壊れない設定にしている
そのために .env と .env.dusk.local を意図的に変えている。
① 一番重要な違い(Dusk必須)
SESSION_DRIVER
| 環境 | 設定 |
|---|---|
| 通常 | SESSION_DRIVER=database |
| Dusk | SESSION_DRIVER=file |
超ざっくり解説
Duskは「別の人(ブラウザ)」が操作している。
だから“共有が必要な database”より
“置きっぱなしで誰でも見える file”の方が安全。
たとえ話で説明すると
通常:SESSION_DRIVER=database
・ロッカーを使う感じ
・会社のみんなが使う
・管理しやすい
・ルールが多い
👉 人が普通に使う環境向け
Dusk:SESSION_DRIVER=file
・机の上に紙を置く感じ
・見た瞬間に分かる
・待ち時間なし
・シンプル
👉 自動操作(Dusk)向け
なぜ Dusk だと database がダメ?
Dusk はこう👇
Laravel(PHP)
Chrome(別プロセス)
が 別々に動いてる
Laravel「セッション保存したよ」
Chrome「まだ見えてない…」
→ 419(切れた)
file だと何が違う?
Laravel「ファイルに書いた」
Chrome「そこ見に行く」
→ 常に一致
なぜ?
▪️Dusk は PHPとは別の Chrome プロセス
▪️DBセッションや Redis は 競合・遅延・419の原因になりやすい
▪️file セッションが一番安定
👉 Duskでは file 一択
② DB_DATABASE(必須)
| 環境 | DB |
|---|---|
| 通常 | laravel_app |
| Dusk | laravel_app_dusk |
なぜ?
▪️テストでデータを破壊する
▪️本番・開発DBを汚さない
▪️DatabaseMigrations 前提
👉 Dusk専用DBは必須設計
③ CACHE / QUEUE(安定性のため)
CACHE
| 環境 | 設定 |
|---|---|
| 通常 | CACHE_STORE=database |
| Dusk | CACHE_STORE=array |
超ざっくり解説
Duskでは「記憶を残さないメモ帳」を使う。
通常は「共有メモ帳」を使う。
▪️array = プロセス内完結
▪️キャッシュ残骸でテストが壊れない
QUEUE
| 環境 | 設定 |
|---|---|
| 通常 | QUEUE_CONNECTION=database |
| Dusk | QUEUE_CONNECTION=sync |
超ざっくり解説
Duskでは「後でやる」を禁止する。
全部「今すぐやる」。(sync = その場で全部やる)
▪️非同期処理は テストで事故る
▪️Dusk では 即時実行が正義
④ APP_ENV(見分け用)
APP_ENV=dusk
▪️Laravel が Dusk環境だと認識
▪️.env.dusk.local が読まれる
▪️環境分岐が可能
⑤ 変えていないけど重要なもの
APP_URL
APP_URL=https://test.test
▪️Dusk がアクセスするURL
▪️ブラウザが実際に開く場所
▪️HTTPS / ホスト名不一致は即死亡
⑥ Duskで「重要ではない」もの
以下は Duskの成否にはほぼ関係ない:
▪️MAIL_*(logならOK)
▪️AWS_*
▪️REDIS_*(使ってなければ無視)
▪️MEMCACHED_HOST
▪️LOG_*
▪️BCRYPT_ROUNDS
⑦ Debugbar を必ず無効化する(重要)
APP_DEBUG / DEBUGBAR_ENABLED
| 環境 | 設定 |
|---|---|
| 通常 | APP_DEBUG=true |
| Dusk | APP_DEBUG=false |
| Dusk | DEBUGBAR_ENABLED=false |
超ざっくり解説
Duskは「本物のブラウザ」を使う。
Debugbarは画面の一番手前に固定表示されるため、
クリック対象の上にかぶさることがある。
→ element click intercepted エラー発生
まとめ:Duskで“使う要素”だけ抜き出すと
Laravel Dusk 必須セット
APP_ENV=dusk
APP_DEBUG=false
DEBUGBAR_ENABLED=false
APP_URL=正しいURL
DB_DATABASE=専用DB
SESSION_DRIVER=file
CACHE_STORE=array
QUEUE_CONNECTION=sync
これが揃っていれば:
▪️419が出ない
▪️セッションが切れない
▪️validation / redirect が安定
▪️Dusk が信用できる