PSR準拠のコードを書いてみる

# 前書き

なかなかPSR準拠のライブラリって見つからないなぁという感じで書いてみようかなと思い立ち、とりあえず前準備。

みんなそう思ってオレオレなライブラリが増えていくのかも。

## PSRとは

PHP-FIGという割と有名（らしい）団体が作ったPHPの規約。

前に調べた時には PSR-0 から PSR-3 までありました。
最近4番以降もできたらしいけど見てない。

PSR-0,1,2 はコーディング規約、PSR-3 はロガーのインターフェースに関わる規約です。

# yumパッケージのインストール

## CodeSniffer

### とりあえず探す

```
$ yum search sniffer
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * epel: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
============================================================ N/S Matched: sniffer =============================================================
ettercap.x86_64 : Network traffic sniffer/analyser, NCURSES interface version
netsniff-ng.x86_64 : A high performance network sniffer for packet inspection
php-pear-PHP-CodeSniffer.noarch : PHP coding standards enforcement tool
tcpick.x86_64 : A tcp stream sniffer, tracker and capturer
httpry.x86_64 : A specialized packet sniffer designed for displaying and logging HTTP traffic
wireshark.x86_64 : Network traffic analyzer

  Name and summary matches only, use "search all" for everything.
```

### php-pear-PHP-CodeSniffer

```
$ sudo yum install php-pear-PHP-CodeSniffer
$ repoquery --list php-pear-PHP-CodeSniffer
```

### 使ってみる

```
$ phpcs --standard=Psr2 ./

FILE: /home/hoge/fuga/Test.php
--------------------------------------------------------------------------------
FOUND 0 ERROR(S) AND 1 WARNING(S) AFFECTING 1 LINE(S)
--------------------------------------------------------------------------------
 1 | WARNING | A file should declare new symbols (classes, functions,
   |         | constants, etc.) and cause no other side effects, or it should
   |         | execute logic with side effects, but should not do both. The
   |         | first symbol is defined on line 7 and the first side effect is
   |         | on line 15.
--------------------------------------------------------------------------------

Time: 55 ms, Memory: 4.25Mb
```

検査した全ファイルを表示させるには -v オプションを付与すれば問題なさそう。


## ロガーインターフェース

### とりあえず探す

```
$ yum search psr
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
epel/metalink                                                                                                           | 6.2 kB     00:00
 * base: ftp.iij.ad.jp
 * epel: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
base                                                                                                                    | 3.7 kB     00:00
extras                                                                                                                  | 3.4 kB     00:00
nginx                                                                                                                   | 2.9 kB     00:00
updates                                                                                                                 | 3.4 kB     00:00
============================================================== N/S Matched: psr ===============================================================
iipsrv-httpd-fcgi.noarch : Apache HTTPD files for iipsrv
iipsrv.x86_64 : Light-weight streaming for viewing and zooming of ultra high-resolution images
php-PsrLog.noarch : Common interface for logging libraries

  Name and summary matches only, use "search all" for everything.
```
php-PsrLogがそれっぽいのでこれを入れてみる。

### php-PsrLog

```
$ sudo yum install php-PsrLog

$ repoquery --list php-PsrLog
/usr/share/doc/php-PsrLog-1.0.0
/usr/share/doc/php-PsrLog-1.0.0/LICENSE
/usr/share/doc/php-PsrLog-1.0.0/README.md
/usr/share/doc/php-PsrLog-1.0.0/composer.json
/usr/share/php/Psr
/usr/share/php/Psr/Log
/usr/share/php/Psr/Log/AbstractLogger.php
/usr/share/php/Psr/Log/InvalidArgumentException.php
/usr/share/php/Psr/Log/LogLevel.php
/usr/share/php/Psr/Log/LoggerAwareInterface.php
/usr/share/php/Psr/Log/LoggerAwareTrait.php
/usr/share/php/Psr/Log/LoggerInterface.php
/usr/share/php/Psr/Log/LoggerTrait.php
/usr/share/php/Psr/Log/NullLogger.php
/usr/share/php/Psr/Log/Test
/usr/share/php/Psr/Log/Test/LoggerInterfaceTest.php
```

なるほどここにinclude_path通さないとな、と思ってphpinfoチェックしたら最初から通っていたなど。
さすがyum、よく出来ている。

# 環境整備終了

これで後は適当に書いて試せる環境になりました。

とりあえずCodesnifferは必須だよね、って思います。
個人的にはWarningまで潰したいし、意識しても行毎の文字数とか見切れない部分も多いので。