ログ日記

作業ログと日記とメモ

PHPのフレームワーク再考

PHPフレームワークを考えている。


2006年からLaizを作り始めたわけだけれど、普通に利用する機能と実験的機能がごちゃ混ぜでフレームワークが肥大化している。
特に、PHP5.3用に変更したときにPHP4のコードをそのまま持ってきたり新しい仕組みを取り入れたりしてちょっと見づらいコードになった。


既に受託案件などで何度も使っているので主要機能についてはバグがあるとか動作がおかしいとかいうことはない。
でもいくつか使いにくい点というかもっと効率のいい方法があるんじゃないかと思うようになってきた。
変えたい部分は以下

  • 設定を柔軟にしすぎた。結局使い方は2パターンくらいになる。
    • 完全独自のURIにするか、HTMLファイル構造メインのURLにするか
    • hidden値の書き出しは使わない。フレームワークが自動で設定するよりHTMLで見れた方が何となく落ち着く。
    • 無駄にインターフェースが多い
      • Javaをやる前だったので設計が変
      • PHPはインターフェースのメリットがあまり無い
  • 最初にPHPの全ファイルを読み込む
    • 構文チェックや特定インターフェースの実装クラスをイテレーターで全て取得するときには使えるが、富豪的だし思ったほど利用しなかった
  • 配列からオブジェクトへ
    • PHP4の配列メインの構造からPHP5のオブジェクトメインの構造へ完全に変更できていない

で、結局これらを変更しようと思うと全体的な構成を変えないといけない。


もっと単純に、必要な機能だけを実装してシンプルでも使い勝手の良いものを作りたい。
フレームワークにやってほしいことって何だろうと改めて考えつつ書き出す。

  • URLマッピング
  • リクエスト変換
  • フォーム入力チェック
  • 任意のURLでグループ化可能な共通処理

この四つ、これだけあればいい。
それぞれ具体的に書くと

  • フロントコントローラーとURLマッピング
    • album/list、album/add のようなリクエストに対してアクションコントローラーを割り当てるアプリっぽい方式
    • album_list.html album_add.html のようなhtmlがまずあり、それにPHP処理を割り当てるHTMLメインの方式
    • 最終的なエラー・例外補足
  • リクエスト変換
    • 配列をオブジェクトに変換
    • 全角を半角にするなどの共通処理
  • フォーム入力チェック
    • 一般的なバリデーション
  • 共通処理
    • フィルターなどと呼ばれるもの
    • ログインやヘッダーフッターなどの共通処理をまとめる

このくらい。


おそらくURLマッピングディレクトリ・ファイル構造がそのフレームワークの特徴の大部分を占めるのではないかと。
各種コンポーネントの取得方法や値の設定方法もそれぞれ特徴があるけれど、それは付随的な機能というかヘルパー的な、お助け機能。
まぁ大抵の場合はフレームワークの設定で任意のURLマッピングディレクトリ構造にできるのだろうけれど。



それから必須のライブラリとして

  • DB
  • テンプレートエンジン

がある。
これはTsukiyoYokazeまたはFlexyを多少変更して使おうかと。

あると嬉しいライブラリとしては

  • メール送信
  • ファイルアップロード
  • 権限管理
  • セッション管理
  • トランザクション管理
  • テスト補助

など。これらは既にあるものから選んで使うか100行くらいなら自分で書く。
多数のファイルを読み込んで様々な構成に対応するっていうのは無しの方向で。




最近のフレームワークってどうなってるんだろうと思って Zend Framework 2 のチュートリアルをやってみた。
http://framework.zend.com/manual/2.1/en/user-guide/skeleton-application.html
データベース1テーブルの操作するだけなのに、これは疲れる。
http://d.hatena.ne.jp/noopable/20121025
フレームワークの仕組みとしては、この辺を読むと使ってみたい気もする…。


http://www.nosenaoki.net/category/zf2/
こちらを読みつつ、使えるところを使いつつ薄いラッパーを書こうか考え中。