たのしい独自フレームワーク

23
たのしい独自フレームワーク 2015-11-24 PHP BLT #1 Enjoy your own PHP framework!

Transcript of たのしい独自フレームワーク

たのしい独自フレームワーク

2015-11-24 PHP BLT #1

Enjoy your own PHP framework!

うさみけんた 獨自腐麗夢輪惡

2012年からピクシブ株式会社

自宅警備してたときはRuby書いてた

好きなリスプはEmacs Lispです

お前誰よ

独自フレームワークへの道

2012年頃 (私が入社する前…)

PHPとActiveResourceを繋ぐAPI

OAuth認証で利用できるAPI

Silexが遅いからフレームワーク作る

…って話があったらしい (bokkoさんの方が詳しい)

(前史)pixiv Private/PublicAPI

2015年4月1日にリリース

対象プラットフォームはi-mode/EZweb/Yahoo!ケータイ(勝手サイト)

旧ピクモバと交代のかたちでリニューアル

シンプルなサービスを設計したかった

(現代)pixiv小説モバイル

URLからわかる通り外部フレームワークに乗らないプレーンなPHP

セッション及びDBアクセスする層などは、PC版・スマートフォン版・APIなどで共通化

フルスタックフレームワークに載せると、あきらかにちぐはぐな点が生じる

pixivの事情

.php

       |    \  __  / ピコーン    _ (m) _  そうだ、独自フレームワーク作ろう

      |ミ|     /  `´  \      ('A`)      ノヽノヽ        くく

pixivはフレームワークを利用しないPHP なので、抽象度の低いコードが多め

ボイラープレートを減らしたかった

正直言って、既存フレームワークはぴんとこなかったところもある

なぜフレームワークか

はじめにPackagistでライブラリ探した

XHTMLを吐くしTwigでいいよね

Monologからpixivのロガーに流しこむ

副作用のないルーターが良いのないお…

車輪の再発明は避ける

次にシンプルなルーターを作った

https://github.com/BaguettePHP/simple-routing

異常に遅くなければ特に問題はない

とは言ってもボトルネックじゃないだけで速くはないので、ちゃんと高速化する

フレームワーク設計

フレームワークのコアは小さく

https://github.com/BaguettePHP/Baguette

上に載るアーキテクチャを規定しない

モデル?とかコントローラ?とか干渉しない

フレームワーク設計

状態はApplicationクラスに集約する

$_SERVER, $_GET, $_POST, date()など

パラメータの取り出しは罠が多いのでこの部分は素のPHPでは書きたくなかった

文字列だと期待して配列を渡せるとか

フレームワーク設計

あとは適当に層を用意してく

MVC2のControllerっぽい層

HTTP Request/Responseを抽象化する層

Twigなどをラップして抽象化するView層

フレームワーク設計

今回書いたアプリケーションでは、アーキテクチャMVC2だとは明言しない

手続き型っぽく開き直って書いて良い

責務はできるだけ分けるが潔癖にならない

拘りすぎないことで気が楽になる

フレームワーク設計

良いこと

既存のフレームワークが怖くなくなる

用途にあった抽象度のコードは見通し良い

問題がおこったら自分で即応できる

フレームワーク設計

悪いこと

『独自フレームワーク』と口にしただけで怪訝な顔でウッとされる

副作用を分離してテスタブルな構造にした割に、余裕がなくてあまり書かなかった

フレームワーク設計

薄いフレームワークを読めば、PHPがブラックボックスじゃなくなる?

そう思ったのでインターンシップの提出課題にしてみた

https://github.com/pixiv/intern2015w

教育に良いかもしれない