タブ派?スペース派?

システム開発事業部の町田です、タイトルは最近見始めたスタートアップを題材にした某海外ドラマで、タブ派の主人公とスペース派の彼女が言い争うシーンからです。
スペース派タブ派、おそらく結論がでない論争の代表だと思います。また、チーム開発をしているとそれ以外でも人それぞれ好みでコードの書き方が変わり、複数のスタイルが混在し、無駄な争いや作業がよく起こると思います。また、それを解消するためにコード規約を決めて確認しつつ書くことも面倒なものです。
そこで、そんな面倒なことはフォーマッタに任せてしまおうという提案です。
個人的によく利用しているのは
- prettier – javascriptのフォーマッタとして開発されたが以後様々言語の対応を進めているフォーマッタ。各種lintツールと連携が可能。
- PHPCodeSniffer – php向けlintツール、PHP Code and Fixerフォーマッタも同梱されている。PSR2などのコーディング規約を使用できる。
の2つ、どちらもコード規約を設定ファイルに記述しておく事で、コマンド一発で規約通りにフォーマットしてくれます。また、エディタにプラグインをインストールすることで動的に規約違反を表示することも可能です。
試しにPHPCodeSnifferを使用してみる
phpのパッケージ管理ツールのcomposerで導入することが可能です。
composer global require squizlabs/php_codesniffer
# インストールされたら以下のphpcsとphpcbfへのリンクが/path/to/.composer/vendor/bin配下に追加されます。
試しに以下のphpファイルでPSR2規約とのdiffを表示し修正してみます。
# cs-test.php 修正前
# ▸-はタブ
1 <?php
2
3 class Greeter {
4▸-function greet($name) { echo "Hello, ".$name; }
5 }
このファイルをPSR2に合わせて
# 差分を表示
> phpcs --standard=PSR2 cs-test.php --report=diff
--- cs-test.php
+++ PHP_CodeSniffer
@@ -1,5 +1,9 @@
<?php
-class Greeter {
- ▸-function greet($name) { echo "Hello, ".$name; }
+class Greeter
+{
+ function greet($name)
+ {
+ echo "Hello, ".$name;
+ }
}
# フォーマット実行
> phpcbf --standard=PSR2 cs-test.php
PHPCBF RESULT SUMMARY
----------------------------------------------------------------------
FILE FIXED REMAINING
----------------------------------------------------------------------
/Users/mamoru.machida/cs-test.php 5 2
----------------------------------------------------------------------
A TOTAL OF 5 ERRORS WERE FIXED IN 1 FILE
----------------------------------------------------------------------
Time: 314ms; Memory: 6Mb
# cs-test.php 修正後
1 <?php
2
3 class Greeter
4 {
5 function greet($name)
6 {
7 echo "Hello, ".$name;
8 }
9 }
PSR2はスペース派のようでした。
まとめ
この一連の流れをCIへ導入してチーム開発での無駄を減らすのもよし、個人のコーディングスタイルを矯正するためにこっそりローカルに導入するのもよしです。
タブ派スペース派などの論争が起こる前に導入をご検討ください。
Posted by MachidaMamoru