Oddwit


CodeIgniterが急激にいやになってきた

Posted in CodeIgniter, PHP by マルコ on the April 20th, 2007

新しいアプリを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');

となる。これ自体は大変分かりやすくていいのだが、何らかの都合でこれと同じ行が二度目に出てくると、単純にクラスの再宣言ということでエラーが出て倒れる。ものすごく簡単に防げるはずだが、それがないために場合によってはものすごく不便だ。

今のところはこんなものだがまだ増える予感がする。

さてどうしよう、ここまで手を加えたからには粘って使うべきか、それとも見切りをつけて別のフレームワークへ行くべきか…。

8 Responses to 'CodeIgniterが急激にいやになってきた'

Subscribe to comments with RSS or TrackBack to 'CodeIgniterが急激にいやになってきた'.

  1. hi_time said,

    on April 25th, 2007 at 16:16

    いや、そうですかー。僕もciでつくりなおしてるところなんですがsmartyとかつかえないのでもきついですよね。でもほかのフレームワークだど将来性、実績、導入しやすさ、ネーミングルールがゆるいなど、ほかにいいのがないようにおもえます。どうしよう。
    なにかほかによいフレームワークがあったらおしえてくださいね。僕も少し考えます。

  2. マルコ said,

    on April 28th, 2007 at 08:48

    う~ん、どうもしっくり来るのってないですよね。それに実際に使ってみないと分からない部分が多いのも難点ですね。僕はもう少しCIで粘ることにしました。

  3. たか said,

    on March 5th, 2008 at 10:19

    smartyを使うと軽量高速じゃなくなるからCI使うメリットが無くなるよ

  4. マルコ said,

    on April 3rd, 2008 at 21:45

    僕としてはいかに作りやすいかがPHPフレームワークを選ぶときの重点になります。軽量高速を目指すならばそもそもPHPを選ぶ利点がないのではないでしょうか?

  5. sanjapo said,

    on May 19th, 2008 at 21:01

    私もいろいろフレームワークをあさったのですが、CIが一番使いやすかったです。

    むしろ、CIより簡単で使いやすいものがあれば教えてください、お願いします。

    ところで、問題点を回避するライブラリって公開していただけるものでしょうか。勉強させてください。

  6. マルコ said,

    on May 23rd, 2008 at 23:49

    CIの意図通りに設計するならば使いやすいと思うんですが、ちょっと道を外れると苦労するような印象です。

    ライブラリは公開できるかどうかのチェックなどをするのが現在は難しい状況です。今後余裕があれば公開しますが、今はちょっと。申し訳ないです。


  7. on September 24th, 2008 at 02:18

    [PHP]CodeIgniterが急激によくなってきた…

    CodeIgniterを評価しました。 申し訳ないけど、このブログエントリの著者が学生さんだと知りつつ、きつく批判します。 CodeIgniterが急激にいやになってきた | Oddwit 某巨大掲示板でも、この…

  8. Qup said,

    on October 14th, 2008 at 06:04

    批判先から気ましたが個人的にはマルコ氏に同意かな。
    批判先の人は極論すぎて意味の無い批判になっていますね。

    $_POSTのハードコーディングはありえないと思いましたよ…。
    将来的に変数名変わったらどないするねんとw
    拡張性や保守性もフレームワークの課題だと思うし、コーディングの流行廃りもあるので、思った事はがんがん発信して下さいね。

Leave a Reply