CodeIgniterで検索するとすごい勢いで上位にこの記事が出てネガキャンのようになっていましたので、タイトルを修正しました。こちらもご覧ください:Re: CodeIgniterが急激によくなってきた
新しいアプリをCodeIgniter(略してCI)で作ろうとしている。
構成が分かりやすく拡張もしやすかったのですばらしい第一印象を受けて、これならスラスラ作れそうだと思っていたが、しばらく作業をしてみると徐々に気に入らない部分が見えてきた。
ParserがSmartyじゃない
テンプレートの中で変数を使うためにいちいち< ?php ~ ?>を書いていると可読性が著しく下がるため、パフォーマンスが犠牲になるとはいえ僕としてはSmartyのようなテンプレートエンジンを使いたい。(これに関しては初めから分かっていたし独自ライブラリを作ったので今は問題ない。)
セッションをクッキーに直書きする
見たときは目を疑った。PHPのセッションデータはふつうセッションID(鍵)だけをクッキーに保存し、データ自体はサーバー側に保存するのだが、CIではシリアライズしたデータそのものをクッキーに保存していた。データベースを使うオプションもあるがそれでもデータはクッキー。従って保存できるデータ量が限られる。(これも独自ライブラリで修正したが、かなり大掛かりな作業になった。)
セッションを読み書きするメソッド名が長い
get()とset()にすればいいものを、userdata()とset_userdata()などという面倒臭いメソッド名がついているから、わざわざ自分でエイリアスを書いた。
バリデーションがダサい
ここは特に問題が多い。
まずライブラリのメソッドの中身に「$_POST」がハードコーディングされているため、任意の変数をバリデートできない。なぜこんな仕様になっているのか理解に苦しむ。柔軟性を考えると(というか何も考えなくても)普通に引数で取るしかないと思うのだが。
そして、任意のエラーをあとから手動で追加するメソッドが用意されていないから、わざわざ自分でメソッドを書くはめになる。
そして、エラーメッセージを変数で取得するとデフォルトで<p>~</p>に囲まれて来るという驚きのダサさを発揮してくれる。
そして、ルールを設定するためのコードが可読性の低いものになる。
正直、これは使い物にならない。こうしてみるとEthnaのバリデーションはよくできていたと思う。
i18nクラスを呼び出すときの名前がバラバラ
状況によってLangだったりLanguageだったりする。非常に分かりにくい。
何かを取得するメソッド名がバラバラ
クラスによって。たとえば$config->item(‘key’)、$lang->line(‘key’)、$session->userdata(‘key’)。同じネイティブライブラリなんだから全部get()とかにしてくれ。
同じライブラリを二度呼び出すと死ぬ
たとえばバリデーションライブラリを呼び出すときは
$this->load->library('validation');
となる。これ自体は大変分かりやすくていいのだが、何らかの都合でこれと同じ行が二度目に出てくると、単純にクラスの再宣言ということでエラーが出て倒れる。ものすごく簡単に防げるはずだが、それがないために場合によってはものすごく不便だ。
今のところはこんなものだがまだ増える予感がする。
さてどうしよう、ここまで手を加えたからには粘って使うべきか、それとも見切りをつけて別のフレームワークへ行くべきか…。
Pingback: なんたらノート 第二期
Pingback: tic-toc.info
Pingback: Re: CodeIgniterが急激によくなってきた | Oddwit