Scribble at 2023-07-07 13:52:36 Last modified: 2023-07-07 13:54:14
意外に、いや僕は最初から殆ど普及しないと思っていたけれど、PSR がリソースとしても殆どなくて、実行しているどころか知らない人の方が多いというのは、いくつか理由があってのことだと思う。ちなみに、その「知らない人」も多いと思うので説明しておくと、PSR というのは PHP のコーディング規約(PHP Standard Recommendation)のことであり、Java に倣ってコーディングの決まりを PHP FIG という団体が定めて2009年くらいから普及が始まっている。日本でも、北海道のベンダーが日本語訳を公開したり、一部では話題になっているけれど、二つの理由で殆ど普及していないと言える。
理由の一つは、大半の PHP の利用者はスクラッチでプログラムが書ける(つまりクラスを設計したりする)スキルがないコーダであるため、コーディングの規約に関心を払うインセンティブがない。とりわけ WordPress や CakePHP などの一部のコードをごちゃごちゃといじくってるだけの人々にとっては学習の負荷も高いわりに明白な効用がないので、気にする必要を感じないだろう(ちなみに、僕は良い悪いの話はしていない。こういう人たちがいなければ PHP も WordPress も、これだけの規模で普及しなかっただろう)。ということで、PSR は日本語版のウィキペディアにはエントリーすら存在しないというわけである。
そしてもう一つは、ウェブ制作会社のプログラマというのは大多数がコラボレーションなんてしない単独の開発をしていることが多いため、規約に従うスキルがあるとしても実務上のメリットがない。僕にしても、仕事の道具として PHP を使い始めてから今年で20年くらいになるが、他人のコードを利用して仕事をしたことはあるが(WordPress なり CodeIgniter なり)、僕自身の書いたコードを他人とやりとりしてシステム開発をしたことは殆どない。もっとも、僕が書いたバリデーション用のクラス・ファイルを後で同じクライアントの案件を受注した制作会社の人が勝手に使い回しているということはあるらしい。当社のディレクターや電通の人からも、「かわさんのコードをそのまま使ってるらしい」という話は何度か聞いたことがある。
しかし、そうは言ってもコーディングの規約そのものは興味のある話であり、自分自身のコーディング・スタイルとか癖や習慣のようなものを矯正したり反省する機会にはなる。試しに PSR-2 で掲げられている規約をいくつか参照してみよう。
「インデントには4つのスペースを使用し、タブは使用してはいけません。」
これには従っていない。僕は半角スペースをせっせと冒頭に並べるような無駄は好まないので、インデントはタブでやっている。確かに、これは宗教戦争みたいなものが昔からあって、半角スペースを使うとしても2個なのか4個なのか(3個というのもあるにはある)という陣営がある。
「行の長さに対してハードリミットがあってはいけません。ソフトリミットは120文字を上限とし、実際は80文字以内に抑えるべきです。」
事実上は従っているかもしれない。僕も1行の文字数が多すぎるのは可読性が下がるので好まないからだ。でも、80桁以内に制限してコーディングしているわけではない。エディタ(Microsoft Visual Studio Code や xyzzy)でも、制限する設定はない。
「クラスの開き括弧は次の行に記述しなければなりません。また閉じ括弧は本文最後の次の行に記述しなければなりません。」
「メソッドの開き括弧は次の行に記述しなければなりません。また閉じ括弧は本文最後の次の行に記述しなければなりません。」
これら二つは、僕も昔から従っている。僕も俗に「エジプト人の括弧」と呼ばれる囲み方は括弧が目立たないために良くないと思うからだ。インデントに何かのミスがあると、括弧だけを明示的に分離して書いていなければ、ブロックのスコープがわかりにくくなる。
「アクセス修飾子は、全てのプロパティ、メソッドに定義しなければなりません。」
これも従っている。但し、僕は殆ど public か private かのどちらかしか使っていないし、どちらも継承とかはあまりしないので、たいてい final だが。
「制御構造の開始時は、その後に1スペースを開けなければなりません。メソッドや関数の呼び出しはスペースを開けてはいけません。」
僕もこれは昔から同じことをしている。関数の呼び出しが "func( )" のようになるのはともかく、制御構造は関数ではないから、同じように書く方が危険でもあるからだ。よって、"if( )" ではなく "if ( )" と、括弧の前にスペースを入れる。それに、僕はかなり演算子の前後にもスペースを入れる書き方を好む。スペースを入れずに書くと、可読性が落ちてバグを見逃しやすくなると思うからだ。
「制御構造の開き括弧は同じ行に記述しなければなりません。」
これは従っていない。さきほどの理由と同じで、これではエジプト人だ。
「制御構造の開始前にスペースがあってはいけません。」
これは意味がわかりにくいけれど、もし "if (a=b) {" などと "a=b" の前後にスペースを入れて括弧で囲んではいけないという意味なら、僕は先に述べた理由によって従っていない。スペースを使わずに括弧で囲むと可読性が落ちるからだ。
というわけで、PSR に従っている(というか、PSR ができるずっと前から PHP のプログラマをやっているので、別に PSR に従って書いてきたわけではないが)場合もあれば、そうでない場合もある。そして、いまから PSR に従ってコーディング・スタイルを変えた方がいいなと思うのは・・・うーん、実はなかったりするな。確かに、これでは PSR が普及しないのもわかる。