Page 1
「ふつうのPHP」がpixivになるまで前史
pixiv.inc @tadsan
2020.02.17 PIXIV TECH FES.
公開日:
by USAMI Kenta @tadsan
に東京都の新宿BLAZEで開催された『PIXIV TECH FES.』でショートセッション改め“BLAZE LT BATTLE”(5分)として発表しました。
「ふつうのPHP」がpixivになるまで前史
pixiv.inc @tadsan
2020.02.17 PIXIV TECH FES.
お前誰よ
何をしてきたのか
2012年入社
PHPは入社してから (それ以前はRuby)
今回のお題
「ふつうのPHP」が pixivになるまで前史
前史?
PHPカンファレンス関西2018
このときは2012年
以後に改善したことを
主に話しました
今回は私の入社時
(2012年以前)に既に
あったものについて
紹介していきます
前提を揃えましょう
ふつうのPHP?
URLに.phpが
入っている
http://www.pixiv.net
/member.php?id=105589
http://www.pixiv.net
/member.php?id=105589
https://www.pixiv.net
/users/105589
URLとスクリプト ファイルが1:1で
対応する時代だった
(当時の世間では) Webアプリ (cid:15496) CGI
(cid:15496) Perl or PHP
pixivリリースの
2007年は
まだそういう時代
参考までにRails2.0 が出て日本で注目さ れだしたのが2008年
Ruby関係者に怒られないよ う言及するとRails以前にも tDiaryのようなRuby CGIな Webアプリもあったし現在 もRackでばっちり動きます
重要なこと:
ファイル=URLのCGI的な 構造でFWに依存してない
(これは2015年まで続く)
というわけで
話を本筋に戻して
温故知新
ふつうのPHP?
LAMPスタック
Linux, Apache, MySQL, P言語
UTF-8
(リリース当時はUTF-8 じゃなかったらしいけど 2007年中には移行完了)
Git
(2012年は普及時期だけど
会社としてSVNから完全
移行したのは割と早め)
あとは制限時間で 打ち切られるまで
個別要素を語っていくぞ
pixiv開発メンバーでも何 が一般的で何がpixiv独自 要素なのか把握できてる
ひとは多くないと思う
PDO
(PHP Database Object)
入社時には僅かなmysql関数も残ってたけど、ほぼPDO化が済んでた
(時代的にはPEAR::DBやMDB2でもおかしくない)
SQLのクエリ末尾にスタッ クトレースを付加すること でスロークエリの発生箇所
を容易に特定できる
それもPDOを生で使わず
にラッパークラスを設けて 使ってたのが本当にすごい
基本は_call()をつかった
Proxyクラス
+べんりメソッドの追加
系統とmaster/slaveごと にPDOのシングルトンを
管理するクラス
slaveに対して書き込み
クエリが発行されることを
事前に防ぐ構造を提供
Smarty
(HTMLテンプレートエンジン)
SmartyはPHPの定番テ
ンプレートエンジンだが、 それ自体はXSS耐性がなく
全ての値を明示的にエス ケープしないといけない
pixivではSmarty_
Compilerを拡張して
attributeで明示的にエス ケープしない出力を拒否
SmartyはPHPスクリプトとして 変換されるものが実行され(コン パイルキャッシュ)、チェッカー が走るのはコンパイル時のみで
実行時コストは掛からない
フレームワーク
pixiv本体はフレームワー
クに依存していない
が、部分的に薄いフレーム
ワークのような機能を持つ層
は複数あった
独自フレームワーク
そのものも複数あった
(いわゆる)RESTful APIの pixiv内における初期事例
(PHPカンファレンス2013)
身近に24ファイル程度の 読めるフレームワークが あったのはPHPの理解に
非常に大きく役立った
タグジャンプできない
(=静的解析しにくい)制約は 反面教師として現在の改善に
活かされている
総括
今回は2012年以前の 前期pixivから現在も
現役の実装を紹介した
前期pixivの内部実装について情報が外に出る機会は少なかった
CGI時代の空気を色濃く残していたコードは2015年頃にフレームワーク的な構造に移植されている
良いアーキテクチャとは言いがたいが、実装面としてユニークなものは多くある
良い遺産だからと全肯定して残したいわけではない
歴史から学んでもっと良いもので 置き換えていこう
温故知新
ご静聴ありがとうございました
関連リンクがありません。