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

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

More than 1 year has passed since last update.

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

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

など思っていたんですが、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

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

ogataka50
WEBエンジニーア,men
http://youngforever.hatenablog.com/
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした