【PHP】さくっとスタイル・フォーマットチェック
前置き
ルールが整っていない現場に入ったときに、
コードのスタイルやフォーマットなどで指摘を受けたくないので、
レビュー前に最低限のチェックができる環境を作りたい。
・・エディタに任せるのが一番だと思いますが。
概要
[1]Dockerコンテナにphing入れる
[2]対象ソースのディレクトリを共有にしてコンテナ起動
[3]中に入ってphing実行
※phpcsとphpmdをとりあえず入れていますが、目的に応じて追加したりしてください
実施
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)] [ルール]
phing
phing タスク
phpcs
phpcs --standard=PSR2 src/
phpmd
phpmd [ファイル名|ディレクトリ] [レポートフォーマット(text or xml)] [ルール]
phpmdルール | 説明 |
---|---|
cleancode | 汚いコードに指摘 |
codesize | メソッドやクラスの大きさに対して指摘 |
controversial | キャメルケースを勧める |
design | ソフトウェアデザインに関連した指摘 |
naming | 命名ルール |
unusedcode | 使われていないコードの指摘 |
Author And Source
この問題について(【PHP】さくっとスタイル・フォーマットチェック), 我々は、より多くの情報をここで見つけました https://qiita.com/tsuuuuu_san/items/60f6b34c8398a578fdd8著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .