PHPでウェブアプリケーションフレームワークを自作しよう 第一回

PHPフレームワークSymfonycakePHPZend frameworkなど色々と選択肢があって今更自作する必要性など感じられない、こんな連載記事の需要もどうなんだろ
しかしながらPHPも5.3以降で名前空間、無名関数まで使えるようになり、ウェブ開発現場での主流の言語の立場はまだまだ崩さないだろう
特に日本の企業では圧倒的にPHPの案件ばっかりだ
(僕の周りがたまたまそうなだけなのかもしれないが)

PHPはレガシーで美しくない、大衆向けの言語だと思われがちだが、度重なるバージョンアップでわりかし楽しいプログラミング的なことは可能だと思った

Rubyで動的なAPI作るようなことは__callとか__callStatic等のマジックメソッド使えばある程度再現可能であるし
メタプログラミング的なことはやはり回りくどい実装になってしまうが…

フレームワークを自作していくことで自分の中でPHPの可能性が広がると思う

開発環境

御託はいいとして、第一回は開発環境の話から

とりあえずMAMPXAMPPの二択で

適当にインストールしたら、インストールディレクトリ下のbinにパスを通しておこう
Macなら.bashrcに

export PATH=/Applications/MAMP/bin/php/php5.3.6/bin:$PATH
alias phperror="tail /Applications/MAMP/logs/php_error.log"
alias apacheerror="tail /Applicatons/MAMP/logs/apache_error.log"
alias mysqlerror="tail /Applications/MAMP/logs/mysql_error_log.err"

とか追加すればいいと思う($PATHの前後注意)
シェル上で

source ~/.bashrc
which php

って打って、

/Applicatons/MAMP/bin/php/php5.3.6/bin/php

って返ってきたら成功
エディタは各自好きなの使えばいいが僕はEclipse+PDT使ってる

PHPUnit

次にPHPUnitpearでインストールしよう

pear config-set auto_discover 1
pear install pear.phpunit.de/PHPUnit

でおk
/Applications/MAMP/bin/php/php5.3.6/lib/php下にPHPUnitディレクトリがあればインストール成功
あと以下の追加パッケージは入れておこう

pear install phpunit/DbUnit

PHPUnitはこれからフレームワークの開発をTDDで行うために必須のテスティングフレームワークである
悪いPHPerが混沌なPHPのコードを産み出してしまうのはPHPオブジェクト指向を活用しきれてなかったり、テストが十分でなかったりするんだが、PHPUnitは素晴らしいテスト自動化のツールなので積極的に利用すべきだと思う
ドキュメントも充実してるのでなおさら良い

シンプルなMVCモデルを目指そう

MVCモデルはもうウェブアプリフレームワークでは標準のデザインパターンだとおもう

RDBMを扱い、データを読み書きするModel、APIの呼び出しに応じて、Modelからデータを処理し、Viewに橋渡すController、Controllerから受け取ったデータを人が読める形に整形出力するViewといった具合でアプリケーションを作るメリットはたくさんある。
特に、Viewを分離するって言うことは、Webデザイナさんとの連携を図るための重要なファクター

もともとPHPはテンプレート言語であるため、明確にViewを分離するために、今回はSmartyというサードパーティのテンプレートエンジンを利用しようと思う

といったところで執筆力が尽きた
次回はディレクトリ構成と、コアの部分の実装をしていこうと思う