カテゴリー ‘ PHP

有力なPHPフレームワークのGoogle Insights結果 (FuelPHP,Laravel,CodeIgniter,Symfony,CakePHP)


たくさんあるPHPフレームワークの注目度ってどうなんだろうと思って「Google Insights for Search」を使用して調べてみました。

対象としたフレームワークは、

です。

フィルタ:ウェブ検索、全ての国、2012年

意外だったのが「CodeIgniter」の検索数がトップだったことです。

5年位前に「CodeIgniter 1.6」を使い出した頃には、日本では猫も杓子も「CakePHP」だったように思います。

ということで、

フィルタ:ウェブ検索、全ての国、2004年〜2012年9月

やっぱりSymphonyCakePHPが5年前には大人気CodeIgniterも人気が出てきた所ですね。

FuelPHPLavarelは最近人気が出てきているフレームワークですが3大フレームワークが邪魔をしてよく分かりません。

今年の検索量に戻して、それぞれ何処の地域で検索されているのか見てみると

FuelPHP

アメリカと日本です。

日本の検索ボリュームが実は一番あるようです。これは、意外です。

Laravel

もうアメリカでしか検索されていない…。

実は、私は最近FuelPHPよりLaravelの方を利用しています。

で、最初のグラフ良く見てください。

実はこの1ヶ月くらいはFuelPHPの検索量をLaravelが抜いています。

CodeIgniter

東南アジアで人気なんですね。なんでだろ???

Symfony

東ヨーロッパで人気なのかな。

CakePHP

おっインドすげぇ、やっぱり日本でも安定の検索量w

ちょっと思考を変えて「FuelPHP」と「Laravel」を比較してみます。

FuelPHPとLaravelの比較

先ほども言ったのですが、注目度でLaravelFuelPHPを抜いています。

Laravel大注目です!!

検索量がアメリカ日本でしか無いので、2つの国それぞれどんな検索量なのか見てみます。

アメリカ

日本

おお、残念w日本ではLaravelというフレームワークは全く人気なし。

FuelPHPが凄い人気だ。

でも、アメリカではFuelPHPに変わって、人気が出てきているLaravel

日本でも何かで火がつくと一気に追い抜く人気のポテンシャルは持っていると思います。

Laravel 大注目です。

最後に日本で他のフレームワークも含めた検索量を見てみます。

日本のフレームワーク検索量

日本では、CakePHPが大人気です。

ついでSymfonyCodeIgniterFuelPHP

Laravelは全く人気なし。

これを見るとFuelPHPは短期間でどれだけ注目されているのかがよく分かる結果になっており凄いです!

でもやっぱり、Laravelが大注目ですよ!!

検索量からの結果なので一概には言えないですが、これが「Goolge Insights for Search」から見たフレームワークの人気度です。

気になる事柄があったら検索してみても面白いと思います。

LaravelのEloquent ORMの仕組みが面白い


ちょっと、FuelPHPでなく「Laravel」というPHPフレームワークを触っていて

「Eloquent ORM」というORMの仕組みが付いているのだがこれが何をやってんだろって興味がわいてソースを見てみたというよりどうやって使えばいいんだろ?って思ったのが本当なのですが。

ドキュメントを見ると使い方は

のように書かれている。

うーん、自分でModelにメソッドを追加する場合、

  • staticでメソッドを作る?
  • none staticでメソッドを作る?

どっちがいいんだろうかというのが、まずそもそもの疑問の発端です。

で、ドキュメントでよく使われている「whereメソッド」や「findメソッド」って何処にどのように記述されているのか?

これが、このORMの全ての仕組みの源になっている。

全てインスタンスメソッドはこれ経由で呼び出し可能!!!!

自分の中での結論は、

  • どっちでもいいんじゃね?

そして、その中で「queryオブジェクト」は「__callStatic」「__call」経由で取得する使い方が上手い使い方かと。

 

LaravelのRouting


最近、FuelPHPからLaravelの方がシンプルで良くない?って事で使っています。

で両方のRoutingの自分の気になった箇所を動作確認したので覚書

特にRoutingの中での「?」の使い方についてです。

Laravel

まず、「routes.php」の内容を以下のように設定してみた

これでまず、

「http://test2.com/a」でアクセスすると「2」にルーティングされそうだが→「404 Not Found」

「http://test2.com/a/1」でアクセスすると「2」にルーティングされそうだが→「404 Not Found」

「http://test2.com/bb/a」でアクセスすると→「a 9999」

「http://test2.com/bb/a/1」でアクセスすると→「a 1」

となる。

ここで「routes.php」の内容を

と変更すると

「http://test2.com/a」でアクセスすると→「a 9999」

となる

「?」を使用する場合は注意が必要のようです。

FuelPHPのキャッシュライブラリ – config以外でストレージを設定する方法


