- 2012-12-01 (土) 20:00
- PHP
今年もやって参りました年末を彩る PHP Advent Calendar 2012 です。3年目ということですっかり恒例行事となってきましたね。今年も完走目指してみんなで頑張りましょう!
参加枠があとわずかですが残っていますので、いっちょやってみようという方は参加表明をお願いします。
さて、初日は前から書いてみたかったテーマです。
PHPをWebシステム開発言語として使い出してかれこれ12年が経ちました。これだけ長い間使い続けているとうことは何か理由があるわけです。そこで、あらためてその理由を考えてみました。
1. 安定して動作する
まず、なんと言っても大きいのが安定して動作し続けているということです。
規模の大小に関わらず数多くのWebサイトがPHPで動作しているのは周知のとおりです。私がこれまでPHPで構築してきたWebシステムが現在でも動作しており、これまでPHP自体が原因で障害が発生した、ということはほぼありません。
どんなに素晴らしい言語であっても動作環境が不安定では意味を成さないので、これは当たり前ですが大事なことです。
2. 環境構築が楽
Apache と mod_php を入れれば動作します。めちゃ簡単。下記コマンドを叩けばインストール完了。あとはPHPファイルをサーバにアップすれば、それで動きます。
$ sudo yum install httpd php
開発環境限定ですが、PHP5.4以降であれば、ビルトインサーバがあるので Apache すら必要ありません。
$ php -S 127.0.0.1
3. 手軽に書ける
HTMLのテンプレートから出発した言語だけに、HTML内に埋め込んで書くのは何の苦労もありません。
<?php if ($isDisp): ?>
表示する
<?php endif; ?>
プログラマではないデザイナさんやコーダーさんもPHPであれば多少書ける人が多いです。ビュー側の簡単な改修であれば、わざわざプログラマ側で対応せずともデザインの延長で対応してもらえることが多いです。
また普段使っていると忘れがちですが、日本語を扱うのに何の苦労も必要ありません。実はこれは大きいことで、2000年当時だとPHP3国際化版があったおかげで、日本でPHPが普及したといっても過言ではないと思います。
4. HTTPリクエスト毎にスクラップ&ビルド
PHPではHTTPリクエストを受けて起動するたびにソースコードのコンパイルを行います。コンパイルで生成された実行コードで処理を行い、終了すれば実行コードごと破棄します。各 HTTP リクエストは独立して実行されるので、別のリクエストの処理が干渉することはありません。
これにより、ひとつのHTTPリクエスト内で行う処理に集中して実装することができます。
この一見すると重そうな処理が実用的なスピードで動作しています。
ちなみに apc などのコードキャッシュを使えばコンパイルした結果の実行コードをキャッシュすることができ、パフォーマンスを向上させることができます。デフォルトではアプリケーション内の値はキャッシュされないので、HTTPリクエスト毎の独立性は保たれています。
5. 豊富な機能、ライブラリ、プロダクト
PHPにはWebシステム開発に便利な機能が数多く提供されています。
標準関数の充実っぷりはもちろんですし、PECLで提供されている拡張モジュール、PEARやComposerで公開されているオープンソースのライブラリ、CakePHPやSymfony2、FuelPHPなどのフレームワーク、テスティングツールPHPUnit、WordPressやDrupalなどのCMS、EC-QUBEやMagentoといったECサイト、OpenPNEのようなSNS、他にもWebに特化した数多くのライブラリやプロダクトがあります。
OAuth などの新しい仕組みが登場してもすぐにそれを利用するライブラリなどが登場します。
オブジェクト指向としての機能もあり、いまどきの開発プロセスをこなすことができます。
Webシステム開発で必要な機能はひと通り揃っていると言って良いでしょう。
6. 情報が多い
ユーザが多いからこそですが、書籍やblogなどで数多くの情報が公開されています。
自分が情報やコードを公開した時も多くの反応をもらうことができます。これは使っていくモチベーションになりますね。
7. 仕事に使える
仕事に使える(使っている)のはやっぱり大きいですね。
これには安定性、実績、そして他の人とコラボレーションしやすいなどがあります。
また開発者以外の人にも認知度が高いので導入において支障になることもほとんどありません。
8. 最近のPHP
最近の PHP は言語の機能拡張が盛んで、ここ最近のバージョンでは以下のような機能が追加されています。
- namespace(5.3)
- closure(5.3)
- traits(5.4)
- short array syntax(5.4)
- array dereferencing(5.4)
- generator(5.5予定)
- finally(5.5予定)
もう今となっては当たり前ですが、5.2以前には匿名関数を定義するにはcreate_function()を使うしかなく、これが結構書きづらかったので、closureを自然に書けるようになったのはやっぱり嬉しいですね。
array_walk($values, function($v) {
echo $v;
});
これらの機能がないと絶対にダメということは無いのですが、やっぱりこういった他の言語で良いとされている機能が盛り込まれるのは単純に嬉しいですし、使うのが楽しくなります。
9. 充実した公式マニュアル
良くPHPの特徴して挙げられますが、やはり公式マニュアルの充実っぷりは素晴らしいです。
日本語への訳も適時行われていますので、頭が下がるばかりです。
10. 慣れている
これを書くとPHPじゃなくてもええやん、という話になりますが、やっぱり慣れているというのは大きいです。
使い方、書き方、ハマりどころ、色々分かっていて、安心して使えるのでやはり選択することが多くなります。
11. PHPの思想
PHPはシステムを作るためのツールの一つとして認識しています。
現状はPHPを選択することが最も良いと思っていますが、状況が変わって、別の言語が良いと思えば、そちらの言語を選びます。何が何でもPHPというわけではなく、置かれている状況から判断して、あえてPHPを選択しています。
PHPコミュニティにいる人はこういった考えの人が多い印象です。
別にPHPしかできないからPHPを選んでいるわけではなく、別の言語も知っているし、書けるけど、PHPを選んでいるというわけです。
また、システムを作る、そしてそれを動かすということにフォーカスしている人は、その周辺の知識(サーバやインフラ、またテストなど)にも明るい人が多いです。プログラミング言語だけを見ているわけではなく、システム全体の中の一部としてPHPを捉えています。
(小さい案件などで全部やらざるを得ないという事もありますが)
これはシステム寄りではなくデザイナさんやコーダーさんも同じで、デザインやサイトの一つのツールとしてPHPを見ているという感じだと思います。
ここでPHPの父ともいうべき Rasmus Lerdorf さんの発言を引用しておきます。下記では、PHPを歯ブラシに例えて、あくまでツールと言い切っています。これはまさにPHPの思想ですね。
PHP is about as exciting as your toothbrush. You use it every day, it does the job, it is a simple tool, so what? Who would want to read about toothbrushes?
Interview – PHP’s Creator, Rasmus Lerdorf
12. コミュニティ
PHP コミュニティもPHPの魅力の一つです。 多様な人がいて、多様な活動をされています。いつも本当にお世話になっていますm(_ _)m
自分がいつも接していて良いなと思うのは、他の言語を貶めたり蔑むような発言をする人がいないということです。プログラミング言語の機能や思想について指摘したり、自分とは合わないといった発言をすることはもちろんあります。好き嫌いなどがあるのも当然です。
ただ、その言語を使っているというだけで晒すようなことはありません。
あくまでプログラミング言語はツールとして割り切っているからという面もあるでしょうけど、これはとても素晴らしいことだと思います。
PHPユーザがあえて煽る言語がPHPという自虐的な場面はたまに見ます:D たいてい愛情表現の一つだと思っていますけど、これからは恥ずかしがらずにPHP好きと言っちゃいましょう。
まだまだPHPです
たまにこんなことを聞かれることがあります。
「まだPHP使っていても大丈夫ですか?」
PHPがWebでメインストリームな時代が長いので、根拠は無くとも漠然とした不安を覚える人がいるようです。
現時点であれば、私ならこう答えます。
「はい、PHPで大丈夫ですよ。」
参考リンク
- PHP開発者 Rasmus Lerdorf氏インタビュー ~PHPは「利己的」な開発者の集まり:NEWS & REPORT|gihyo.jp … 技術評論社
- Interview – PHP's Creator, Rasmus Lerdorf – SitePoint
- PHP: Dis Is It
- Newer: CakePHP 2.3 の新機能 ServerShell の話
- Older: PHPer が「JUnit実践入門」を読んだ