laravel-ide-helperを使ってみた

## 概要

- laravel-ide-helperというライブラリを使ってみたので使った時のメモと導入方法を残す。

## できるようになること

- モデルクラスのコード補完とタイプチェックができるようになる。
- 下記のようなコードが`TestController.php`に記載されていた時、`$user_id = $user->id;`の`->id`部分にマウスカーソルを持っていってもコード補完されない。

    ```app/Http/Controller/TestController.php
    <?php
    
    namespace App\Http\Controllers;
    
    use App\Models\User;
    
    class TestController extends Controller
    {
        public function Test()
        {
            $user = new User();
            $user_id = $user->id;
        }
    }
    ```

    ![TestController_php_—_src.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/22f6d6c8-daec-2aed-6a1d-2f111f235b5c.png)

- このライブラリを入れて「直接Modelクラスの関数にPHPDocを記載」 or 「ヘルパーファイルを出力」することでコードの保管ができる様になる。

    ![スクリーンショット_2022-04-16_6_22_57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/0c6ae030-34f2-f470-9b07-7c57a0997c15.png)

## 導入方法

1. 下記コマンドを実行して開発環境にのみ当該のライブラリをインストールする。

    ```terminal
    $ composer require --dev barryvdh/laravel-ide-helper
    ```

1. `config/app.php`のprovidersの配列の「Package Service Providers...」のコメントの直下に下記の内容を記載する。

    ```config/app.php
    'providers' => [

    /*
     * Package Service Providers...
     */
    Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class,
    ```

1. `app/Providers/AppServiceProvider.php`のregister関数に下記のような修正を入れる。

    ```app/Providers/App/ServiceProvider.php
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        if ($this->app->isLocal()) {
            $this->app->register(\Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class);
        }
    }
    ```

## 使ってみる

### Modelクラスの関数にPHPDocを自動記載

1. 下記コマンドを実行することで「直接Modelクラスの関数にPHPDocを記載」 or 「ヘルパーファイルを出力」することでコードの保管ができる様になる。（個々にモデルクラスを指定して下記コマンドを実行する事もできる。）
    - 直接Modelクラスの関数にPHPDocを記載

        ```terminal
        $ php artisan ide-helper:models --write
        # もしくは
        $ php artisan ide-helper:models -W
        ```

    - ヘルパーファイルを出力

        ```terminal
        $ php artisan ide-helper:models --nowrite
        # もしくは
        $ php artisan ide-helper:models -N
        ```

1. ちなみに　上記のコマンド群はどちらもコード補完用のコードの自動生成を行うモデルクラスを指定する事が可能である。指定方法はホワイトリスト方式、ブラックリスト方式どちらでも実施する事ができる。
    - 何も指定しない時
        - `app/Model`ディレクトリのすべてのクラスがスキャンの対象になる。
    - ホワイトリスト方式（「このファイルにだけスキャンをかけてください」と指定する。）
        - 下記の様に指定する（Userクラスだけスキャンしてほしい時 ※ヘルパーファイル出力の際も`--nowrite`オプションのあとにモデルクラスを指定する。）

            ```teminal
            $ php artisan ide-helper:models -W "App\Models\User"
            # もしくは
            $ php artisan ide-helper:models -W　--dir "app/Models/User.php"
            ```

    - ブラックリスト方式（「このファイル以外にスキャンをかけてください」と指定する。）
        - 下記の様に指定する（Userクラス以外をスキャンしてほしい時 ※ヘルパーファイル出力の際も`--nowrite`オプションのあとにモデルクラスを指定する。）

            ```teminal
            $ php artisan ide-helper:models -W --ignore="App\Models\User"
            ```

### IDE用コード補完ヘルパーファイルの出力

1. 下記コマンドを実行することで_ide_helper.phpが作成され、これをご使用中のIDEに読ませる事によりコードの保管ができるようになる。

    ```terminal
    $ php artisan ide-helper:generate
    ```

### PhpStome用コード補完ヘルパーファイルの出力

1. 下記コマンドを実行することで.phpstorm.meta.phpが作成され、これをPhpStomeに読ませる事によりコードの保管ができるようになる。

    ```terminal
    $ php artisan ide-helper:meta
    ```

## 参考文献

- [barryvdh/laravel-ide-helper](https://github.com/barryvdh/laravel-ide-helper)