PHPフレームワーク雑感

# I was using the following framework for business.


*英語が読めない（そもそも英語だと読まない）人が多かったので補足しておくと、`I was using the following framework for business.` とは、私が業務で使用したフレームワークの話という意味です。*

# TOP7（七武海）
1. symfony
    * ORMは凄いと思った。([開発は別プロジェクトだけど](http://propelorm.org/))
    * 完全なORMとは、Form <-> Object <-> Database だと思った。[^sy1]
    * 仕様が複雑で整理されてないと思った。
    * このプロジェクトはつまり、別のベンダーが開発した良さそうなのをパチってきてるだけだった。
    * パチるのはいいけど、パチっただけで設定はパチり元のままなので、仕様はグチャグチャだった。
    * 仕様が複雑なので理解しないまま使ってグチャグチャにしちゃう現場を２度見た。[^sy2]
    * symfonyという名称は烏滸がましいと思った。よく言えばJAZZ。実際はチンドン屋だった。
    
2. CakePHP
    * モデルの複数形がウザいと思った。[^ca1]
    * 複数形にするための実装がスゲー間抜けだと思った。
    * 擬似ORMっぽいものがついてる。（以下モデル）
    * モデルは、複数レコードの一括INSERTをやろうとしたらハマる→saveAll（）はIDを個別に取れない[^ca2]
    * モデルで、複数レコードの一括UPDATEをやろうとしたらハマる→updateAll()は何かでハマった
    * モデルは、フィールド名をタイプミスしてもエラーを表示してくれない
    * カスタム（自作）バリデーターの組み込みが簡単
    * バリデーターは、Formから入力された値のバリデーターなので、JSONで送信されてきた値には使えない。
    * ルーティングの設定がHTTPプロトコルのDELETEとかにも対応してて意味がないと思った
    * CakePHPでArray hellという単語を知った。（他のFWでは聞かない）
    * ~~それ以外は普通だった。（そもそもそんな使わなかった）~~
    
3. CodeIgniter
    * 簡単・速いって言うけど、機能が全然ないじゃん！って思った。
    * テンプレート機能はあるが、レイアウト機能が無い。
    * フォームヘルパーもデータベースヘルパーも無い。
    * 初心者が最初に勉強するフレームワークとしては良い。<br/>（なぜなら、機能が少ないため学ぶことも少ない。従って迷いにくい。）
    * ActiveRecordが使えるっていうけど、それ、他のフレームワークでも使えるじゃね？って思った。
    * 基本的な機能は高校生が夏休みで作れるレベル。
    * プロなら１日で作れると思う。[^ci1]
    
4. ZendFramework
    * FWとしての仕組みがカオスなので、これで作られたシステムもカオスにならざるを得ない。
    * サラリーマンが給料を貰うために業務として作ったって感じ。没個性。
    * フォームヘルパーが使う価値がないと思った。
    * データベースヘルパーが使う価値がないと思った。
    * どうでもいいヘルパーがてんこ盛りだった。
    * だったらフォームとデータベースを強化しろと思った。
    * 何も考えずに使ったら、セキュリティ的にザルになると思った。<br/>
    フレームワークが担保しないの？セキュリティは人間任せ？だったら使う意味なくね？
    * 確か、フォームヘルパーは単にフォームのinputを出力するだけで、値の保存は自前で実装しないといけない。←だったら手書きでいいじゃん！
    * しかも、フォームの実装の仕方が面倒くさくて使ってられない。←手書きの方が分かりやすくて早いし速い
    * そして最後に `echo '</form>'` とか書かなくちゃいけなくて、「江戸か！」って叫びたい気持ちでいっぱいだった。苦痛だった。
    * validatorは別のクラスに分離されてて、それはいいんだけど、\$_GETとか\$_POSTとかで取得した値をvalidatorを通して、正しかったら保存するんだけど、htmlentitiesはプログラマーが明示的に処理しないとXSSが発生するっていう手抜きな仕様で、フォームの再入力が発生したらinputのvalueには自動的に代入しないから、代入される仕組みも書かなくちゃいけなくて、htmlentitiesしてたら二重にエスケープされて、そこも調整しなきゃいけなくて、「これFWで作る意味があるの？フルスクラッチと変わんなくない？」っていう原始時代に突き落とされたような気分でいっぱいだった。ZFスゲーって言っている奴はあまりにも不勉強だと思った。
    
5. Yii Framework
    * Yiiって、何て発音するのか分からなくて、軽くイラっとした。[^yi1]
    * チャイニーズが作ってるので、気にならない人はどうぞ。
    * Modelの継承の流れが、作った人以外わからなくなるシステムになりやすい。
    * たいした機能がないのに、FW自体のファイル数が多過ぎると思った。
    * とにかく無駄に複雑。（システムが複雑になるのは、設計者の思慮が足りないから）
    * Dispatchの処理がやたら長い。（FW作者の中で考えがまとまっていないんだと思う）
    * 擬似ORMが付いてる。
    * エラーのキャッチの仕方が個人的に好きじゃない。
    * エラーのキャッチの仕方がプロダクション環境だと問題になった。
    * i18nに対応する気概は素晴らしいけど、仕様が残念だった。
    * FW作者の記法が、とにかくダメだった。この記法を真似してる奴がいて、「江戸か！」って叫びたくなった。
    * Memcacheをキャッシュとして使うヘルパーが付属するが、ドメイン毎にネームスペースで区切らないので、同じmemcachedを参照する他のサイトのキーとコンフリクトしてた。この中途半端さはZendFWに比肩できると思った。
    * 付属のMemcacheヘルパーを使って作ったシステムがあったんだけど、諸事情でmemcachedを止めたらシステムも止まった。
    * 上記の理由でmemcache関連のバグ調査をしたかったんだけどできなくて、諦めて運を天に任せて今日も動いてます。あゝ無常。
    * まぁとにかく、片手落ちな実装がてんこ盛りだったので、商用環境で使うのは止めた方がいいっすよ。地獄をみます。（地獄を見たい人にはおすすめ。一度くらい見とけ！）
    
6. Phalcon
    * 無難。可もなく、不可もなく。
    * 設定は割りと分かりやすい。
    * バイナリにビルドされたFWだから速いっていうけど、実測はそれほど差がでない。
    * そもそもストレージをSSDにしたり、データベースの問い合わせ結果をキャッシュしたら埋まるような差でしかない。
    * 機能に取り立てて優れた点はない。
    * DIの実装方法が良くなく、コード補完が効かない。コード補完を知らない人には関係ないっぽい[^ph1]
    * ORMっぽいのが付いてる。
    * ORMに指定できるのはColumns, Conditions(WHERE句), Bind, Order, Limitだけ。OrderはASCのみで、Offsetは指定できない。
    * ORMに謎の仕様がある。
    * 邦訳が途中で力尽きてる。ご愁傷さまです。
    * Phalconの欠点は、バイナリにビルドしていること。一々ビルドしなきゃいけないから開発が遅い。スクリプトで作って、機能的に発展も展開もfixしてる部分だけをバイナリにすればいいと思った。
    
7. Ethna
    * 完全に時代遅れ。[^et1][^et2]

[^sy1]: Object <-> Database は、Half-ORM と呼ぶべきだし、Array <- Databaseは、そもそもORMではない。
[^sy2]: Disったね？！いま、OpenPNE2をdisったね！！
[^ca1]: 名前を複数形にしなければいけないのはハマりポイント。この実装を礼賛してる奴がいて正気か？と思った
[^ca2]： Modelのインスタンスをinsert毎に生成するという裏ワザを使う。
[^ci1]: CI8っていう大会を開いて、8時間でCodeIgniterを作ったら楽しいと思う。
[^yi1]: ショッカーの雑魚の掛け声です。
[^ph1]: コード補完を使わないのか、知らないのか。便利を知らなければ不便と思わない。ちなみにコード補完が最強なのは、Microsoft謹製Visual Studioです。PHPの開発もできるらしい。Macでも動くらしい。[^ot1]
[^et1]: 今見返したら、そもそもSmartURLに対応してなかった。（そんなことすっかり忘れてた）[SmartURL対応版はこちら](https://github.com/TomoakiNagahara/ethna/commit/6b06ae1854ea48b0e2068cd13589ec8b9e5df01a)驚くことに、まだこれを現役で使っている上場会社があるんだよ。驚くよね。
[^et2]: ドキュメントが途中で力尽きてる。ご愁傷さまです。（-人-）
[^ot1]: Microsoftの製品がダメだって言われるけど、これはMSに限った話ではない。WindowsのUIやOffice製品を作っている開発者は、サラリーマンとして給料をもらうために、仕事として、特に愛着のない製品のプログラムをしているから。Visual Studioは自分達が使うプロダクトだから情熱が注がれるのだろう。これはMSに限った話ではない。

# Rookie

1. Laravel
2. FuelPHP
1. CharcoalPHP
    * 概要しか見てないけど面白そう。

# 脱落

1. ちいたん
    * http://php.cheetan.net/ よく分かんないけどドメインが第三者に乗っ取られててウケた。（会社でクリックするのは止めておけ！）

<hr/>