# Lumen と Laravel 違い比較
Lumenの日本語読みはルーメン、Laravel のチームが開発した軽量マイクロフレームワークで github に人気ありそうなので、調べてみました。
生みの親が Laravel で、使い方も laravel と変わることが少ないけど、特徴は API 通信に特化した軽量で速いサーバーサイド PHP フレームワークって感じ。
# Lumen と Laravel の違い
| 項目 | Lumen6 | Laravel6 |
|---|---|---|
| 日本語公式ドキュメント | なし(2020 年 1 月時点) | あり |
| config ディレクトリ | なし(.env ファイル使う) | あり |
| Facade/Eloquent | 初期使えない(コメントアウト外せば使える) | 使える |
| テンプレートエンジン Blade | 使える | 使える |
| illuminate/session | デフォルト無効 | 使える |
| artisan コマンド | 少ない | 多い |
# Lumen は軽くて速い
システム要求
lumen 6.x
- PHP >= 7.2
- OpenSSL PHP 拡張
- PDO PHP 拡張
- Mbstring PHP 拡張
laravel 6.x
- PHP >= 7.2.0
- BCMath PHP 拡張
- Ctype PHP 拡張
- JSON PHP 拡張
- Mbstring PHP 拡張
- OpenSSL PHP 拡張
- PDO PHP 拡張
- Tokenizer PHP 拡張
- XML PHP 拡張
laravel の方がでかいから、必要な拡張も多い感じで、ベースの PHP バージョンなどは一緒
スピードは Laravel の 4 倍以上という記事もありますが、同じエンジンで軽い方は速いって感じかなあ
スピード以外にも、CPU やメモりの消費なども Lumen は圧勝したそうです。やはり、ダイエットした効果は大きい。
# 初期ではコメントアウトされた機能がある
Facade/Eloquent はコメントアウトされているため、使う前に解除が必要
Facade の場合、/bootstrap/app.php 内の$app->withFacades()
Eloquent の場合、/bootstrap/app.php 内の$app->withEloquent()
# セッション使えない
Lumen5.2 から session 無効になりました。api サーバーならなくてもいいけど、ページ表示など session どうしても使いたいときは以下の記事を参考に
Lumen 6.2 でセッションを使う (opens new window)
Enabling session in lumen framework (opens new window)
# Lumen routes
使い方ほとんど一緒ですが、微妙に違うところもあります。
例えばルート設定で lumen と laravel
lumen の場合
$router->get('/', function () use ($router) {
return $router->app->version();
});
$router->group(['prefix' => 'api'], function () use ($router) {
$router->post('login', 'AuthController@login');
$router->group(['middleware'=>'auth:api'],function () use ($router){
$router->post('logout', 'AuthController@logout');
$router->post('checkLogin', 'AuthController@checkLogin');
$router->put('password', 'AuthController@updatePassword');
$router->resource('score', 'ScoreController');
$router->resource('log', 'LogController');
});
$router->get('log','LogController@index');
$router->post('score','ScoreController@create');
});
Laravel の場合
Route::get('foo', function () {
return 'Hello World';
});
# 最後
いろんな記事みてたら、lumen は軽い、そして速いという特徴はみんな言ってます。だが、
特に lumen はえー!すごー!みたいな感じはしなかった
「Lumen は Laravel と似たようなものかと思うと細かいところが違っているので、Laravel に慣れているとはまりがちな印象」
という微妙な意見もありました。
Lumen と Codeigniter 比較したらどうだ
lumen は公式サイトでは一秒 1900 のリクエスト処理ができて、Silex と Slim 3 より速いことをアピールしています。自分は codeigniter3 を愛用していて lumen と codeigniter 比べたらどうかなあと思って調べたところ、codeigniter は公式サイトにデータ未公開だが、一部の記事では codeigniter4 は 2500 で codeigniter3 でも2250 requests per secondのリクエスト処理ができるそうです。しかも、2015 年の時点で。。。
CI4 gave around 2500 requests per second, while CI3 clocked about 2250 requests per second. That’s about a 10% improvement. On code that has had no optimization, yet, and that has a few portions where more files were needed to implement a more robust solution, like the Request and Response process. I’m thrilled by those results so far.
参考:Initial Thoughts on CodeIgniter 4
もともと Laravel が好きではない人間にとっては、軽さと速さで勝負するなら、codeigniter で十分じゃんとも思ったりします。
Laravel のマイグレーション、シード、仮想環境、コマンドなどの機能に慣れているなら、Lumen は一つのいい選択肢かもしれません。