Help us understand the problem. What is going on with this article?

【PHP】さくっとスタイル・フォーマットチェック

More than 3 years have passed since last update.

前置き

ルールが整っていない現場に入ったときに、
コードのスタイルやフォーマットなどで指摘を受けたくないので、
レビュー前に最低限のチェックができる環境を作りたい。

・・エディタに任せるのが一番だと思いますが。

概要

[1]Dockerコンテナにphing入れる
[2]対象ソースのディレクトリを共有にしてコンテナ起動
[3]中に入ってphing実行

※phpcsとphpmdをとりあえず入れていますが、目的に応じて追加したりしてください

実施

dockerいれる

【さらっとだけ覚えたい】Docker入門

ホストに必要なファイルを配置

以下をどこかに配置してください。
[1]Dockerfile
[2]composer.json
[3]build.xml(phing用)
[4]ruleset.xml(phpmd用)

phpcsはPSR2、phpmdのチェックルールに不満がなければ、
下記をコピペでおつかいいただけるかと。

Dockerfile
FROM centos:6.7

RUN yum update -y
RUN yum install -y yum-plugin-ovl

# Japanese Support
RUN yum -y groupinstall "Japanese Support"
RUN echo "LANG=\"ja_JP.UTF-8\"" > /etc/sysconfig/i18n
RUN source /etc/sysconfig/i18n

# ntp
RUN cp -p /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

# php
RUN yum install -y http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
RUN yum install -y --enablerepo=remi php php-xml

# composer
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php -r "if (hash_file('SHA384', 'composer-setup.php') === '669656bab3166a7aff8a7506b8cb2d1c292f042046c5a994c43155c0be6190fa0355160742ab2e1c88d40d5be660b410') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
RUN php composer-setup.php
RUN php -r "unlink('composer-setup.php');"
RUN mv composer.phar /usr/local/bin/composer
RUN chmod 777 /usr/local/bin/composer

# create phing dir
RUN mkdir -p /phing/src
RUN mkdir -p /phing/phpmd

ADD ./composer.json /phing/composer.json

RUN cd /phing && composer install --dev

RUN ln -s /phing/vendor/phing/phing/bin/phing /usr/local/bin/phing
RUN ln -s /phing/vendor/squizlabs/php_codesniffer/scripts/phpcs /usr/local/bin/phpcs
RUN ln -s /phing/vendor/phpmd/phpmd/src/bin/phpmd /usr/local/bin/phpmd
RUN chmod 777 /usr/local/bin/phing
RUN chmod 777 /usr/local/bin/phpcs 
RUN chmod 777 /usr/local/bin/phpmd 

ADD ./build.xml /phing/build.xml
ADD ./ruleset.xml /phing/ruleset.xml
composer.json
{
     "require-dev": {
        "squizlabs/php_codesniffer": "2.*",
        "phpmd/phpmd" : "@stable",
        "phing/phing": "2.*"
    }
}
build.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- buildタスクをデフォにしておく -->
<project name="phing" default="build">

  <!-- ソース置き場などはプロパティとして使用する -->
  <property name="myDir" value="/phing" />
  <property name="targetDir" value="/phing/src/" />

  <!-- buildタスク -->
  <target name="build" depends="phpcs,phpmd" />

  <!-- 静的解析ツールの設定 -->
  <target name="phpcs">
    <phpcodesniffer standard="PSR2" file="${targetDir}" allowedFileExtensions="php" />
  </target>

  <target name="phpmd">
    <phpmd rulesets="ruleset.xml">
      <fileset dir="${targetDir}">
        <include name="**/*.php" />
      </fileset>
      <formatter type="html" outfile="${myDir}/phpmd/phpmd.html"/>
      <formatter type="text" outfile="${myDir}/phpmd/phpmd.txt"/>
    </phpmd>
  </target>
</project>
ruleset.xml
<?xml version="1.0"?>
<ruleset name="My first PHPMD rule set"
         xmlns="http://pmd.sf.net/ruleset/1.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0
                     http://pmd.sf.net/ruleset_xml_schema.xsd"
         xsi:noNamespaceSchemaLocation="
                     http://pmd.sf.net/ruleset_xml_schema.xsd">
    <description>
        My custom rule set that checks my code...
    </description>

    <rule ref="rulesets/cleancode.xml" />
    <rule ref="rulesets/codesize.xml" />
    <rule ref="rulesets/controversial.xml" />
    <rule ref="rulesets/design.xml" />
    <rule ref="rulesets/naming.xml" />
    <rule ref="rulesets/unusedcode.xml" />
</ruleset>

コンテナ起動

docker build -t phing:latest .
docker run -itd --name phing --volume ソースのあるディレクトリ:/phing/src phing
docker exec -it phing /bin/bash

チェック

cd /phing
phing

※phpmdの結果は/phing/phpmd配下に吐くように設定してます

おまけ

静的解析ツールの単体実施

phing
phing タスク
phpcs
phpcs --standard=PSR2 src/
phpmd
phpmd [ファイル名|ディレクトリ] [レポートフォーマット(text or xml)] [ルール]
phpmdルール 説明
cleancode 汚いコードに指摘
codesize メソッドやクラスの大きさに対して指摘
controversial キャメルケースを勧める
design ソフトウェアデザインに関連した指摘
naming 命名ルール
unusedcode 使われていないコードの指摘
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away