【Laravel】ヘルパ関数とは?自作方法とメリットデメリット

この記事からわかること

  • Laravelヘルパ関数とは?
  • phpの関数との違い
  • 独自で関数を定義して自作する方法
  • メリットデメリット
  • composerオートロード仕組み

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

Laravelのヘルパ関数とはどのようなものなのかまとめていきたいと思います。

参照記事:公式リファレンス:ヘルパ関数

ヘルパ関数とは?

ヘルパ(helper)関数」とはLaravelに搭載されている独自の関数のことです。phpにも trimhtmlspecialcharsechoなどたくさんの関数が元々用意されているようにLaravelでもassetviewredirectなどたくさんの関数が用意されています。

例えばメソッド名の長いhtmlspecialchars関数はeヘルパ関数に置き換えると同等の処理を行うことができます。使い方は通常の関数と同じでメソッド名を呼び出して使用します。

echo htmlspecialchars('<h2>HTML要素</h2>'); // for php
// 結果:&lt;h2&gt;HTML要素&lt;/h2&gt;(エスケープされている)
echo e('<h2>HTML要素</h2>');  // for helper
// 結果:&lt;h2&gt;HTML要素&lt;/h2&gt;(エスケープされている)

同等の処理が行える理由はヘルパ関数が内部的にphpの関数を実行してくれているからです。eヘルパ関数も内部的にphpのhtmlspecialchars関数を実行しています。

名前の「helper(助手)」の意味通りプロジェクトを開発する際に便利な関数も多くLaravelを使う上ではヘルパ関数を扱えるか扱えないかで開発工数も大きく変わってくると思います。

しかしもちろんですがLaravelを組み込んでいる環境でしか使えない関数なのでphpのみでの開発の時には使用できなくなってしまうことには注意してください。

またヘルパ関数は自作することも可能です。使い回したい処理をヘルパ関数として独自に定義することで自分の好きなメソッド名で好きな処理を実行させることができるようになります。

ヘルパ関数とは〜まとめ〜

自作することのメリット・デメリット

ヘルパ関数は自作することも可能ですが、そこにはメリットやデメリットが混在しています。

ヘルパ関数を自作出来ることにより汎用性の高いロジック部分や数値やデータの整形処理などを切り出して管理することができるようになります。同じような処理を何度も記述する必要性が無くなるので効率良く開発に望めるようになります。

しかし大きなデメリットととしてメソッド名を自由につけられてしまうことが挙げられます。Laravelを熟知している人なら良いですが初心者などからすると自作されたヘルパ関数がデフォルトであるのものなのか、自作されたものなのかはたまたphpのものなのかすら識別が出来なくなってしまいます

メリット

デメリット

自作する際の注意

よく使うヘルパ関数の意味と使い方

Laravelのヘルパ関数には2パターンのヘルパ関数があります。

ヘルパ関数は基本的にuse文を使って読み込む処理をしなくても使えるものが多いですが、「配列」(Arr)と「文字列」(Str)を操作するメソッドを使用する場合はuse文が必要になってきます。

これらはクラスの静的メソッドとして各ヘルパ関数が定義されているためクラスを有効化してからでないと使用できないためです。

use文が必要なヘルパ関数(Arr/Str)

Arr関係の関数

Laravel内で配列やオブジェクトを操作できるのがArr::メソッド形式で書かれたヘルパ関数です。このメソッドを使うには最初に以下のようにクラスの読み込みを行います。

use Illuminate\Support\Arr;

使い方はファサードに似ていますが名前空間は Supportに属しているので別物のようです。

// ファサードの名前空間
use Illuminate\Support\Facades\Route;

例えばArr::whereメソッドは配列の中から指定した条件にマッチする値のみを抽出することができます。

use Illuminate\Support\Arr;

$array = [1,2,3,4,5,6,7];

$filtered = Arr::where($array, function ($value, $key) {
    return $value > 4;
});
var_dump($filtered); 
// 結果:array(3) { [4]=> int(5) [5]=> int(6) [6]=> int(7) }

Str関係の関数

文字列を操作する際はStr::メソッド形式で記述します。例えば文字列を置換できるphpのstr_replace関数と同等のものがヘルパ関数ではStr::replaceとして使用できます。

use Illuminate\Support\Str;

$string = 'phpのフレームワークはVue.jsです';

$replaced = Str::replace('Vue.js', 'Laravel', $string);

// phpのフレームワークはLaravelです

use文が不要なヘルパ関数

上記の2つ以外のヘルパ関数はクラスの読み込みをしなくてもLaravelさえ導入していれば使用可能になっています。

public_path関数

プロジェクト内の「public」ディレクトリへのパスを返すメソッド

$path = public_path('css/style.css');
// ローカルホストの場合
// /Users/ユーザ名/Desktop/プロジェクト名/public/css/style.css

asset関数

使用中のプロトコル(HTTP/HTTPS)メソッドを使用してURL形式でパスを返すメソッド

$path = public_path('css/style.css');
// ローカルホストの場合
// http://localhost/css/style.css

環境設定をしている「.env」ファイルにASSET_URL変数を用意し指定のURLをここに記述することでasset関数が返す値を変更することも可能です。

ASSET_URL = https://appdev-room.com/ // for .env

$path = public_path('css/style.css');
// ローカルホストの場合
// https://appdev-room.com/css/style.css

__関数

__関数は引数に指定されている文字列が翻訳対象なら該当文字列に置換、翻訳未対象ならそのまま表示してくれる関数です。

