Tuum/Webの開発
思えば、Tuum/Webを作り始めたのは2014年の11月頃。一度ぐらい満足できるフレームワークを自作してみたい、と思い立ってしまい、
- 良いとされる設計を積極的に使う(PSR-7、ミドルウェア、DIコンテナなど)、
- そのうえで、自分の欲しい機能を実装する、
という方向で作り始めました。
2015年5月頃には、ほぼ完成したのですが、どうも気にかかる点が出来てしまいました。おそらく、次の二点。
1. 思った以上に複雑になった。
2. 欲しいのはフレームワークではなかった。
なので、基本ボツに。
えぇ〜!
せっかく作ったのに。
複雑すぎる
- 良いと思える設計から少しずれた、
- 自分が欲しい機能について、理解してなかった、
一番最初にミドルウェアの引数をどうするか悩んだのですが、できるだけ簡単な形を選んでしまいました。使う分には簡単そうに見えるのですが、フレームワーク側が複雑になってしまいました。
自分が採用した形が、
$response = $middleware($request);
の形。
これだと、帰ってくる$responseに対して処理を行うことが出来ません。そのため、戻りループ用の別インターフェースを作って、としているうちにコードが「ちょっと」複雑に。ちなみに、Symfonyも似たようなことをしてるので、それほど悪い実装ではないはず。
一方、ほぼ標準になりつつある形が
$response = $middleware($request, $response, $next);
$nextとか面倒だなと思ってました。が、フレームワーク作ってみて、このAPIの良さがわかってきました。
もう一点は、次のTuum/Respondの開発をして分かりました。自分の欲しかった機能を十分に理解できてなかったからです。単体のパッケージを作ることで、機能についてじっくりと考えられたわけです。
欲しいのはフレームワークではない
で、この理由。
勉強のために作ったというのもあるので、そこそこ良いフレームワークができたら、もういいかなという気になった。と言うのはあります。
さらに、PSR-7ベースで、素晴らしいマイクロフレームワークがいくつも出てきてます。Slim3とかExpressive。それにRelayもミドルウェアディスパッチャーとしてよく出来てます。
結局、自分が欲しいのは、先に書いた「欲しい機能」の部分であり、フレームワークではありません。すでにあるマイクロフレームワークを利用して、自分の欲しい機能が追加できれば、十分なわけです。
コーディングの勉強には最適
とはいえ、フレームワークを自作するのは、コーディングの練習には最適ですね。やってよかったなと思ってます。
ということで、次の開発話に続きます。
0 件のコメント:
コメントを投稿