はじめに
Lumenを触る機会があったので、その概要やlaravelとの違いなどについてまとめてみました。
ちなみにバージョンは最新の5.6を想定してます。
Lumenとは
laravelをベースとしたマイクロフレームワーク。
- とにかく速い、軽い
- Laravelの大部分な機能が使える
- が、構成を柔軟に変更できない、パッケージの追加を考慮していないなど制約も色々とある
- 大量のトラフィックを裁く必要のあるもの、APIサーバー、ちょっとしたものなどを作ったりする際に向いてる
公式サイト
https://lumen.laravel.com/
Lumenの始め方
色々やり方はあるみたいですが、Homesteadを利用したやり方が楽そうなので採用しました。
-
laravelのHomesteadをインストール
-
composer global require "laravel/lumen-installer"
でLumenのインストーラをダウンロード -
lumen new [プロジェクト名]
でプロジェクト作成
ディレクトリ構造
|-- app
| |-- Console
| |-- Events
| |-- Exceptions
| |-- Http
| |-- Jobs
| |-- Listeners
| `-- Providers
|-- artisan
|-- bootstrap
| `-- app.php
|-- composer.json
|-- composer.lock
|-- database
| |-- factories
| |-- migrations
| `-- seeds
|-- phpunit.xml
|-- public
| `-- index.php
|-- resources
| `-- views
|-- routes
| `-- web.php
|-- storage
| |-- app
| |-- framework
| `-- logs
|-- tests
| |-- ExampleTest.php
| `-- TestCase.php
`-- vendor
|-- autoload.php
|-- bin
|-- composer
|-- doctrine
|-- dragonmantank
|-- fzaninotto
|-- hamcrest
|-- illuminate
|-- laravel
|-- mockery
|-- monolog
|-- myclabs
|-- nesbot
|-- nikic
|-- phar-io
|-- phpdocumentor
|-- phpspec
|-- phpunit
|-- psr
|-- sebastian
|-- symfony
|-- theseer
|-- vlucas
`-- webmozart
色々とスッキリしてる!
lumenとlaravelの違い
configディレクトリがない
lumenにはconfigディレクトリがありません。必要な設定は bootstrap/app.php 内や .env で行います。
使えるartisanコマンドが異なる
lumenで使えるartisanコマンドは以下の通り。
Available commands:
help Displays help for a command
list Lists commands
migrate Run the database migrations
auth
auth:clear-resets Flush expired password reset tokens
cache
cache:clear Flush the application cache
cache:forget Remove an item from the cache
cache:table Create a migration for the cache database table
db
db:seed Seed the database with records
make
make:migration Create a new migration file
make:seeder Create a new seeder class
migrate
migrate:fresh Drop all tables and re-run all migrations
migrate:install Create the migration repository
migrate:refresh Reset and re-run all migrations
migrate:reset Rollback all database migrations
migrate:rollback Rollback the last database migration
migrate:status Show the status of each migration
queue
queue:failed List all of the failed queue jobs
queue:failed-table Create a migration for the failed queue jobs database table
queue:flush Flush all of the failed queue jobs
queue:forget Delete a failed queue job
queue:listen Listen to a given queue
queue:restart Restart queue worker daemons after their current job
queue:retry Retry a failed queue job
queue:table Create a migration for the queue jobs database table
queue:work Start processing jobs on the queue as a daemon
schedule
schedule:run Run the scheduled commands
laravelと違いコントローラーやモデルはartisanコマンドでは作れないので、手動で作る必要があります。
ルーティング
記載する場所はlaravel同様/routes/web.php
ですが、記述の仕方が異なります。
Route::get('foo', function () {
return 'Hello World';
});
laravelの場合、上記のようにRouteを利用しますが、
LumenではRouteは利用せず以下のように記述します。
$router->get('foo', function () {
return 'Hello World';
});
$router->post('foo', function () {
//
});
FacadeやEloquentを使う時にひと手間いる
laravelでは難なく利用できたFacade,Eloquentですが、lumenで使用する際には以下の対応が必要になります。
- Facade使いたい時は、
/bootstrap/app.php
内の$app->withFacades()
をコメントイン。 - 同様にEloquentを使いたい時は、
/bootstrap/app.php
内の$app->withEloquent()
をコメントイン。
セッションが使えない
5.2以降使えなくなったそう。公式にはセッション使いたかったらlaravel使ってねって記載してあります。。
RESTを実現するための施策なんでしょうか。
こちらの記事にて回避策をまとめてくださってる方もいますが、
まぁ公式の言う通りセッション使うようであればlaravel使った方が無難なんでしょうか?
使ってみた所感
- laravelと共通してる部分がかなりあってlaravelを使う感覚で割と色々できる
- けどlaravel感覚で使ってるとあれ?これできないの?みたいなことに直面する。artisanコマンドとか
- エラーメッセージとかddした時のビューがlaravelと比べちょいダサ…
- 普通のCRUDアプリの実装では特にlumenはえー!すごー!みたいな感じはしなかった
- 色々シンプルになってるのはわかるけど、使いどころがいまいちわからん…
- 日本語のドキュメント少ない
色々多機能でドキュメントも充実してるlaravelをとりあえず使っちゃえばいいんじゃない?と思ってしまいますけど
軽量化目的でAPIだけの実装とかであればlumenの方が適してるんでしょうか。
参考
https://qiita.com/zaburo/items/68bf50f0beda65445de7
http://blog.yucchiy.com/2015/05/09/hello-lumen/
https://laravel10.wordpress.com/2015/04/20/%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF-lumen-%E7%99%BB%E5%A0%B4/#more-1294