LaravelはポストCodeIgniterの最有力候補か?

CodeIgniterのライセンス変更が話題になったのが、昨年の10月のこと。あれからちょうど1年が過ぎて、最近はライセンス問題のことがあまり語られなくなった。まあ、CodeIgniterのライセンスを保有するElis Labo社がこれを決断した以上、不満のある人は黙って去って行くしかないのかもしれないが。

ところで、以前書いたブログ記事「ライセンス問題で発火したCodeIgniterとOSL3.0」の最後で挙げた、ポストCodeIgniterの候補、KohanaFuelPHPというふたつのPHPフレームワークのうち、FuelPHPがこのところ元気がいい。最近は日本語の書籍も販売され、各地で勉強会が頻繁に開かれるようになった。

一方、海の向こうのアメリカに目を向けると、FuelPHP以上に勢いのあるフレームワークがある。それは、Laravelという名のPHPフレームワークだ。

Laravelは、FuelPHPやKohanaのような、CodeIgniterの開発者がフォークして作り出されたフレームワークではない。Laravelの開発者であるTaylor Otwellは、マイクロソフトの.NETの開発に関わっていたという経歴の持ち主で、自身のブログのなかでは、CodeIgniterやFuelPHPを意識した発言も目立つが、Laravel自体の仕上がりは、CodeIgniterライクというより、現行のフレームワークのいいとこ取りという感じのようだ。

というわけで、何だか面白そうじゃないかという気がしたので、さっそくUbuntuローカル環境にインストールして遊んでみた。

Laravelのインストール

現時点で、Laravelの日本語公式サイトというものは存在しないようだ。従って、ユーザー会もなければ勉強会もないという状態だが、公式ドキュメントだけは日本語化されていた。

上記の公式ドキュメントによれば、Laravelは、PHP 5.3以上で動作する。それ以外に厳しいサーバー要件はないので、たぶん、一般的なレンタルサーバーなら動作すると思う。Ubuntuローカル環境(さくらのVPSなどでも同じ)などでお試しする場合は、mcryptをインストールする必要がある。mcryptは、暗号化やハッシュ生成に使用されるライブラリで、phpMyAdminをセットアップする際などにも使われる。まだインストールしていないなら、端末で次のコマンドを実行する。

$ sudo apt-get install php5-mcrypt

続いて、Laravelの公式サイトに行って、最新版をダウンロードして来る。

LaravelDownload

ダウンロードしたファイルを解凍し、publicフォルダ内の書類にアクセスできるようにセットアップする。

今回は、Ubuntuローカル環境なので、/home/hoge下にlaravel-testフォルダを作り、そこにダウンロードして解凍したファイルのすべてコピーした。

ドキュメントルートの/var/www内に行き、lnコマンドを実行して、publicフォルダにシンボリックリンクを貼る。

$ ln -s /home/hoge/laravel-test laravel-test

ブラウザからlocalhost/laravel-testでアクセスすると、strageフォルダ内のviewフォルダに書き込み権限がないという旨のエラーメッセージが出るかもしれない。その場合は、このフォルダをchmodコマンドなどで755から757又は777に修正する。

Laravelのルーティング機能

Laravel-test02

もう一度、ブラウザからlocalhost/laravel-testにアクセスして、上記のような画面が表示されたら、インストールは成功。

英語で表示されているので少々判りにくいが、最初の見出しの直下には、このデフォルトホームページは、/home/hoge/application/routes.phpによって作り出されているという意味のことが書かれている。

実は、このroutes.phpはLaravelが持つ優れた特色のひとつ、ルーティング機能を司っている。Laravelではコントローラーを作成しないで、routes.phpで処理することも可能なのだ。小さなプログラムなら、コントローラーを作らずに、ほとんどの処理をroutes.phpだけで行うことができる。

ただし、このアイデアは、Laravelのオリジナルではなくて、RubyのマイクロフレームワークSinatraから拝借したもののようだ。

さらに、Laravelのコアには、Symfonyのコンポーネントが使用されており、この点だけでいえば、Silex(こちらもSinatraから影響を受けたPHPマイクロフレームワーク)と親戚ということになる。

バンドルとartisanコマンドによる機能拡張

このようにLaravelには、マイクロフレームワークに近い発想があるようだが、より多くの機能を求める人には、バンドルと呼ばれる拡張機能が用意されている。

Ruby and RailsのgenerateやFuelPHPのOilと同じような機能を持つBobやCodeIgniterのショッピングカートライブラリをLaravelに取り込んでくれるLara Cartなど、公式サイトには現在、200近いバンドルが登録されており、その数は日に日に増えている。

これらのバンドルはartisanコマンドによってインストールされる。例えば、Lara Cartの場合だと、applicationフォルダ内で、次のようにartisanコマンドを実行すればよい。

$ php artisan bundle:install lara-cart

インストールが終わったら、bundles.phpに次の設定を追加して、自動的にロードされるようにする。

return array(

'lara-cart' => array( 'auto' => true )

);

なお、artisanコマンドは、バンドルのインストールだけなく、Application keyの生成やデータベースのマイグレーションなどでも利用される。

簡潔なコーディングスタイルと可読性

