47
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Lumenについて色々まとめてみた

Posted at

はじめに

Lumenを触る機会があったので、その概要やlaravelとの違いなどについてまとめてみました。
ちなみにバージョンは最新の5.6を想定してます。

Lumenとは

laravelをベースとしたマイクロフレームワーク。

  • とにかく速い、軽い
  • Laravelの大部分な機能が使える
  • が、構成を柔軟に変更できない、パッケージの追加を考慮していないなど制約も色々とある
  • 大量のトラフィックを裁く必要のあるもの、APIサーバー、ちょっとしたものなどを作ったりする際に向いてる

公式サイト
https://lumen.laravel.com/

Lumenの始め方

色々やり方はあるみたいですが、Homesteadを利用したやり方が楽そうなので採用しました。

  1. laravelのHomesteadをインストール

  2. composer global require "laravel/lumen-installer"でLumenのインストーラをダウンロード

  3. 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ですが、記述の仕方が異なります。

web.php
Route::get('foo', function () {
    return 'Hello World';
});

laravelの場合、上記のようにRouteを利用しますが、
LumenではRouteは利用せず以下のように記述します。

web.php
$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

47
35
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
47
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?