📚

独自ヘルパー関数のメリット・デメリット(laravel)

2021/04/14に公開

こんにちは。

今回は独自ヘルパー関数のメリット・デメリットについて解説します。

ヘルパー関数とはどのPHPファイルからも呼び出せるグローバル関数のうち、PHP標準の関数ではないものというイメージで良いかと思います。

PHPの関数は例えば、 str_replace とか implode explode みたいなところがありますが、Laravelのヘルパー関数は例えばデバッグする際によく使う dd やリダイレクトする際に使う redirect 等があります。

Laravelで標準で用意されているヘルパー関数を使うことは多いと思いますが、たまに標準搭載のヘルパー関数ではカバーできないことがあります。そのときに独自のヘルパー関数を作成することができるのですが、使うにしてもメリットとデメリットをよく知ってから使うのが良いかなと思います。

それでは、ヘルパー関数を使うメリットとデメリットを解説していきます。

メリット:ヘルパー関数を使うと冗長化を避けることができる

例えば、もとの商品の値段に1.1をかけて税込みの値段を計算するというロジックを組むとします。
(DB構成によってはわざわざ毎回1.1を掛けなくて良いとかあると思いますが一旦置いておいて)ECシステムでは税抜金額に1.1をかけて税込金額を表示するというロジックが至るところで使われます。

  • サービス画面で商品の詳細を取得する際
  • 管理画面で商品の詳細を取得する際
  • ユーザーが複数商品をカートに入れた際(全ての元の値段を足して1.1をかける)
  • ユーザーの過去の商品購入履歴を表示する際

これを毎回いろんなところで 税抜金額×1.1 というロジックを書くのは非常に冗長的です。

なので、冗長を避ける一つの手段としてヘルパー関数を用いるという方法があります。

public function includeTax(int $originPrice)
{
    return $originPrice * 1.1;
}

一回ヘルパー関数を↓このように定義しておけば、いろんなところで includeTax($price) と掛けば良いので冗長化を避けられます。
税金が変わったら、ヘルパー関数を書き換えれば全部変わるので楽ちんですね!

デメリット: なんじゃこれ関数になりがち

なんじゃこれ関数とは、今私が名付けてみましたが、色んな意味でこの関数なんじゃこれ?っていう状態に陥ります。

  • 新米プログラマーが陥る「なんじゃこれ」

そもそもヘルパー関数を知らない、あまり馴染みがないプログラマーが、プログラムの中に includeTax という関数を発見しました。 へ〜〜!PHPにこんな関数あるんだ!Laravelにこんな関数用意されているんだ!

違います^^

includeTaxならまだ分かりやすい関数ですが、関数の名前だけでは何をしているのか分からないものがあった場合、プログラマはまず関数名でググります。

「Laravel includeTax 使い方」

ググっても出てきません。独自のヘルパー関数なので出てこなくて当然です。ですが、プログラマーにとっては「なんじゃこれ?」となってしまいます。

まあヘルパー関数っていうのがあって、このプロジェクトでは使ってるからねって共有しとけよって話なんですけどね。

  • 謎関数を作ってしまったときの「なんじゃこれ」

冗長を避けたいという一心で、いろんなところで使われている同じロジックをヘルパー関数にまとめてみました。

しかし人間は忘れる生き物です。
ヘルパー関数で定義した関数がきれいなコードではない場合、「なんじゃこれ?」
他の人が書いたよくわからんコードに対して「なんじゃこれ?」

私はヘルパー関数のようないろんなところで何度も使わる関数ほど、リーダブルでテスタブルなCLEANコードを心がけないと、後で変更が効きにくいレガシーコードちゃんが誕生しやすいんじゃないかなと思ってます。

終わりに

ここで伝えたのは独自ヘルパー関数だけではなくFacadeとかいろんな機能でも同じことが言えると思うのですが、

こういう便利な機能ほどメリットは大きいのですが、その分デメリットもきちんと理解しておかないと超危険だなと感じたので記事にしてみました。

Laravelの便利機能をプロジェクトに導入するときにはぜひ参考にしてみてください。デメリットを知って気をつけた上で使用すると、めちゃくちゃ良いシステムが完成すると思います!

Discussion