🌟

新しい Laravel アプリを始めるなら `Model::shouldBeStrict()` を宣言しよう!

2025/02/12に公開

⚠️: 海外の記事をchatGPTで要約しただけのもの、主に自分用


新しい Laravel アプリを始めるなら Model::shouldBeStrict() を使おう!

新しいアプリを作ろうと決めたら、まず何から手を付ける?僕の場合、Laravel のセットアップが完了したらすぐに App Service Providerboot メソッド内で Model::shouldBeStrict() を呼び出すんだ。この一手間で、後々のトラブルを未然に防げるので、とっても助かる!

public function boot(): void
{
    Model::shouldBeStrict();
}

この設定をオンにすると、内部で以下の3つの効果が働くよ:

  1. 不要な遅延ロードを防ぐ
  2. 属性が勝手に無視されるのを防ぐ
  3. 存在しない属性にアクセスするミスを防ぐ

1. 不要な遅延ロードを防ぐ

例えば、記事一覧と、それに関連するユーザー情報を表示するコードを考えてみよう。

$articles = \App\Models\Article::get();

foreach ($articles as $article) {
    echo "<li>" . $article->user->name . "</li>\n";
}

普通だと、各記事ごとに user リレーションが遅延ロードされるため、ループのたびにデータベースへクエリが発行されちゃう。
でも、Model::shouldBeStrict() を有効にしておけば、もし遅延ロードが発生しようとすると即座にエラーで知らせてくれるので、無駄なクエリを実行する前に問題に気づけるんだ!


2. 属性が勝手に無視されるのを防ぐ

たとえば、モデルに設定されていない属性を更新しようとする場合…

$user->fill(["remember_token" => "bar"]);

通常は、何もエラーが出ずにその属性が無視されてしまうこともある。
でもこの設定を入れておけば、「この属性は fillable に設定されていませんよ!」というエラーがすぐに出るので、うっかりした設定ミスを早期にキャッチできるのが嬉しい!


3. 存在しない属性にアクセスするミスを防ぐ

例えば、User モデルに存在しないプロパティを表示しようとすると…

{{ $user->nonexistant }}

通常、Laravel は何も表示しないだけだけど、Strict モードがオンになっていると「存在しない属性にアクセスしようとしていますよ!」とエラーが返ってくれる。
これなら、タイプミスなどで意図しない属性アクセスをしてしまう前に、すぐに問題に気づけるね!


まとめ

Model::shouldBeStrict() を有効にするだけで、些細なミスもすぐに教えてくれるので、後で大きなバグに悩まされるリスクがぐっと減る。
新しい Laravel アプリを始めるなら、まずこの設定を追加して、安心で快適な開発ライフをスタートしよう!

元記事

https://laravel-news.com/shouldbestrict

Discussion