0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CodeSnifferを利用してコーディング規約を自動チェック

Last updated at Posted at 2022-02-16

#初めに
開発を行っていく中、コーディング規約(PSR12)が守られているかをチェックを行うことは必須です。
しかし、自分で目視してもどこかで見落としがあったりリファクタリングに時間がかかったりしないでしょうか?

そんな時に、自動でコーディング規約を守られているかをチェックするツールが CodeSniffer です。

※今回のチェック対象は Laravel8 のWebアプリケーションです。

#PSR12とは

PSR-12 は、コーディングスタイルガイドである PSR-2 の拡張および置き換えと、基本的なコーディング標準である PSR-1 への準拠が必要になります。
PSR-2 と同様に、PSR-12 の目的は、異なる作成者のコードを理解する(読む)際の認識の摩擦を減らすことです。

詳しい詳細は以下URLを参照。
【PHP】PSR-12 Extended Coding Style(拡張コーディングスタイル)

なお、LaravelはPSR2が非推奨となりPSR12を使用することを推奨されています。

#CodeSnifferを実際に使う

###composerを利用する場合
#####1. composer.jsonに記載する

composer.json
"require-dev": {
        "squizlabs/php_codesniffer": "3.*"
    }

#####2. composer updateを実行

$ composer update

#####3. phpcs.xmlを作成し、ルールや設定を定義

phpcs.xml
<?xml version="1.0"?>
<ruleset name="PSR12 Custom">
    <description>A custom PSR12</description>

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

    <!-- 適用コーディング規約の指定 -->
    <rule ref="PSR12" />

    <!-- 出力に色を適用 -->
    <arg name="colors" />

    <!-- オプション p:進捗表示  s:エラー表示時にルールを表示 -->
    <arg value="ps" />

    <!-- 除外ディレクトリ -->
    <exclude-pattern>/bootstrap/</exclude-pattern>
    <exclude-pattern>/config/</exclude-pattern>
    <exclude-pattern>/database/</exclude-pattern>
    <exclude-pattern>/node_modules/</exclude-pattern>
    <exclude-pattern>/public/</exclude-pattern>
    <exclude-pattern>/resources/</exclude-pattern>
    <exclude-pattern>/routes/</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>
</ruleset>

・コーディング規約として PSR12 を指定。
・エラーレポート出力時に色付けする。
・オプションとして、エラー表示時にルールを表示する事、進捗を表示する事を指定。
・除外するディレクトリやファイルを指定。今回はLaravelのコアソースをなるべく除外し、appとtestsディレクトリ内をチェックするようにする。

#####4.結果 コマンドを実行する
コマンドが長いため、composer.jsonのscripts内に記載してcomposer updateを実行

composer.json
"scripts": {
    "phpcs": [
            "./vendor/bin/phpcs --standard=phpcs.xml ./"
        ]
    }

Before

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

after

$ composer phpcs

コーディング規約でエラーがあれば出力されるが、なければ以下のように表示される

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

Deprecated: PHP Startup: Use of mbstring.internal_encoding is deprecated in Unknown on line 0
........................... 27 / 27 (100%)

###PHPStromで設定する場合
#####1. Preferencesを開く
PHPStrom->Preferences
スクリーンショット 2022-02-17 1.01.31.png

#####2. コードスタイルでPHPを選択
Editor->Code Style->PHP
スクリーンショット 2022-02-17 1.02.11.png

#####3. Set formを押してPSR12を選択
スクリーンショット 2022-02-17 10.06.52.png

#####4. コードのリフォーマットを実施
以下コマンドを実行
Macの場合: option + Cmd + L
Windows: Alt + Ctrl + L

#終わりに
今回は、開発効率を上げる上で自動化できるライブラリを紹介しました。
実際に実務に入ると、コーディング規約に違反したソースコードを書いていてはNGです。

CodeSnifferはコーディング規約の対策として非常に簡単なものなので、ぜひご参考になれば幸いです。

最後までお読みいただき、ありがとうございました!

####■参考サイト
[Laravel入門 コーディング規約PSR12への対応とphp_codesniffer(第19回)]
(https://www.laravuejs.dev/tutorials/laravel-s1/laravel-115/)

【PHP】PSR-12 Extended Coding Style(拡張コーディングスタイル)

LaravelにPHP_CodeSnifferを導入しコーディング規約(PSR)に沿った記述を行う

squizlabs/PHP_CodeSniffer

0
0
2

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
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?