gallu’s blog

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

「全部プログラムでやる」のか「得意分野はお任せする」のか

元ネタは…今ちょいとかかわっているWordPress案件。
セッションを使う必要があるのと、セッションをDBに格納する必要があるので「なんかせにゃならん」ってんでSessionHandlerInterfaceインタフェースをimplementsしたクラスを作成していたのですが。
そこで、おいちゃんが書いたコードと、その後先方さんのほうで書き直し(書き足し)したコードを見て、色々と思うところ ありおりはべり いまそかり。


ほぼほぼコンストラクタ等価なメソッド( public function open() )で。
おいちゃんは「事実上空っぽな実装」をしたのですが、先方さんのほうで、色々なギミックを含む「セッション格納テーブルがなければcreate tableを発行する」的な処理が書かれていたのですね。


そこの是非は別に問うつもりもないのですが。
以前から思っていたあたりに改めて思いをはせるよいタイミングになったので、ちょうどいいかなぁと思い、メモり。


「プログラムの中で、テーブルがなければcreate table」というのは、発想としてはまぁ、あって。
書き足されたコードを見ていると、WordPressプラグインのdbDelta()関数なるものを使っていたので、どうも「簡単なマイグレーション相当の機能」もあるみたいなので、とか。
このあたりで「おいちゃん的に」等価なのが…
・プログラムの先頭で「このIPアドレスのアクセスは一律してはじく」的な防御
・ob_startの引数でob_gzhandler
・ini_set各種
・DB接続時のcharset指定
など。


かみ砕いて。


「DB接続時のcharset指定」について。
状況にもよるので一概に言い切れるわけではないのですが。もちろん「接続時の指定」でもよいと思うのだけど、どちらかというと、MySQLであれば「my.cnfのcharacter-set-server=で指定したほうがより良いのではないかなぁ?」という感覚。
これについてはちょっと弱めだけど。


「ini_set各種」について。
もちろん「ある程度までのディレクティブにしか通用しない」という大前提もあるのですが。
PHP_INI_ALLなものであっても、基本的には「php.iniに全部ちゃんと書いておこうよ」とか思うわけです。
実際問題として「同一サーバ内、動くプログラムによってiniが変わる」可能性は、そっちのほうが低いと思うですし。
で「標準は全部ちゃんと記載されているんだけど、部分的に上書きをしたい」特別なケースだけini_set、ってほうがよりよいのではないかなぁ、と。


「ob_startの引数でob_gzhandler」について。
簡単にこの機能を書くと「出力を gzエンコードで圧縮して出力してくれる(から効率が良くなる可能性が見込まれる」って感じ。
「gzエンコードで圧縮して出力」自体は大変に好ましい可能性が高いんだけど*1、この辺の設定はhttpdでも可能なので。
どちらかというと「PHPのコードではなくてhttpdのレイヤーでやってもらうほうがより良いのではないかなぁ?」と。


「プログラムの先頭で「このIPアドレスのアクセスは一律してはじく」的な防御」について。
最近にありがちな「index.phpで一手にアクセスを受け取って」なんてケースで、gateway的なところでこーゆー処理をしているのを幾度か見たことがあるんだけど。
「アクセス元のIPアドレスをみてアクセスをはねる」のはFWとかで出来るので、そっちにお願いしたほうが速度的にも効率的にもよいんじゃないかなぁ?と。


で「テーブルがなければ自動で作成」について。
「テーブルの有無」や「テーブルレイアウトの変更」は、デプロイとかのフェーズで、プログラムとは別レイヤーでやるものだと思っているので。
プログラムは「その辺が整っている前提」で、テーブル作成とかは「デプロイ方法」とかその辺でカバーしたほうがいいんじゃないかなぁ?と。


この辺は本当に「世界観の違いなんだろうなぁ」と思うのですが。
ものすごく大まかには
・可能な限り、すべてを「自分の世界観に取り込もう」とする
・可能な限り、すべてを「餅は餅屋で、それをもっとも得意とするところに割り振ろう」とする
の2極があって、ここのグラデーションなんだろうなぁ、とか思うのです。
で、そのグラデーションの「どのあたりに、自分自身をすえるか」なんだろうなぁ、と。


おいちゃんのコードに追加をされた方(なのか会社、なのか)は、どちらかというと「全てを自分の世界観に取り込もうとする」、言い換えると「全部を己のプログラムコードでどうにかする」方向に、どちらかというとレバーを倒しているように思うんですね。


で、おいちゃんは上述の通り「餅は餅屋にブン投げたい」主義w
ただまぁ「餅は餅屋に」の最大の欠点は「そこに専門家がいること」「"どの専門家"に依頼をするのかが適切なのか? が判断つく程度にゼネラリストなスキルと知識があること」が前提で、場合によっては「そこに専門家がいなかったら、自分が(擬似ではあっても)専門家としてふるまえること」までが含まれるので…まぁハードルが高いっちゃぁ高いのか。


この辺は「住んでいる泳いでいる水」によっても大分と感想が違うと思うのだけど。
その違いが「面白いなぁ」と思ったので、久々に、メモり。

*1:without CPUをマリモリと食いまくるサービス