(ワークスポット・ジェーピー)のブログ。仕事・技術・その他の雑記。2015年4月3日金曜日ミドルウェアベースでPSR7を使った自作フレームワーク相変わらずフレームワークを自作している。勉強になるし、万が一、いいものができたら実際に使ってみたいと思いながら作っている。今までは、勉強がメインだったが、今回は本当に使えそうな感じになってきた。名前は「TuumPHP」。作り始めたきっかけStackPHPとLaravel2014年の夏頃、Laravel4.2で開発をしていて、これは楽に開発できるフレームワークだなぁと関心した。自分の仕事だとアップデートについて行くのは難しいと感じていた。作ったら、作り変えない程度の機能追加がたまにある程度で、数年は運用する必要がある。なんとかなると思うけど。そんな時、ミドルウェアとStackPHPについて調べてみて、これは素晴らしいと。単純な構造を組み合わせることで複雑なアプリを構築することができて、PHPの方向はこれだと思った。こんなエントリをQiitaにアップしている「StackPHPとミドルウェアについて調べてみた」つまり、StackPHPのような簡潔な構造で、Laravelのように開発しやすいくて、データの流れが自然(ファサードとか使わない)、できればバージョンアップもパッケージ別に対応可、そんなフレームワークがほしいと思った。探したけれど、いいのが見つからず。自分で作ってみるか、というのが始まり。作ってからしばらくして、標準のHTTPリクエストやレスポンスの規格がもうそろそろ完成するという話が流れてきた。Psr-7という規格。不変オブジェクトが使われている、ときいて早速導入して見た。思いつかないので、徒然と書いてみる。マイクロフレームワーク+ビュー。SlimやSilexより少し機能が豊富なフレームワーク。モデル側(DB)などは持ってない。マジックな機能つまりLaravelから拝借した機能、ということですね。フォームの入力エラーで、フォームにリダイレクトで戻るときに、入力値(withInputs)やバリデーションエラー(withErrors)などを一緒に返せる。フォームに値を表示するときに、リダイレクトの戻り値(withInputs)を簡単に利用できる。APIやメソッド名を参考に。ミドルウェアなんでもミドルウェア。ルーティングもミドルウェアなので、いくつでも追加できる。ルーティングの前のプリ・ルーティングも、ルーティング後のコントローラ内のポスト・ルーティングもできる。ルーティングの後のディスパッチャーもミドルウェア。コントローラーもミドルウェアの一つ、ので、単純な継承でコントローラークラスを作れる。いうか継承する必要は無いはず。コントローラ内で簡易ルーティングができる。貧者のアノテーション・ルーティングですね。APIも含めて色々と変わる可能性は高い。独立したコンポーネントを作っていて、こちらはドキュメントとテストはそこそこあるが、フレームワークとしてはドキュメントもテストもほぼ未着手。その代わり、こんな文章を書いている。フレームワークの使い方ではなくて、どうしてこうなった?の理由を書いたほうが勉強になるかなと思ったから。次のバージョンでPsr-7でミドルウェアに対応すると表明している。5もすでにミドルウェアベースになっているし、次にはPsr-7を使ってくるのでは無いかと思う。注目したいのは、今後のPHPでよく使われるミドルウェアAPIはどれか、という点。APIが同じなら互換性が高いため、コードやオブジェクトを共通して使える。OAuthとかのクラスを使いまわせるかどうか、というのが大事。フレームワークを自作するなら、APIの目安がついてからのほうがいいと思う。(Atom)ブログについて独立系エンジニア(?)=SOHO=自営業をしている開発者のブログ。本体はワークスポット・ジェーピーです。PHP+DBを使ったウェブ開発が主たる仕事です。