INSIGHT

情報・インサイト

PHP・Laravelでnullsafeに開発する

2024.12.04

おそらく初心者が悩むであろうnullの扱い。インターネットスラングではNullPointerException をぬるぽと言うことがあるほど、多くのエンジニアはnullの扱いに悩まされます。
そこで今回はLaravelにおけるnullsafeな開発をご紹介します。

nullsafeとは

まず、nullsafeとはなんでしょうか。ずばり、nullという値を持つことを許容し、NullPointerExceptionが発生しない概念のことです。
つまり、もう「ガッ!」する必要がなくなります。
null安全ともいわれ、JavaやC#などの静的型付でありながらも比較的柔軟なプログラミング言語で採用されています。
そしてPHPにおいてもPHP8から導入されました。

nullsafeの利点と欠点

nullsafeの利点としては以下が考えられます。

  • 可読性の向上
    簡素に記述できるようになります。二項演算子や三項演算子による記述が減ります。
  • API操作の向上
    たとえば動的なプロパティをもつAPIからデータを取得するときに、nullsafeなら例外が発生しません。
  • データベース操作の向上
    ORMを使って、リレーション先のデータを取得する際に、nullsafeなら例外が発生しません。

このように、いままでNULLの場合は~と記載していたことが不要になります。

一方で欠点もあります。

  • nullが発生した場合、どこで処理するのかが不明結局どこかでnullの対応が必要とする意見も多数あります。
  • 上記の理由により型安全が脅かされるコンパイラでは適切にエラーを出力できなくなります。

以上のことを考慮すると、固めの業務ロジック等にはあまり向かなさそうです。

PHP・Laravelでnullsafeに開発しよう

では、ここからPHPおよびLaravelでnullsafeに開発してみましょう。

laravelでは古くからoptional() 関数がありましたが、PHP8よりnullsafe演算子が導入されたので、どちらでも記載することができます。
そこで両方の記載方法をユースケースとともに紹介します。

データベースからデータを取得する。

例えば、USERテーブルとそれに1対1で関連するJOBテーブルがあるとします。

USERテーブル

ID name JOB_ID
1 タロ 1
2 ジロ null
3 サブロ 2

JOBテーブル

ID job_name
1 SE
2 営業
3 総務

このとき、以下のようにUSERのIDを指定すればjob_nameが取れるとします。

$userJobName = User::find(1)->job->job_name; //例 「SE」

ではid=2のとき、どうなるでしょうか。次のようなエラーが出ます。

Attempt to read property "job_name" on null

おなじみのエラーですね。

では、この対応法としては次が考えられます。

$userJobName = User::find(2)->user ? User::find(2)->user->job_name : ""; //古典的な方法
$userJobName = optional(User::find(2)->user)->job_name; //Laravelのoptional関数を利用。nullを返却
$userJobName = User::find(2)->user?->job_name; //PHP8のnullsafe演算子。nullを返却

いろいろ書けますね。下の二つだと、SQLを1度発行するだけで済むのでリソースを有効活用できるのではないでしょうか。

まとめ

nullsafeな開発をすることで、さまざまなメリットがあります。しかし、その分のデメリットもあります。
そのため、うまく使い分けることが大切です。みなさんも使えそうなところでは使ってみてください。

 

ウィズテクノロジーで一緒に働きませんか?
分野を限定せず幅広い事業を展開。新しい技術の導入にも積極的に取り組んでおり、チャレンジや成長する機会が沢山。
あなたの経験・知識を活かしながら一緒にIT業界を盛り上げて行きましょう!
採用情報詳細はコチラ

WORKS

導入事例

ウィズテクノロジーは大阪を拠点に、システム開発の分野で20年の実績を持つパートナー企業です。
業務効率化やDX支援など、さまざまな課題にワンストップで対応。
経験豊富なエンジニアが、企業の成長を技術面からしっかりサポートします。

導入事例一覧を見る
導入事例一覧を見る

RECRUIT

採用情報

未来に、価値ある選択を。

All WhizzTechnologyは、期待を超える価値をともにつくり、より良い未来へ導く仲間を募集しています。