次に、前述のLara Cartをインストールした状態で、カートに商品を追加するプログラムを書く場合、CodeIgniterとLaravelとでどう違うか比べてみた。

【CodeIgniterの場合】

$item = array(
         'id' => 'sku_123ABC',
         'qty' => 1,
         'price' => 39.95,
         'name' => 'T-Shirt',
         'options' > array('Size' => 'L', 'Color' => 'Red')
        );

$this->cart->insert($item);

【Laravelの場合】

$item = array(
         'id' => 'sku_123ABC',
         'qty' => 1,
         'price' => 39.95,
         'name' => 'T-Shirt',
         'options' > array('Size' => 'L', 'Color' => 'Red')
        );

Cart::add( $item );

結局、両者の違いは最後の一行だけということになる。そして、ここがLaravelのこだわる簡潔で可読性の高いコーディングスタイルでもある。コーディングスタイルは好みの問題もあるし、たった一行では何も分からないかもしれないが、簡潔なコーディングスタイルは可読性を高めるということは間違いがないだろう。

ポストCodeIgniterの候補としてのLaravel

この他、Laravel版のアクティブレコードEloquent ORMも直感的なデータベース操作を可能にしてくれるようだし、Redisサーバーの利用やクラスのオートロードなど、Laravelには先進的な機能が詰まっている。

ドキュメントの充実ということにも、laravelは特別のこだわりを持っているようで、この点でもCodeIgniterに負けていない。

ただ、Laravelが、ポストCodeIgniterの最有力候補かと問われると、現時点ではそういうレベルには達していない(進化の速度は半端じゃないが)と答えざるを得ない。

それに、CodeIgniterとLaravelとでは、目指しているゴールが違っている。CodeIgniterが無駄なもの一切を削ぎ落として、パフォーマンスを追求してきたのは、どこまでもビジネスフィールドでの勝利を目指してのことだ。一方のLaravelは、パーソナルユーザーに、先進的で快適なプログラミング環境を提供することを当面の目標としている。

だから、自分用の小さなWebアプリを作って楽しむなら、Laravelはお薦めだが、クライアントのWebサイトを構築する場合には、少々退屈でも、多少時代遅れな点があっても、ビジネス分野で実績のあるフレームワーク(もちろんそれがCodeIgniterとは限らないが)を推薦するのは当然のことだ。

それでも、例えばLinuxやWordPressのように、スタートは個人のお楽しみツールでも、いつの間にか、ビジネスユースでの勝者になっていたというケースもある。そこがオープンソースの面白いところでもある。

ということで、まあ、難しいことはあまり考えないで、取り敢えずインストールして、Laravelを楽しんでみてはどうだろうか。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
  • Pingback: 10月20日の注目記事 | Javable.Jp()

  • Laravelの紹介、ありがとうございます。(と言っても、私はLaravelの開発メンバーでもなんでもありませんが。)現状、ほとんど日本語での記事がありません。その中で、ポイントを抑えた紹介記事はありがたいです。
    文中でご紹介いただいております、ドキュメント翻訳サイトの川瀬です。
    ご指摘のとおり、現在は開発実績がほとんどないLaravelが日本での大型案件開発にすぐに使用されることはないでしょう。最近は、Githubへ投げられた新機能やバグフィックスを取り込み、新しいバグを出すなど、安定性にかけていました。まあ、この一件の後、メイン開発者のテイラー氏だけが、修正を受付るようになり、再度安定するようになりました。たぶん、利用者の増加に伴い増える新機能の要求やバグフィックスにコア開発メンバーが舞い上がってしまったのだと思います。
    今のところ個人か小さな人数で開発する案件であれば、Laravelという選択肢もありかなと思います。学習コストの低さとコードの読み書きのしやすさは、他のフレームワークではなかなか味わえない感触です。この感触がなければ、私は乗り換えずにFuelPHPに邁進していたことでしょう。
    Laravelについては欠点もあります。デバッグのしにくさです。特にBladeテンプレートエンジンを使用した場合、エラーの原因を探すのにとても手間取りました。最近、ちょっとした改善がありまして、エラー時に生成されたPHPコードのパスを表示してくれるようになりました。これでも、随分たすかるようになりました。
    特に、最後の一文はとても共感できます。Laravelでの開発はコードを書くのが楽しいですからね。将来の発展を狙って、今からでも遊んでくれるユーザーさんが増えることを願っています。

  • ユービック

    こちらこそお世話になっています。Laravelの先駆者の川瀬さんにコメントいただけるとは光栄です。
    Laravelを触り始めて間がないので、ちょっと生意気かなとも思いましたが、現時点での正直な感想書かせてもらいました。フレームワークを検討するとき、どうしても、今すぐ仕事で使えるかどうかという観点から見てしまいがちですが、Laravelには、あまり仕事、仕事といって、小じんまりとまとまってもらうより、少しくらい冒険してでも、将来大きく成長してほしいという期待を抱いています。その意味では、CodeIgniterに抱いていた期待とは、真逆かもしれません。
    何れにしても、Laravelが将来性のあるフレームワークであることは間違いないと思いますので、これからもいろいろと勉強させてもらいたいと思っています。今後とも、よろしくご教導のほどお願い申し上げます。