0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 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 アプリを始めるなら、まずこの設定を追加して、安心で快適な開発ライフをスタートしよう!

元記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?