VSCode上でCakePHPコーディング規約チェックの自動化

この記事はレコチョク [Advent Calendar 2022](https://qiita.com/advent-calendar/2022/recochoku)の16日目の記事となります。

## はじめに
はじめまして！株式会社レコチョクでサーバーサイドエンジニアをしている西村です。
日々の開発業務と趣味でのバンド活動によってクタクタな毎日ですが、すごく充実しています。
ちなみに好きなバンドはハヌマーンとandymoriです。

## 背景
PHPにはコーディング規約通りに記述されているか検証を行う「**phpcs**」というツールが存在します。
phpcsは本来コマンド実行により検証を行うツールですが、個人的にいくつかの「**要望**」がありました。

- 要望
    - エディターに記述する段階で**phpcs**のエラーを把握したい
    - 参加しているプロジェクトに合わせたコーディング規約に変更したい

そこで今回はより快適な開発環境にすべく、以下2点を目標に取り組みました。
- 目標
    - **VSCode上で自動的にコーディング規約を検証し、コード記述時にphpcsエラーを把握できる環境を作る**
    - **検証するコーディング規約をカスタマイズして、参加しているプロジェクトに合わせたphpcsエラーを表示させる**

![スクリーンショット 2022-11-22 15.06.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2957390/eb13ef6c-cf4e-6312-1ff5-edb844a30f4f.png)

## 環境(+利用した技術)
- 自身の環境
    - Mac: macOS Monterey ver 12.3
    - VSCode: ver 1.73.1
    - CakePHP: 4系
- 利用技術
    - [PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer)
    - [CakePHP_CodeSniffer](https://github.com/cakephp/cakephp-codesniffer)

## 導入
#### 1. PHPパッケージ依存管理ツール、Composerのインストール
まず始めにComposerというパッケージ依存管理ツールをインストールします。
Composerはライブラリ(パッケージ)同士の依存関係など、よしなに解決してくれます。


※インストールは以下公式サイトに従って実行してください

https://getcomposer.org/download/


インストールが完了したら、正常にインストールされたことを確認しましょう。
```sh
// インストール確認
$ php composer.phar
> 以下のテキストが表示されればOK!
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
```

PCの各フォルダからアクセスできるようパスを通します。
そして再度`php composer.phar`を実行し、パスが通っているか確認しましょう。
```sh
$ sudo mv composer.phar /usr/local/bin/composer
```


#### 2. Composerを用いてphpcsをインストール
Composerを用いてphpcsをインストールします。
また追加でCakePHPの公式が用意しているコーディング規約をインストールします。

```sh
$ composer global require  squizlabs/php_codesniffer
$ composer global require "cakephp/cakephp-codesniffer=4.*"
$ ~/.composer/vendor/bin/phpcs -i
> CakePHPの文字が表示されていればOKです！
```

#### 3. VSCodeのExtension、phpcsをインストール
VSCode上でphpcsを動作させるためには、拡張機能phpcsが必要です。
VSCodeを起動し、EXTENSIONS(shift + command + x)を開いてphpcsと検索、インストールボタンをクリック。

![スクリーンショット 2022-11-22 15.26.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2957390/a523b541-74ba-b58b-26ef-636c6ed583eb.png)


#### 4. VSCodeのsetting.jsonを編集、CakePHPのコーディング規約適用
インストール後、VSCodeの設定ファイル（`setting.json`）に設定を記入します。
MacはCommand + shift + P / WindowsはCtrl + Shift + P でsetting.jsonを表示します。

```JSON
{
    "phpcs.standard": "CakePHP", 
    "phpcs.executablePath": "/Users/[ユーザ名]/.composer/vendor/squizlabs/php_codesniffer/bin/phpcs",
}
```

上記を設定した状態で、CakePHPのプロジェクトファイルを閲覧してみると...
下記画像のように、コーディング規約に反している箇所が赤波線で出てくると思います。
これで無事VSCodeにCakePHPのコーディング規約を適応することができました👏👏
またVSCodeのミニマップにて、コード全体のphpcsエラーを確認することが出来ます。

![スクリーンショット 2022-12-08 12.55.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2957390/2a9d93ee-6e9b-2d51-9559-9b6971e09ef0.png)


#### 5. 独自のコーディング規約を作成
せっかくなら自分のプロジェクトに合わせたコーディング規約について指摘されたい！
ということで、phpcs(CakePHP)のルールをカスタマイズしたいと思います。

CakePHPのルール記述先: `./.composer/vendor/cakephp/cakephp-codesniffer/CakePHP/ruluset.xml`の内容を変更します。
今回は「メソッド内のネストレベル」をチェックするようなルールを追加しました。
※ [PHP_CodeSnifferのルールまとめ](https://qiita.com/blue32a/items/db049e091d4e7a469e6d)など、大変助かる記事がありますので、気になるルールがあれば追加してはいかがでしょうか？

```xml
<?xml version="1.0" encoding="UTF-8"?>
<ruleset name="CakePHP">
    <!-- 新しく作成したルール -->
    <rule ref="Generic.Metrics.NestingLevel">
        <properties>
            <property name="nestingLevel" value="3"/>
            <property name="absoluteNestingLevel" value="3"/>
        </properties>
    </rule>
</ruleset>
```

これによりネストレベルをVSCodeにてチェックできるようになりました👏👏

![スクリーンショット 2022-11-24 11.54.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2957390/537e40a2-6946-c08a-263e-1706794f444c.png)


## まとめ
今回はVSCode上にてコーディング規約チェックを自動的に行う設定 ＋ チェックするコーディング規約のカスタマイズを行いました。
これによりコーディング段階でのphpcsエラーを除去し、効率的に開発が進められると思います。

明日のレコチョク [Advent Calendar 2022](https://qiita.com/advent-calendar/2022/recochoku)は17日目「AWS Certificate Manager (ACM) 証明書の手動更新方法」です。お楽しみに！


## 参考
* [phpcsのおさらい: コードのチェックと自動整形を使って快適なWordPressテーマ・プラグイン開発をしよう その1](https://blog.photosynthesic.jp/2021/01/phpcs-wordpress-01/)
* [PHP_CodeSnifferのルールを作ってみる](https://zenn.dev/wim/articles/self-made_php_code_sniffer_rule)
* [CakePHPのアプリのコーディング規約チェックを自動で行う方法](https://www.ryuzee.com/contents/blog/6086)
* [PHP_CodeSnifferの導入方法と解説](https://qiita.com/nnmr/items/00f6cb1355c551604d0e)

---

この記事はレコチョクのエンジニアブログの記事を転載したものとなります。

https://techblog.recochoku.jp/8755