You are here
Home > Laravel > PSR2

PSR2

PHP5.6からPHP7.0へ移行したところで、クライアントのプロジェクトもLaravel5.2からLaravel5.5へのアップグレードが必要と思う最近。

というのは、Laravel5.5は、LTS(Long Term Support)のバージョンであり、長期サポートということで2年間続くからです。Laravelは、現在ほぼ1年に2回にメジャーなバージョンアップをします。あるバージョンでは前バージョンと異なる部分が大きいこともあり、現実的には変更や検証の作業が大変で毎回毎回はとても。ということで、Laravel5.5に移行したら当分はバージョンアップはマイナーだけで済むのではないかという考えです。

しかし、この検討中に、私らが開発で使用しているコーディングスタイルがLaravelのそれとは違うことに気づきました。一番大きい違いは、私らはインデントにタブ文字を使用していますが、現在のLaravelは、タブの代わりに空白文字(スペース)の使用です。なんと、Laravel5.1からすでにそうなっていたらしい。

調べてみると、Laravelは、PSR2というコーディングスタイルを現在採用しています。PSRは、PHP Standard Recommendationの略で、PHPのお勧めの標準という意味。標準にもいろいろなレベルがあって、コーディングスタイルのスタンダードだけでなく、ローディング、ログ、キャッシュなどいろいろなスタンダードがあります。

参照:http://www.php-fig.org/psr

さて、Laravelが使用しているPSR2は、

http://www.php-fig.org/psr/psr-2/

で詳しく説明されていますが、

要は、複数のプログラマが同じプロジェクトで開発を行うときに、コードの読みやすさのためのコーディングの規則ということです。

取り決めの例としては、

  • インデントには、タブではなく4文字のスペース文字を使用する。
  • namespaceの宣言の後には空行を1行入れる。useの宣言のブロックの後にも空行1行を入れる。
  • クラスの定義の括弧は、
    class Foo {

    }
    でなく、

    Class Foo
    {

    }
    である。

  • 条件文(if, switch)やループ文(for, foreach)の括弧は、
    if (true)
    {

    }
    else
    {

    }
    でなく、

    if (true) {

    } else {

    }
    である。

  • PHPの定数、true, false, nullは必ず小文字

などなど、変数名に関しての規則も含み結構たくさんあります。

PSR2準拠のサンプルとして以下が表示されています。

<?php
namespace Vendor\Package;

use FooInterface;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class Foo extends Bar implements FooInterface
{
    public function sampleMethod($a, $b = null)
    {
        if ($a === $b) {
            bar();
        } elseif ($a > $b) {
            $foo->bar($arg1);
        } else {
            BazClass::bar($arg2, $arg3);
        }
    }

    final public static function bar()
    {
        // method body
    }
}

私は、昔からタブ派でなので、ここに来てスペース(空白)派になることには抵抗あります。また、bitbucketやgithubのサイトでコードが表示されるときにタブだと上下で揃わなくなったりとマイナスな面にも気づいていました。しかし、sublimeのようなエディターは特別に指定しなくても既存のインデントに合わせてくれるし、コーディングにおいてはタブからスペースへの変換はそう問題ないだろうと、PSRの標準に移行することに決めました。

決めたところで、問題は、現行のプログラムをどうすべてPSR2のコーディングスタイルに変換するか。次回の課題です。

Leave a Reply

Top