株式会社 社会式株 PHPコーディング規約

Top - PHPコーディング規約

PHPを使う本当の理由

世間では、PHPは素早く作ることができるという評価があるのは知っていると思う。この手の評価は、常に議論を巻き起こして来た。多くの人々は、お気に入りの言語やプラットフォームに肩入れをし、どちらの言語がより優秀かと議論を繰り返してきた。 社会式株がPHPを使う本当の理由は1つだけだ。 そこそこの生産性に達するまでの習得コストが最も小さい。 そこそこの生産性と習得コストがどの程度のものなのか定式化することはしないが、本ドキュメントを通じてそれが幾分か伝える事が出来ればと思う。

小規模限定

PHPは1人月程度以下の規模でしか使用しない。 より大きな規模のシステムでは、Ruby On Railsを使用する。 これにより、PHPの利点を最大限に引き出す事が可能となる。

ツールはなるべく使用しないという事

ツール(PEAR,Smartyなど)を使いこなせば生産性をちょっぴりあげることが出来る。 ちょっと考えて欲しいのは、ツールの使い方を学ぶ必要があるのは、関わるプログラマ全員だという事だ。 1日で習得できる人もいれば、数週間かけてじっくり学ぶ人もいる。 習得に時間を掛けるぐらいならPHPを使う理由なんてないんだから、ツールを使う時点で負けだ。 そんな時間があるなら、もっと他に学んで欲しい事は山のようにある。RoR、構造化HTML、CSS、JavaScript、AJAX、Linux、ネットワーク、セキュリティなどなどなど

自動テスト

自動テストのために、PHPUNITを使用する。 自動テストを採用する理由は以下の通り。

PHPUNITの習得自体は全く意味がない。重要なのは、自動テストとテストファーストのテクニックである。 PHPUNITの機能に夢中になりすぎないように。 またこれは、他の言語・プロットフォームにおいても役に立つ本質的なテクニックである。

とは言え、新しい事をするときに最も重要なのは、利点ではなく、欠点を知る事だ。 テストファーストの弊害が参考になるかも。 何事にも欠点がある事を知り、あまり多くの期待をしないように。

PEAR

DBアクセスのインターフェースがDBMSごとに統一性がないため、PEARを使用する。 別にPEAR自体に対して価値は認めていないが、PHPのDBアクセスが駄目すぎなので、PEARを使ったほうがマシという話し。 それ以外のPEARモジュールは使用しない。

オブジェクト指向禁止

もし君がオブジェクト指向プログラマであれば、PHPのオブジェクトシステムは「いけてない」という事に同意してくれると思う。PHP4とPHP5では大きく変わるし、所詮後からとってつけた機能だし。

クラスを使用しなければ学ぶ事は一つ減るし、PHPのオブジェクトシステムから来るストレスを軽減することが出来る。PEARモジュールを使用すると、組込関数とPEARモジュールの名前規則が違うためにコードが汚く見える事がある。ならばいっその事、すべてを関数として作れば、統一感がありコードも読みやすくなる。本物のオブジェクト指向プログラマなら、PHPなんて使わないだろう。

ライブラリ禁止

プロジェクトを引継ぐ時に一番やっかいなのが、自作のライブラリだ。 従って、ライブラリは基本的に作成しない。 自作ライブラリは、あまり優秀でないプログラマにプロジェクトを引継ぐ時に足かせになる。

また、「社会式株のプログラマはライブラリを全く使用せずに、他社の何倍もの生産性をあげている。」という事も追記しておこう。

HTMLとPHPコード(ビジネスロジック)の分離

ビューとビジネスロジックは分離しよう。 次は分離されていない悪い例だ。
<?php
  print "<html>";
  //print分が続く。
  print "</html>";
?>
こう書くようにしよう。
<?php
?>
<html>
//htmlが続く。
</html>
次の例もビューが分離されていない。
<?php
$error ="<div class='error'>エラーですよ</div>";
>

<html>
<?=$error>
</html>
これはこう書く。
<?php
$error ="エラーですよ";
>

<html>
<?php if ($error) {>
<p class='error'>
  <?=$error>
</p>
<?php }>
</html>
HTML部分にPHPコードが入っているけどこれはこれでいいんだ。あくまで表示用のコードであり、ビジネスロジックではない。 これは次のようにしてもいい。
<?php
$error ="エラーですよ";
>
<html>
<?php require('tpl/errors.php'); {>
</html>
errors.phpで、
<?php if ($error) {>
<p class='error'>
  <?=$error>
</p>

ファイル構造は単純に

君がプログラマだったら、共通部分を別ファイルにしておいて、インクルードしたいと思うだろう。でもあまり複雑なファイルの依存関係はやめよう。ファイルが依存するのは2階層まで。例えばa.phpがb.phpをインクルードし、b.phpがc.phpをインクルードした場合、2階層だ。c.phpがさらにd.phpをインクルードすると3階層になる。これはちょっとやりすぎだ。 例えば次のようにしてもいいだろう。 users.phpで、common.phpとuser_lib.phpとheader.phpとfooter.phpをインクルード。 common.phpでは、config.phpとerror_handler.phpとlib.phpをインクルード。

まとめ

とにかく、単純に。 一番重要なのは、あまり優秀でないプログラマが即理解可能にすること。 ただし、テストファーストのテクニックはすべてのプログラマが習得すべきだ。

Valid HTML 4.0 Strict

株式会社 社会式株