お問合わせ開発ブログ株式会社Nextatのスタッフがお送りする技術コラムメインのブログ。20:50Laravelで未来の日時の状態をプレビューするためのMiddlewareこんにちは、ナカエです。Webアプリケーションを開発していて、未来の日時における画面やAPIのレスポンスを再現したいということがたまにあります。そのためだけにわざわざ開発マシンやサーバの現在日時を変更するのも手間です。今回はLaravelでMiddlewareを用いてアプリケーションの本体側に手を加えることなく、ブラウザから未来の日時の状態をプレビューする方法をご紹介します。Clock経由で取得することによりモックしやすくするという方法が広く知られています。Clockの役割を果たしているCarbonの参照する現在日時をCarbon::setTestNow()メソッドを通じて自由に変更することができます。Clockにリクエストから日時を注入するため、HTTPリクエストのヘッダに日時を指定できるようにするというのもよく取られる手段でしょう。今回は、ブラウザから日時を指定したいという要件を満たすため、日時をクエリパラメータから取得し、以降のリクエストではCookieに日時の設定が保持されるようにします。}}利用方法このMiddlewareを'web'ミドルウェアグループの\Illuminate\Session\Middleware\StartSessionより内側に配置して利用します。日付指定を追加することでプレビューする日時が指定され、Cookieに保存されます。注意点あくまでローカルやテスト環境のデバッグのためのものであり、本番環境での利用を意図したものではありません。Cookieによるセッションを前提としています。アクセストークンを認証・認可に利用しているようなステートレスな環境では動作しません。データベース側で現在日時を生成するなど、Carbonの支配下にない処理における日時をモックすることはできません。\Illuminate\Session\Middleware\StartSessionより内側に配置しなければ、Cookieの有効期限がずれてセッションが破棄され、ユーザがログインできない場合があります。他のリクエストヘッダなどを参照して日時に関係する処理を行う場合も、このMiddlewareの外側で行わなければ想定外の動作となることがありえます。h3="">日時の外部注入とMiddlewareにより簡単に任意の日時のアプリケーションの状態をプレビューすることができました。アプリケーションに要求される機能としてプレビュー機能を作る場合はもう少し作り込みが必要かと思いますが、そうでない場合はお手軽でおすすめです。お問合わせプライバシーポリシ。