Table of Contents
やりたいこと
今回は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みたいな感じでルールを作ってできたら良いですよね〜(例外はあるでしょうが)