echo __('translation.login');

翻訳対象の文字列は別ファイルに連想配列形式で定義しておき、__関数の引数はファイル名.キー値の形式で指定すれば自動で置換してくれます。

この関数は認証機能であるAuthなどを日本語化する際に多用します。詳しい使い方は以下の記事を参考にしてください。

dd関数

dd関数は引数に指定した変数の内容を表示してくれる関数です。出力するタイミングでそれ以降のスクリプトの実行は停止させるので後続の処理は行われないことに注意してください。

$array = ['user_id' => 1, 'name' => 'ame', 'language' => 'php', 'framework' => 'laravel'];
dd($array);
echo "hoge"; // 行われない

実際に実行すると下記画像のようにページ上に変数の中身を表示させることができます。

Laravelのddヘルパ関数で出力された変数を表示しているwebページ

old関数

old関数はinput要素などに直前に入力された情報をセッションから取得してくれる関数です。

<label>メールアドレス</label>
<input name="email" value="{{ old('email') }}" type="text">

input要素のvalue属性に指定しておけばページに戻ったときなどに入力値を保持することができたりします。

redirect関数

redirect関数はページをリダイレクトさせるHTTPレスポンスを返しページ変移してくれる関数です。引数にリダイレクトさせたい先にパスを渡します。

return redirect('/welcome');

引数を指定しないで呼び出すとRedirectorインスタンスが返されます。そこからメソッドチェーンでRedirectorインスタンスのメソッドでルートを指定できるrouteメソッドやアプリ外にリダイレクトできるawayメソッドが使えるようになります。

return redirect()->route('information');
return redirect()->away('https://www.qa-mikata.com/');

collect関数

collect関数は配列をコレクションインスタンスに変換してくれる関数です。

$collection = collect(['user_id' => 1, 'name' => 'ame', 'language' => 'php', 'framework' => 'laravel']);

コレクションとはLaravel独自の形式で配列操作に長けたオブジェクトです。

view関数

view関数はviewインスタンスを返す関数です。コントローラでよく使うこの関数もヘルパ関数の1つです。

return view('index', ['records' => $data, 'middle' => $middle]);

ヘルパ関数を自作する方法

自作する流れ

  1. ヘルパ関数用のファイルを作成する
  2. composerのオートロードに組み込む
  3. composerのオートロードを更新
  4. ファイル内で使用

Laravelで自作ヘルパ関数を作成するのは意外に簡単です。作成に欠かせないcomposerオートロードの仕組みもみながら作成方法を見ていきます。

1.ヘルパ関数用のファイルを作成する

ますはヘルパ関数を定義するファイルをコマンドではなく手動で作成します。管理する場所はに決まりはありませんが「app」内の中に管理するのがセオリーです。今回は「app」内に「helpers」ディレクトリを作りその中にファイルを作っていきます。

「app」>「helpers」>「testHelper.php」

<?php

if (!function_exists('test')) {

  function test(): string
  {
    return 'これはテストです';
  }
  // function ヘルパ関数名(): 型
  // {
  //  処理;
  // }
}

最初にphpのfunction_exists関数を使って重複する関数があるかを調べます。存在していればtrueを返すので!で真偽値を逆転させます。

その中に自作の関数を定義します。ここはその都度オリジナルのものを作成すればOKです。

2.composerのオートロードに組み込む

続いて作成したヘルパ関数をLaravel内でファイル読み込みなしで使えるようにcomposerのオートロード機能を使って組み込みます。オートロード機能に組み込むには「composer.json」の中に以下のように作成したファイルパスを記述するだけです。

composer.json

"autoload": {
    "psr-4": {
        "XXXX": "XXXX",
        "XXXX\\XXXXXXXX\\": "XXXXXXXX/XXXXXXXX/",
        "XXXX\\XXXXXXXX\\": "XXXXXXXX/XXXXXXXX/",
    },
    "helpers": [
        "app/helpers/testHelper.php"
    ]
},

オートロード機能をもう少し深掘りするとphpのファイル読み込み関数であるrequire_onceで本来読み込む必要のあるところをオート(自動)ロード(読み込み)してくれます。

require_once "app/helpers/testHelper.php";

psr-4というのはオートロードの仕様ルールでpsr-0というのもあるが名前空間を指定する仕様?ぽいので今回は分かりやすくhelpersにしてみました。

3.composerのオートロードを更新

「composer.json」を変更したら更新処理を施します。変更部分が"autoload"部分のみなのでターミナルから以下のコマンドを実行。

$ composer dump-autoload

もし他にも変更点があれば以下のコマンドで全体を更新しておきます。

$ composer update

この際以下のようなエラーがでましたが作成したヘルパ関数のパスが間違っていただけでした。

Script Illuminate\Foundation\ComposerScripts::postAutoloadDump handling the post-autoload-dump event terminated with an exception

4.ファイル内で使用

これで作成〜初期設定までが完了したのでLaravelのファイル内のどこでも指定したヘルパ関数が使用できるようになっていると思います。

echo test();
// これはテストです

またLaravelの対話型シェルを起動するコマンドtinkerを使えば簡単に動作を確認できます。

$ php artisan tinker

実行すると以下のようになるので、>>>に続いてメソッドなどを記入すると結果を確認することができます。

Psy Shell v0.11.2 (PHP 8.0.12 — cli) by Justin Hileman
>>> test()
=> "これはテストです"

終了する時はCtrl + Cで停止できます。

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index