この記事は2019新卒 エンジニア Advent Calendar 2019の1日目の記事です。
(参加しようと思ったのが13日でしたが、空いている枠が1日しかありませんでしたので1日目の記事として投稿しました。すみません。)
動機
仕事でフレームワークを使ってWebアプリを開発しています。
自作でフレームワークを作ることで、
- プログラマとしてのスキルアップ
- フレームワークが何をしているのか理解できるようになり、バグの原因発見が容易になる
- 機能追加の際にフレームワークの動きも加味していいコードが書けるようになる
以上のメリットがあると考えたためです。
どのように作ったか
パーフェクトPHPの第7~8章を参考にしました。
得られた知見(大きなもの一部抜粋)
スクラッチでフレームワークを作ることで以下のような知見を得られました。
PHPがどのようにレスポンスを返すか
header('HTTP/1.1 200 OK') #HTTP header
echo $content; #HTTP body
恥ずかしいことにechoでresponsebodyを返していることすら理解していませんでした...
HTTPRequest/Responseを追えるようになったのは大きな成長だと思います。
リクエストURLからコントローラへの橋渡し
$tokens = explode('/', ltrim($url, '/'));
foreach ($tokens as $i => $token) {
if (0 === strpos($token, ':')) {
$name = substr($token, 1);
$token = '(?P<' . $name . '>[^/]+)';
}
$tokens[$i] = $token;
}
$pattern = '/' . implode('/', $tokens);
$routes[$pattern] = $params;
urlを分割し、controller名とaction名に分ける処理です
この後ルーティングを参照し、controller名を使って目的のphpをrequireします
普段投げているリクエストURLがどのようにcontrollerと結びついているのかを知ることができました
まとめ
普段意識せずにviewとcontrollerを配置してwebアプリを実装していました。
今回のようにスクラッチでフレームワークを実装してみると大小様々に得られるものが多く、特に
- PHPの言語的な理解
- フレームワーク内の処理に関する理解
が深まって良いのではないかと思います。