Skip to main content

Precognitionとは

Precognitionは、フォーム送信前にサーバー側バリデーションを実行する仕組みです。 フロントエンドでバリデーションルールを重複定義せずに、Laravelのルールをそのまま使えます。 通常リクエストと違い、Precognitionリクエストではルートのミドルウェアやフォームリクエストの検証は実行されますが、コントローラーメソッド本体は実行されません。 そのため、入力中のリアルタイム検証に向いています。

インストール

Laravel 13ではバックエンド側の laravel/precognition を追加インストールする必要はありません。 必要なのはフロントエンド向けヘルパーパッケージです。
  • Vue: laravel-precognition-vue
  • React: laravel-precognition-react
  • Alpine.js: laravel-precognition-alpine
Inertiaは2.3以降でPrecognitionサポートが組み込みです。Inertia 3でもそのまま利用できます。 Inertiaフォームを使う場合は、通常 laravel-precognition-vue / laravel-precognition-react の追加導入は不要です。

バックエンド設定

ルートに HandlePrecognitiveRequests ミドルウェアを追加します。 バリデーションルールはフォームリクエストに集約するのが実践的です。 フォームリクエストにまとめると、ルールの再利用と責務分離がしやすくなります。
副作用のある独自ミドルウェアがある場合は、Precognition時にスキップしてください。

フロントエンド連携

Alpine.js(Blade)

Vue(Inertia.js)

React(Inertia.js)

Axiosを使ったバニラJS

PrecognitionライブラリはAxiosを使います。 既存のAxiosインスタンスを使う場合は client.use() で差し替えます。

バリデーションのタイミング制御

入力ごとの検証は validate() を使います。
デバウンス時間は setValidationTimeout() で調整できます。
ファイルも毎回検証したい場合は validateFiles() を使います。
配列入力はワイルドカードで検証できます。

フォームヘルパー

useForm() は送信状態やエラー状態をまとめて扱えます。
  • validating: バリデーションリクエスト中
  • processing: 送信中
  • errors: エラー一覧
  • valid('field') / invalid('field'): フィールドの検証状態
  • submit(): 通常送信

通常リクエストとPrecognitionリクエストの比較

以下の図は、通常リクエストとPrecognitionリクエストの処理の違いを示しています。

関連リンク

最終更新日 2026年4月16日