Lumenで手軽にwebアプリを作成

ChainZ(クリエイター)
いろいろやってます。

lumenとは?

lumenはlaravelから分離したマイクロフレームワークです。公式の説明だと、lumenはlaravelを使ったプロジェクトに補助するサービスを開発する時に最適なフレームワークです。省略版のlaravelとも考えられるでしょう。

lumenはどんなプロジェクトに適切なのか?

厳密に言うと、lumenはほぼ全てのプロジェクトに適しています(lumenからlaravelに移行するのが簡単なので)。しかし、laravelとの使い分けを考えてみると、下記のようなプロジェクトにはぴったりだと思います:

  1. wordpressより高度なカスタマイズが必要なwebサイト。
  2. 中小型のwebアプリ。
  3. RESTful APIサーバー。

インストール

composerを使えば、コマンド一発でインストールできます。

1
composer create-project laravel/lumen --prefer-dist <ディレクトリー>

lumenのMVC

lumenはlaravelのMVCをそのまま使用しています。しかし、Eloquent(laravelのModel)を使うには、bootstrap/app.phpに下記のコメントアウトを外す必要があります。

1
// $app->withEloquent();

ルーター

lumenのルート設定はapp/Http/routes.phpにあります。

1
2
3
4
5
$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が使えるようになります。

1
// $app->withFacades();

lumenのキャッシュシステムは三つのストレージを用意しています:file, memcachedredis。どれを使うかは.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メーソドがよく使います:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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を書くか、composertwigなどのテンプレートエンジンを実装するかのいずれかです。よく考えると、lumenは補助サービスを作る用のフレームワークで、APIサーバーという前提だとテンプレートエンジンは不要ですね。(JSON返せばいいから、viewなんかいらないです。)