logo-idv ico_pp

お手軽にPSRに準拠した開発

エンジニア

お手軽にPSRに準拠した開発

背景

先日、インディバルにて新規プロジェクトがスタートしました。予定としては、8人ほどの人員で約1年間の開発を行いますので、それなりの規模になります。
開発環境は、いま世界的にも人気が高いAWSやLaravelを利用することが決まりました。しかし、もう1つ決めなければいけないことがあります。
プロジェクトスタート時のお約束とも言える、「コーディングルール」についてです。

同じ企業内でも、プロジェクトによってコーディングルールが微妙に違っているケースは少なくありません。人によって好みや癖があるので当たり前なのですが、毎回そのルールを決めるのは面倒なことです。

そんな中で目にしたのが、PSR(PHP Standard Recommendation)
ちょっと調べたところ、PSRに従うことで色々と思い悩むことなく世の中的に標準的なコーディングが行えると実感できました。
今回はその概要を簡単にご説明したいと思います。

PSRとは

Moving PHP forward through collaboration and standards.

PSRとは、PHP Framework Interop Group(PHP-FIG(http://www.php-fig.org/))が作ったPHPコーディング推薦ルールになります。

PHP-FIGは各種フレームワークやアプリケーションを開発したメンバー(http://www.php-fig.org/members/)によって構成されているため、ここで標準化されたルールは「とにかく信頼度が高い!」・・・と個人的には感じています。

ただし、あくまでRecommendations(推薦)なので過信はしないように気を付けましょう。

PSRリスト

現在採用されているPSR(http://www.php-fig.org/psr/)は、主に6つとなります。

・PSR-1 Basic Coding Standard (http://www.php-fig.org/psr/psr-1/)
・PSR-2 Coding Style Guide (http://www.php-fig.org/psr/psr-2/)
・PSR-3 Logger Interface (http://www.php-fig.org/psr/psr-3/)
・PSR-4 Autoloader (http://www.php-fig.org/psr/psr-4/)
・PSR-6 Caching Interface (http://www.php-fig.org/psr/psr-6/)
・PSR-7 HTTP Message Interface (http://www.php-fig.org/psr/psr-7/)

※各PSRの細かい仕様は省略します。リンク先のページから直接ご覧ください

今回のプロジェクトのコーディングルールも、このPSRに準拠して進めていきたいと思います。

プロジェクトに適用

PSR-1, PSR-2

タブ禁止などの基本コーディングルールになります。
ラインの間隔や括弧の付け方などは各自好みがあるので、とかく意見が分かれ、ルールを決めるのが大変な時もありますが、PSRでは細かく指定されているので悩むことがありません。実に嬉しいところです。

今回はIDEにPhpStormを利用するため、IDEの力を借りればより簡単に実現できます。

基本コーディングルール
ふむふむ。簡単!

PSR-3

Laravelは Monolog libraryを採用している
https://laravel.com/docs/5.3/errors#introduction

Monolog(https://github.com/Seldaek/monolog#submitting-bugs-and-feature-requests) は PSR-3 interfaceを実装しているので、Laravelを利用する限り、PSR-3に関しては特に気にすることもありません!

PSR-4

Laravelは PSR-2とPSR-4に従っている
https://laravel.com/docs/master/contributions#coding-style

今回のプロジェクトではLaravelで開発することが前提なので、あとは私たちが適切に使用すれば、必然的にPSR-4に従うことになります。
さらにPhpStromでは、実際のコーディング時にチェックまでしてくれます。
https://confluence.jetbrains.com/display/PhpStorm/PHP+Namespaces+and+PSR+Support+in+PhpStorm

PhpStrom
他に私たちにやることがあるとすれば、Composerを利用するくらいです。

PSR-6

最近採用されたルールのようで情報も少なく、今回のプロジェクトでどう採用するかはまだ議論が始まっていません。最近PHP-FIGから Taylor Otwell(Creator of Laravel)を含め何人か辞退したと話題になりましたが、その発端になったのがPSR-6とか・・・?

どのみち、標準になったのが最近過ぎてPSR-6関連の記事や実装libraryが少ないため、今回は無理せず保留か、再検討を重ねていきたいと思います。

PSR-7

Http通信では世の中でも広く普及しているguzzleを使う
Guzzle utilizes PSR-1, PSR-2, PSR-4 and PSR-7
http://docs.guzzlephp.org/en/latest/overview.html
NICE! Thank you!

“composer require guzzlehttp/guzzle”

以上で対応終了です!

おさらい

LarvelとPhpStormを利用するだけで、必然的にPSRに(ほぼ)準拠した開発ができると分かりました。実際に手を動かす場合は、PSR-1,2,4の内容をよく理解し意識するだけでいいかと。コーディングルールのページがシンプルになる気がします。

執筆者プロフィール

来日9年目、韓国出身のEngineer。ゲームとお酒と映画が好きで、大体家にいれば何とか生きていけます。