search
LoginSignup
29
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

LaravelのModelに補完が効かなくて辛い人たちに贈る「Laravel IDE Helper Generator」の紹介

Eloquent Model でプロパティや scope を扱うときに補完が効いて欲しい。しかし、例えば下記のようにコードを書いても補完が効かなくて辛いですよね。

SampleRepository.php
    $sample = new Sample();
    dd($sample->id); // ここでidに補完が効いて欲しい!できればタイプヒンティングもしてほしい!

このように Model からカラム名にアクセスした際に補完が効かないのに加え、クエリをカプセル化してくれる scope を利用したときも補完は効きません。

App\Models\Sample.php
    public function scopeIsPublic($query)
    {
        return $query->where('is_public', true);
    }
SampleRepository.php
    $sample = new Sample();
    dd($sample->isPublic()->get()); // ここでisPublic()に補完が効いて欲しい!

補完が効かないから、カラム名は typo や型を間違えて代入してしまうリスクもあるし、scope も大文字や小文字を間違えてしまうこともあるでしょう。

本記事では Laravel の Model に補完・型情報を付与してくれるライブラリ【Laravel IDE Helper Generator】について解説します。

本記事でできるようになること

このように scope を hover すると型定義が出ますし、補完も効きます。

スクリーンショット 2020-02-18 13.21.29.png

また、カラム名へのアクセスに対しては型補完が効いています(業務ソースなので隠しまくりなのですがご容赦ください)。

スクリーンショット 2020-02-18 17.21.49.png

この例ですと、とあるテーブルの 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が生成されています。

一部抜粋するとこのような内容です。

_ide_helper_models.php
/**
 * App\Models\User
 *
 * @property int $id
 * @property string|null $email
 * ...

以上でやることはもう終わりました。さっそく自身の Repository や Model ファイルを開き、hover してみましょう。

補足

運用面では_ide_helper_models.phpを git 管理してしまうと、複数メンバー間で Conflict が多発すると思うので、gitignore 扱いにして、各自で生成しましょうという運用にしたほうが望ましいと思います。

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
What you can do with signing up
29
Help us understand the problem. What are the problem?