こんにちは。ラクスルの吉岡です。 今回はラクスルにおけるコーディング規約について書きたいと思います。
コーディング規約の必要性
コーディング規約とは特定のコードの書き方のルールや約束事を定めたもののことを指します。 基本的には開発を行うチーム/プロジェクト内で共有し、皆がそれを遵守しコーディングをします。 ルールを定め記述方法を統一することで、コードが読みやすくなり、 バグの抑制、開発効率アップ、メンテナンス性の向上などの手助けにもなります。
コードの書き方は人それぞれで違うので、 一緒に開発している人数が多ければ多いほど大切になってきます。
PHPのコーディング規約
ラクスルのシステムはPHPで開発されています。 PHPのコーディング規約は数多く存在していて、メジャーなものだけでもこれだけあります。
- PEAR 標準コーディング規約
- WordPress コーディング基準
- CakePHP コーディング規約
- CodeIgniter PHP コーディングスタイル
- Symfony コーディング規約
- Zend Framework PHP 標準コーディング規約
この他にも、各フレームワークの関係者が集まったPHP-FIGという団体があり、 PHPのコーディング規約を標準化しようという働きしていたり、 また、こちらは規約ではないのですが、GitHubを解析してどの記述方法が多いのかをまとめたサイトもあったりします。
ラクスルにおけるコーディング規約
ラクスルにはまだ厳格な規約は存在しません。 かつて「ラクスルコーディング規約」なるものを作ろうという話があったりもしたのですが、 2013年の6月26日を最後にドキュメントは更新されておらず…。 開発チームも徐々に増えてきたのでそろそろ作っておきたいところです。
ただ、規約がないとはいえ、ある程度みんなの中でなんとなーく共通のルールがあるので、 ここでほんの一部ですが紹介したいと思います。
インデント
かつては空白4つ分のタブだったのですが、 Symfonyを導入するタイミングで空白4つのスペースを使うようになりました。 未だにスペースとタブが混在する箇所があって気持ち悪い…。
制御構造
[php] if ($hoge == $fuga) { $flg = 1; } elseif (!$foo) { $flg = 2; } else { $flg = 3; } [/php]
比較演算が行われる括弧の前後はスペースを付けます。 elseifは1単語。 switchはほとんど使われていないですね。
クラス/関数
[php] <?php class Class_Raksul { function getUser($user_id) { } } [/php]
クラス名は Class_{クラス名} と書きます。 クラスの始まりの波括弧は改行せずに同じ行に書いてます。
関数名は、古いコードだとsnakeケースになっていることが多いですが、 今は基本的にcamelケースで書いています。 スペースの入れ方も上記のような感じです。
ただ、一部controllerではフレームワークに依存する形式で書いていたりもするので、 全体では統一しきれていないですね。そこが少しモヤモヤ。
変数/命名規則
[php] $user = ''; $user_list = array(); $is_user = true; [/php]
配列要素は ${なにか}list とし、 boolean型の場合は $is{なにか} とするように心がけています。 あと、変数への代入が続くときはイコールの位置を揃えています。 この辺はまだ徹底されていない部分なので、何とかしたいですね。
まとめ
ラクスルは今まで少数での開発期間が長かったので、 コーディング規約を作るまでもなかったのですが、 徐々に人数も増えてきたのでそろそろやらないと、と思っています。
小さいチームだと少しハードルが高いかもしれませんが、 書き方が統一されるといろいろ捗るし、とっても気持ちいいので、 自分の開発チームはまだやってない!というところは是非検討してみてください。