PHPCompatibilityを実行するためのDockerイメージを作った

PHP5からPHP7への移行を検討するとき、この記事を思い出してPHPCompatibilityを使ってみたところ、結構便利そうだった。

kakakakakku.hatenablog.com

で、ちょっと導入が面倒な気がしたので、Dockerイメージに無理やり押し込んでみたのがこちら。

https://hub.docker.com/r/ariarijp/php-compatibility/

PHP_CodeSnifferとPHPCompatibility導入済みのイメージなので、Dockerホスト上のPHPアプリが置いてあるディレクトリをマウントすれば phpcs が実行できる。

設定ファイルは元記事を参考に、PHP7で非推奨になったものをチェックする。

<?xml version="1.0"?>
<ruleset name="wordpress">
  <rule ref="PHPCompatibility">
    <arg name="testVersion" value="7.0" />
    <exclude name="PHPCompatibility.PHP.DefaultTimezoneRequired" />
  </rule>
</ruleset>

試しにWordPressを対象に実行してみる例がこちら

$ docker run --rm -v `pwd`:/mnt/host ariarijp/php-compatibility phpcs --extensions=php --standard=/mnt/host/ruleset.xml /mnt/host/wordpress

FILE: /mnt/host/wordpress/wp-admin/includes/class-ftp.php
----------------------------------------------------------------------
FOUND 0 ERRORS AND 1 WARNING AFFECTING 1 LINE
----------------------------------------------------------------------
 902 | WARNING | Function dl() is deprecated since PHP 5.3
----------------------------------------------------------------------


FILE: /mnt/host/wordpress/wp-admin/includes/class-pclzip.php
----------------------------------------------------------------------
FOUND 2 ERRORS AFFECTING 2 LINES
----------------------------------------------------------------------
 5345 | ERROR | Function set_magic_quotes_runtime() is deprecated
      |       | since PHP 5.3 and removed since PHP 7.0
 5376 | ERROR | Function set_magic_quotes_runtime() is deprecated
      |       | since PHP 5.3 and removed since PHP 7.0
----------------------------------------------------------------------

...略...

PHP5.6のEOLは2018/12/31。まだ余裕があるようで、時間はあっという間に過ぎてしまうので、こういったツールも活用しつつ計画的にアップグレードしていきたいところ。