LoginSignup
19
20

More than 5 years have passed since last update.

phpcsでカスタマイズしたコーディング規約をチェックする

Last updated at Posted at 2016-07-06

正直なところ、今まであまり厳格に規約に沿ってコーディングしてきませんでした。

  • ある程度守っていればいいだろ
  • 統一させたいなら整形ツール的なやつで自動化すればいいじゃん

など思っていたんですが、OSSなど作っていきたいと考えた時、ちゃんと標準的なコードを書きたいと思い、コーディング規約をしっかり守りたいと考えるようになりました。

また何が標準かというのを理解するために整形ツールなどではなく、phpcsを使ってコーディング規約をチェックするようにしました。

phpcsインストール

PHP_CodeSniffer

PHP_CodeSnifferをインストールすることでphpcs,phpcbfなどがまるっと使えるようになります。

composer global require "squizlabs/php_codesniffer=*"

ドキュメント通り、composerでさくっとinstall

使い方、規約のルール指定

PHP_CodeSniffer Usage

phpcs --standard=PSR2 /path/to/file

などで指定したコーディング規約でチェックをすることができます。

規約ルールのカスタマイズ

現在のプロジェクトのコーディング規約はフレームワーク側の兼ね合いもありPSR2をベースにして、一部フレームワーク側の合わせたものになっています。

なので、そのままPSR2を適用すると意図しない規約のチェックが行われるので、PSR2をベースに一部をカスタマイズしたものを作成しました。

vendor/squizlabs/php_codesniffer/CodeSniffer/Standards以下に各種規約ルールがあります。

ここにカスタマイズした規約ルールを作成し、その規約を指定してphpcsを実行するイメージです。

//MyPSR2という規約ルールを作成する
mkdir vendor/squizlabs/php_codesniffer/CodeSniffer/Standards/MyPSR2 
vi vendor/squizlabs/php_codesniffer/CodeSniffer/Standards/MyPSR2/ruleset.xml

今回はPSR2をベースにインデントを4タブ、いくつかのルールを除外したものを作成しました。

exclude nameはphpcs -sなどで実行して除外したいルールを追加していく感じです

ruleset.xml
<?xml version="1.0"?>
<ruleset name="MyPSR2">
 <description>The MyPSR2 coding standard builds on the PSR2 coding standard.</description>
 <arg name="tab-width" value="4"/> <!-- タブ -->

 <exclude-pattern>*/Tests/*</exclude-pattern>

 <!-- Include the whole PSR2 standard except FunctionComment, which we override -->
 <rule ref="PSR2">
  <rule ref="Generic.WhiteSpace.DisallowSpaceIndent"/>
   <rule ref="Generic.WhiteSpace.ScopeIndent">
    <properties>
     <property name="indent" value="4"/>
      <property name="tabIndent" value="true"/>
     </properties>
   </rule>

  <exclude name="PSR1.Files.SideEffects.FoundWithSymbols"/> <!--  -->
  <exclude name="PSR2.Methods.FunctionCallSignature.Indent"/> <!--  -->
  <exclude name="PSR1.Methods.CamelCapsMethodName.NotCamelCaps"/> <!--  -->
  <exclude name="PSR1.Classes.ClassDeclaration.MissingNamespace"/> <!--  -->
  <exclude name="Generic.WhiteSpace.DisallowTabIndent.TabsUsed"/> <!--  -->
  <exclude name="Generic.WhiteSpace.DisallowTabIndent.NonIndentTabsUsed"/> <!--  -->
  <exclude name="Generic.WhiteSpace.ScopeIndent.Incorrect"/> <!--  -->
  <exclude name="Squiz.Classes.ValidClassName.NotCamelCaps"/> <!--  -->
 </rule>

</ruleset>

ルール作成後に、

phpcs --standard=MyPSR2 /path/to/file
のように実行すればカスタマイズされたルールで規約のチェックをすることができます。

SnapCrab_NoName_2016-7-5_18-20-1_No-00.png

これでしっかりコーディング規約にそったコードを書いていけますね!
次はいちいちコマンドラインから実行するのもアレなので、エディタからコーディングチェックできるようにしていこうと思います。

19
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
20