laravel PHP-CS-Fixerを導入してみた PSR1 及び PSR2準拠のルール設定

# 目的

- すでに紹介されているPHP-CS-Fixerの導入方法を見ながら実際にインストールしてみてソース整形を実施してみたのでまとめる

# ご注意

- 本記事は下記で紹介されている内容を参考にPHP-CS-Fixerを導入したときのメモです。
    - [https://qiita.com/suin/items/4242aec018d086312fe7](https://qiita.com/suin/items/4242aec018d086312fe7)
    - [https://qiita.com/ucan-lab/items/7d4180462347a42009d5](https://qiita.com/ucan-lab/items/7d4180462347a42009d5)
- もともとの情報は参考にさせていただいた記事の筆者さんがまとめてくださったものです。

# 情報

- ハードウェア環境
    
    | 項目 | 情報 |
    | --- | --- |
    | OS | macOS Catalina(10.15.5) |
    | ハードウェア | MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) |
    | プロセッサ | 2 GHz クアッドコアIntel Core i5 |
    | メモリ | 32 GB 3733 MHz LPDDR4 |a
    | グラフィックス | Intel Iris Plus Graphics 1536 MB |
    
- ソフトウェア環境
    
    | 項目 | 情報 | 備考 |
    | --- | --- | --- |
    | PHP バージョン | 7.4.8 | Homebrewを用いてこちらの方法で導入→[Mac HomebrewでPHPをインストールする](https://qiita.com/miriwo/items/cd54077aad7e139cf518) |
    | Laravel バージョン | 8.X | commposerを用いてこちらの方法で導入→[Mac Laravelの環境構築を行う](https://qiita.com/miriwo/items/adaaaeecae69d6392e08) |
    | MySQLバージョン | 8.0.19 for osx10.13 on x86_64 | Homwbrewを用いてこちらの方法で導入→[Mac HomebrewでMySQLをインストールする](https://qiita.com/miriwo/items/ef6a064bc545fbea29d9) |
    | Node.jsバージョン | v12.14.1 | Homwbrewを用いてこちらの方法で導入→[Mac HomebrewでNode.jsをインストールする](https://qiita.com/miriwo/items/73d1546220f1c091a7d5) |

# 情報

- 特筆しない限り、コマンドは一つ前のコマンドと同じディレクトリで実行するものとする。

# 方法

※導入方法とどのような自動修正を加える予定なのか表示するところまで記載する。

1. laravelのアプリ名ディレクトリで下記コマンドを実行してPHP-CS-Fixerを取得する。

    ```terminal
    $ composer require --dev friendsofphp/php-cs-fixer -vvv
    ```

1. 下記コマンドを実行してPHP-CS-Fixerが導入されたことを確認する。（エラーが出なければOK）

    ```terminal
    $ ./vendor/bin/php-cs-Fixer --version
    ```

1. 下記コマンドを実行してPHP-CS-Fixerの設定ファイルを作成して開く。

    ```terminal
    $ vi .php-cs-fixer.dist.php
    ```

1. 開いた設定ファイルに下記の内容を記載した。（PSR-1 及び PSR-2準拠のルールを設定したいため下記のように設定）

    ```アプリ名ディレクトリ/.php-cs-fixer.dist.php
    <?php declare(strict_types=1);
    
    $finder = PhpCsFixer\Finder::create()
        // チェックするディレクトリの指定
        ->in([
            __DIR__ . '/app',
            __DIR__ . '/config',
            __DIR__ . '/database/factories',
            __DIR__ . '/database/seeders',
            __DIR__ . '/routes',
            __DIR__ . '/tests',
        ]);
    
    $config = new PhpCsFixer\Config();
    
    return $config
        ->setRiskyAllowed(true)
        ->setRules([
            '@PSR1' => true,
            '@PSR2' => true,
        ])
        ->setFinder($finder);
    ```

1. 設定ファイル`.php-cs-fixer.dist.php`が空だった場合でも、PHP-CS-Fixer標準のフォーマットでソースを修正してくれるようだ。
1. 早速下記のコマンドを実行してPHP-CS-Fixerがどのような修正を自動で加える予定なのか調べてみる。

    ```terminal
    $ ./vendor/bin/php-cs-fixer fix --dry-run --diff 修正してほしいファイルのパス 
    ```

1. 下記コマンドを実行することで修正の差分として表示したものを指定されたふぁいる　のみ実際に修正する。

    ```terminal
    $ ./vendor/bin/php-cs-fixer fix 修正してほしいファイルのパス 
    ```

1. 下記コマンドを実行することで指定ディレクトリ（今回だと　/app /config /database/factories /database/seeders /routes /tests直下）のすべてのファイルをチェックしてPHP-CS-Fixerがどのような修正を自動で加える予定なのか出力する事ができる。

    ```terminal
    $ ./vendor/bin/php-cs-fixer fix --dry-run --diff
    ```

1. 下記コマンドを実行することで修正の差分として表示したものを実際に修正する。

    ```terminal
    $ ./vendor/bin/php-cs-fixer fix
    ```

# 追記

- もしかするとPSR1とPSR2に準拠させたいなら、PSR2だけを.php-cs-fixer.dist.phpに指定すればいいかも
    - PSR2はPSR1に準拠していることが大前提なのでPSR2をルールに設定したらそもそもPSR1には準拠していることになるっぽい。
- 後、当該ライブラリのキャッシュファイルがlaravelアプリケーション名ディレクトリに作成されるけど.gitignoreで管理外にしておいたほうがいいかも

# 参考文献

- [https://github.com/FriendsOfPHP/PHP-CS-Fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer)本件のリポジトリ、色々調べるよりこちらのREADMEを読んだほうが早いかも