【Laravel9】静的解析ツールPHP_CodeSnifferを導入する

やりたいこと

今回はLaravelを使う中で、最近よく使うCodeSnifferの導入手順をまとめようかと思います。

静的解析ツールを使うことでチーム開発をする上で一定のコーディングルールが設けることができてコードを統一できるところが良いんですね。

チーム内でコードの書き方とかで、ばらつきが気になる人は是非導入するべきかと思います!

いや、プロジェクトの最初に絶対導入するべきでしょう

手順

composerで取り込む

まず、静的解析を実行するのはローカル環境だけなのでdevオプションを追加しますね

composer require --dev squizlabs/php_codesniffer

利用できるコーディング規約を確認

実際に利用できるコーディング規約を確認してみてください

/var/www/html/プロジェクト名/vendor/bin/phpcs -i

CodeSniffer用の設定ファイルを作成する

vim /var/www/html/プロジェクト名/phpcs.xml

設定方法

僕はこんな感じにしてみました

XML
<?xml version="1.0"?>
<ruleset name="PSR12/Laravel">
    <description>PSR12 compliant rules and settings for Laravel</description>

    <arg name="extensions" value="php" />

    <!-- コーディング規約指定 -->
    <rule ref="PSR2" />

    <arg name="colors" />

    <arg value="ps" />

    <!-- 除外ディレクトリ設定 -->
    <exclude-pattern>/bootstrap/</exclude-pattern>
    <exclude-pattern>/node_modules/</exclude-pattern>
    <exclude-pattern>/public/</exclude-pattern>
    <exclude-pattern>/resources/</exclude-pattern>
    <exclude-pattern>/storage/</exclude-pattern>
    <exclude-pattern>/vendor/</exclude-pattern>
    <exclude-pattern>/server.php</exclude-pattern>
    <exclude-pattern>/app/Console/Kernel.php</exclude-pattern>
    <exclude-pattern>/tests/CreatesApplication.php</exclude-pattern>
    <exclude-pattern>/tests/</exclude-pattern>

    <!-- メソッド名のキャメルケース -->
    <rule ref="PSR1.Methods.CamelCapsMethodName.NotCamelCaps">
        <!-- ルールを除外 -->
        <exclude-pattern>*/tests/*</exclude-pattern>
    </rule>

    <!-- 非推奨のPHP関数を使わない -->
    <rule ref="Generic.PHP.DeprecatedFunctions" />

    <!-- コメントがフォーマットされているか -->
    <rule ref="Generic.Commenting.DocComment" />
    <rule ref="Generic.Commenting.DocComment.NonParamGroup">
        <severity>0</severity>
    </rule>
    <rule ref="Generic.Commenting.DocComment.ShortNotCapital">
        <severity>0</severity>
    </rule>
    <rule ref="Generic.Commenting.DocComment.TagValueIndent">
        <severity>0</severity>
    </rule>
    <rule ref="Generic.Commenting.DocComment.MissingShort">
        <severity>0</severity>
    </rule>

    <!-- 変数とメンバー変数の名前を検査する -->
    <!-- <rule ref="Squiz.NamingConventions.ValidVariableName" /> -->

    <!-- 論理演算子and/orを検出する -->
    <rule ref="Squiz.Operators.ValidLogicalOperators" />

<!-- 行の長さ上限 -->
    <rule ref="Generic.Files.LineLength">
        <properties>
            <property name="lineLimit" value="140"/> <!-- warningを出力する長さ -->
            <property name="absoluteLineLimit" value="160"/> <!-- エラーを出力する長さ -->
        </properties>
    </rule>
</ruleset>

コマンドで静的解析実行

通常コマンド

./vendor/bin/phpcs --standard=phpcs.xml ./

コマンドを短くするためには、composer.jsonのscriptsに追記しましょう

/var/www/html/プロジェクト名/composer.json
"scripts": {
    "sniffer": [
        "./vendor/bin/phpcs --standard=phpcs.xml ./"
    ],
    "sniffer-rewrite": [
        "./vendor/bin/phpcbf --standard=phpcs.xml ./"
    ]
},

実行コマンド

静的解析 composer sniffer

可能な限り自動修正 composer sniffer-rewrite

個人的には静的解析だけして、自分で直す方が良いです。

なんか急にフォーマットとか変わるのが怖いwww

まとめ

静的解析を取り入れることで得られる効果は絶大だと思います。

チームでPR出す前には一度解析をして、問題がないとOKみたいな感じでルールを作ってできたら良いですよね〜(例外はあるでしょうが)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA