PHP_CodeSnifferとPHPMDを使って自動的にコードを少しでも綺麗にする

Published: 2016年12月3日 by tomsato

概要

複数人で開発を行うと各々好き勝手にコードを書かれてしまって気がついたらコーディング規約が定まらない汚いソースコードになってしまうので便利ツールを使って少しでも改善していく。

PHPコードのチェックをPHP_CodeSnifferとPHPMDで行う

自動でチェックが走るようにGitのHooks機能機能を使ってcommit時に毎回確認するようにする

PHP_CodeSnifferとは

PHPコード規約のチェックを行うツール

phpcsコマンドでチェックを行えるが、phpcbfを使って自動で修正することもできる
以下のコーディング規約を対応している

$ phpcs -i
The installed coding standards are MySource, PEAR, PHPCS, PSR1, PSR2, Squiz and Zend

独自のルールも設定できる

PHPMDとは

PHP Mess Detector

PHPコードの静的コード解析ツール

こちらもphpmdコマンドでチェックを行うことができて、出力形式はxml,text,htmlで出力ができる

どういう分析が行えるかはオプションで指定することができて以下のルールが存在する

種類 説明
codesize コードが大きすぎないかチェック
controversial 命名規則など議論の余地がある部分を検出するチェック
design 設計上の関連のチェック
naming 変数名など名前関連のチェック
unusedcode 使われていないコードのチェック
cleancode 綺麗なコードかチェック

CircleCIとは

詳しくは以下にまとめている

CircleCI入門の入門

GitHubにPHPコードをpushした際にCircleCIが自動でチェックするように設定することを目指す

自動チェック手順

リポジトリ作成

新しく以下のリポジトリを作成した
https://github.com/tomsato/php_check

composer.json作成

$ cat composer.json
{
    "require-dev": {
        "phpmd/phpmd": "*",
        "squizlabs/php_codesniffer": "2.*"
    },
    "scripts": {
        "test": [
            "composer install",
            "./vendor/bin/phpmd ./src/ text codesize,design,naming,unusedcode",
            "./vendor/bin/phpcs --standard=PSR2 --colors ./src/"
        ]
    }
}

サンプルプログラムの作成

$ cat src/TestClass.php
<?php

class TestClass
{
    public $var = 'Hello world !!';

    public function displayHello()
    {
        echo $this->var;
    }
}

phpmd,phpcsを試しに実行してみる

// composer install
$ curl -sS https://getcomposer.org/installer | php
$ sudo mv composer.phar /usr/local/bin/composer

$ composer test
// エラーが出ないことを確認する

vendorディレクトリなど不要なものをGitHubに上げないように.gitignoreを作成する

$ cat .gitignore
vendor/
composer.lock
composer.phar

pre-commit時に実行するようにする

$ cat .git/hooks/pre-commit
#!/bin/sh

composer test

実行権限も付与させるのを忘れずに

$ chmod 755 .git/hooks/pre-commit

ここまで直したらGHEにプッシュする

エラー時にcommitできないことを確認する

試しにサンプルプログラムに書いたnamespaceを消してcommitしてみた

$ git commit
> composer install
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Nothing to install or update
Generating autoload files
> ./vendor/bin/phpmd ./src/ text codesize,design,naming,unusedcode

> ./vendor/bin/phpcs --standard=PSR2 --colors ./src/

FILE: /home/tomsato/php_check/src/TestClass.php
----------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
----------------------------------------------------------------------
 3 | ERROR | Each class must be in a namespace of at least one level
   |       | (a top-level vendor name)
----------------------------------------------------------------------

Time: 24ms; Memory: 3.75Mb

Script ./vendor/bin/phpcs --standard=PSR2 --colors ./src/ handling the test event returned with error code 1

エラーが出たことを確認できる

Share

最近の投稿

NetlifyのSplit TestingとFunctionsについて使い方をまとめる Split TestingはGitHubのブランチをベースにしたA/Bテストを行うための機能のことで、FunctionsはNetlifyでAWS Lambdaを使うことができる

NetlifyとはHTMLなどの静的コンテンツのみで構成されたWebサイトを閲覧できる形で配信するWebサービス GitHubやBitbucket、GitLabなどと連携して使うことができて、リポジトリにプッシュすることで自動でCI/CDを行うことができる、無料枠が豊富で独自ドメインを設定可能

WordPressからJekyll(GitHub Pages)に移行した手順をまとめる。 お金的な事情や使いやすさなどの理由で無料のJekyll+GitHub Pagesに移行した。JekyllとはMarkdown等から静的ページを生成する静的サイトジェネレータ

Scala開発のためにScalaらしさをまとめる 言語設計者の設計思想を元にScalaらしさについてまとめる オブジェクト指向と関数型の融合について

StorybookとはUI開発環境を提供するツール React、React Native、Angular、Vueなどをサポートしている ユーザーは独立した開発環境でコンポーネントを個別に作成して挙動の確認をテストできたり、コンポーネントを一覧にしてカタログ化できるので他の人に紹介する時に使えたりする

カテゴリ一覧

タグ一覧