Eloquent Model でプロパティや scope を扱うときに補完が効いて欲しい。しかし、例えば下記のようにコードを書いても補完が効かなくて辛いですよね。
$sample = new Sample();
dd($sample->id); // ここでidに補完が効いて欲しい!できればタイプヒンティングもしてほしい!
このように Model からカラム名にアクセスした際に補完が効かないのに加え、クエリをカプセル化してくれる scope を利用したときも補完は効きません。
public function scopeIsPublic($query)
{
return $query->where('is_public', true);
}
$sample = new Sample();
dd($sample->isPublic()->get()); // ここでisPublic()に補完が効いて欲しい!
補完が効かないから、カラム名は typo や型を間違えて代入してしまうリスクもあるし、scope も大文字や小文字を間違えてしまうこともあるでしょう。
本記事では Laravel の Model に補完・型情報を付与してくれるライブラリ【Laravel IDE Helper Generator】について解説します。
本記事でできるようになること
このように scope を hover すると型定義が出ますし、補完も効きます。
また、カラム名へのアクセスに対しては型補完が効いています(業務ソースなので隠しまくりなのですがご容赦ください)。
この例ですと、とあるテーブルの transferred_at カラムへ日付を保存しているわけですが、日付保存可能かつ、振り込みされていない場合は null が格納されている、といったことがある程度型情報から読み取ることができます(null が良いのかはさておき)。
セットアップ
に概ね書いてあるとおりです。
まずは composer でインストールします。
composer require --dev barryvdh/laravel-ide-helper
Laravel5.5 以上を利用している方はこれでセットアップはもう終わりです。
Model の phpDocs を自動生成
続いて Model の scope やカラム名に対応した phpDocs を自動生成します。
下記コマンドを実行します。
php artisan ide-helper:model --nowrite
ide-helper:model
コマンドで実行できるわけですが、型定義ファイルをつくるオプションと、各 Model に直接上書きするオプションがあります。
個人的には、自動生成されたコメントがプロダクトコードに入り込むのは、運用ルールが増えてしまってあまり好きではないので--nowrite
オプションをつけて実行するのがおすすめです。
さて、コマンド実行後に、root ディレクトリに_ide_helper_models.php
が生成されています。
一部抜粋するとこのような内容です。
/**
* App\Models\User
*
* @property int $id
* @property string|null $email
* ...
以上でやることはもう終わりました。さっそく自身の Repository や Model ファイルを開き、hover してみましょう。
補足
運用面では_ide_helper_models.php
を git 管理してしまうと、複数メンバー間で Conflict が多発すると思うので、gitignore 扱いにして、各自で生成しましょうという運用にしたほうが望ましいと思います。