configの設定以外でのキャッシュの使用方法

今までは、configの設定に従ってキャッシュを使用してきていましたが、

今回はconfigの設定とは異なる設定で、キャッシュを使用する方法です。

以下が、configの設定とは異なる内容での使用方法の例です。

コントローラー

  public function action_forge()
  {
    // ここで使用するストレージ名と設定内容を記述する、
    // ここで設定しなかった、項目についてはcacheのconfigファイルの内容で設定される。
    // 「$config = 'file';」のように、ストレージ名のみを文字列で渡して使用する事も可能
    $config = array(
        'driver' => 'file',
        'expiration' => null,
        'file' => array(
          'path' => APPPATH.'cache_forge'.DS,
        ),
    );
    // String
    $cache = Cache::forge('string', $config);
    $cache->set('cache test');
    $data['string'] = $cache->get();

    // Array
    $a = array(1, 2, array('key' => 'value'));
    $cache = Cache::forge('array', $config);
    $cache->set($a);
    $data['array'] = $cache->get();

    // Object
    $o = new Library_Test();
    $cache = Cache::forge('object', $config);
    $cache->set($o);
    $data['object'] = $cache->get();

    return Response::forge(View::forge('cache/forge', $data));
  }

(configの設定は、fileストレージの動作を確認した時と同様にしてあります)

14,20,26行目のように、Cacheクラスのforgeメソッドを使用してCacheクラスのインスタンスを生成すると、

第2引数で渡したconfigの設定内容でキャッシュストレージに接続に行きます。

動作後のデータを確認すると、ちゃんとキャシュの情報は「cache」ではなく「cache_forge」フォルダに生成されています。

第1引数はキャッシュのキーです。

なんとなく違和感を感じる設定だな…。

キャッシュクラスのインスタンスを生成する時に使用するキー値を設定しているので、すごく違和感があります。なぜ「get」「set」などのメソッドの引数に、キャッシュのキーを取るようになぜ設計されていないのかすごく不思議です。

ちなみにコメントにも記述していますが、第2引数のconfigは配列でなく、ストレージ名を文字列で渡しても大丈夫です。

その場合、設定されていないconfigの情報はcacheのconfigから取得するようになります。

次回は、Redisのストレージを使用している時に気がついた、cacheのsectionについてまとめてみたいと思います。

FuelPHPのキャッシュライブラリ – redis編


今回は、redisストレージ

Redis

まず、cacheのコンフィグファイルをapp配下にコピーします。

cp fuel/core/config/cache.php fuel/app/config/

以下のように「fuel/app/config/cache.php」の内容を設定します。

return array(
  'driver' => 'redis',
  'expiration' => null,
  'cache_id' => 'fuel',
  'redis'  => array(
    'database' => 'default'
  ),
);

4行目の「cache_id」は初期のconfigに入っていませんが、redisストレージのソースの中で、key値を保存しているキーの名前に使用されています。(設定していない場合は「fuel」と言う値が使用されます)

これで「redis」ストレージをキャッシュに使用する設定ができました。

とりあえず、キャッシュを生成して試してみます。

コードの内容は、

コントローラー

public function action_redis()
{
    // String
    Cache::set('string', 'cache test');
    $data['string'] = Cache::get('string');

    // Array
    $a = array(1, 2, array('key' => 'value'));
    Cache::set('array', $a);
    $data['array'] = Cache::get('array');

    // Object
    $o = new Library_Test();
    Cache::set('object', $o);
    $data['object'] = Cache::get('object');

    return Response::forge(View::forge('cache/redis', $data));
}

View

<html>
<body>
<p>Cache - Redis</p>
<div>String:<?php var_export($string) ?></div>
<div>Array :<?php var_export($array) ?></div>
<div>Class :<?php var_export($object) ?></div>
</p>
</body>
</html>

こんな感じです。

この時に使用したLibrary_Testオブジェクトのソースは、

<?php
class Library_Test {
  public static function _init()
  {
  }

  public function __toString()
  {
    return 'Library_Test';
  }

}

こんな感じです。

(Library_Testの設置場所は「fuel/app/classes/library/test.php」です)

でアクセスしてみると、

恒例のエラーがでました。redisをインストールしてませんでした。

ということでインストール(epelリポジトリなので、もしかすると環境によってはyumのリポジトリが見つからない可能性があります。その場合は、こちらを参考にリポジトリを追加するか、自力でphpのmemcached extensionをインストールしてください)

sudo yum install redis
sudo /etc/init.d/redis start

で、再度アクセス

こんな感じになります。

登録されているキャッシュのデータを確認すると

こんな感じでした。

キーの管理が少し他のストレージと違いましたがデータの保存は同じ形で登録されていました。

次回は、configの設定以外でのcacheの使用方法をやってみたいと思います。

return top