lumenとは?
lumenはlaravelから分離したマイクロフレームワークです。公式の説明だと、lumenはlaravelを使ったプロジェクトに補助するサービスを開発する時に最適なフレームワークです。省略版のlaravelとも考えられるでしょう。
lumenはどんなプロジェクトに適切なのか?
厳密に言うと、lumenはほぼ全てのプロジェクトに適しています(lumenからlaravelに移行するのが簡単なので)。しかし、laravelとの使い分けを考えてみると、下記のようなプロジェクトにはぴったりだと思います:
- wordpressより高度なカスタマイズが必要なwebサイト。
- 中小型のwebアプリ。
- RESTful APIサーバー。
インストール
composer
を使えば、コマンド一発でインストールできます。
composer create-project laravel/lumen --prefer-dist <ディレクトリー>
lumenのMVC
lumenはlaravelのMVCをそのまま使用しています。しかし、Eloquent(laravelのModel)を使うには、bootstrap/app.php
に下記のコメントアウトを外す必要があります。
// $app->withEloquent();
ルーター
lumenのルート設定はapp/Http/routes.php
にあります。
$route->get('/say/{what}', functuon($what){
return 'You say: ' . $what;
});
$route->post('/user/add', 'UserController@addUser');
Route::Controller?
laravelにRoute::Controller
という便利なメソードがありますが、残念ながらlumenでは使えません。
キャッシュシステム
lumenはlaravelと同じ便利なキャッシュシステムを使っています。一番手早い方法はFacade
を使います。bootstrap/app.php
にある下記のコマンドアウトを外すtoFacade
が使えるようになります。
// $app->withFacades();
lumenのキャッシュシステムは三つのストレージを用意しています:file
, memcached
とredis
。どれを使うかは.env
の中で設定します。
.env?
.env
はlaravelの環境変数を設置するファイルです。laravelやlumenのルートに.env-example
というファイルが置いてあります。それを.env
にリネームしてください。ちなみに、.env
を読み込むにはbootstrap/app.php
の// Dotenv::load(__DIR__.'/../');
をコメントアウトから外す必要があります。
Cacheの使い方
Cache
の基本メソード:
メソード名 | 説明 |
---|---|
Cache::put |
キャッシュをセットする(set ではなくput です) |
Cache::get |
キャッシュを取得する |
Cache::forget |
キャッシュを削除する |
Cache::remember
メーソドがよく使います:
use Cache;
public function users()
{
// Cache::remember(<キー名>, <キャッシュ時間>, キャッシュの値)
// 1時間ごとにキャッシュを更新する
$users = Cache::remember('users', 3600, function(){
return User::where('active', 1)->get();
});
return view('user', ['users' => $users]);
}
public function counter()
{
$count = Cache::increment('counter');
return 'Visitor count: ' . $count;
}
まとめ
最近ウェブサイト作成のプロジェクトがあって、完全カスタマイズするので、wordpressは適切ではないと考えています。laravelを使おうと思うところ、lumenの存在を知りました。
laravel5はServiceProvider
を大量に使っていて便利な機能が揃っていますが、簡単なプロジェクトには若干うるさいので、lumenを使ってみることにしました。lumenはlaravelと同じコアなので、laravelに慣れた人には特に支障がないし、必要な機能であればcomposer
足せばいいし、結構使い勝手がいいです。
**唯一不満なのは、デフォルトのテンプレートエンジンがないです!**そうです、プレンのPHP
を書くか、composer
でtwig
などのテンプレートエンジンを実装するかのいずれかです。よく考えると、lumenは補助サービスを作る用のフレームワークで、APIサーバーという前提だとテンプレートエンジンは不要ですね。(JSON返せばいいから、viewなんかいらないです。)