マイクロフレームワークLumen

Posted: 2015-04-15 02:02 |  laravel 
4/14夜中にLumenなるマイクロフレームワークが発表されました。
Laravelのマイクロフレームワーク版です。
同じIlluminateコンポーネントを利用して、
ルーターは最速ルーティングライブラリとも言われる nikic/FastRoute を利用しています。
どんなもんか早速さらっと紹介しましょう!
ちなみにLaravelのチュートリアルとかでおなじみのMatt Stauffer氏が記事書いてました
それを見るだけでも雰囲気はわかるとおもいますヨ。
ドキュメントも合わせてみてみましょう。

インストール

インストールなんかはLaravelと同じ。
とくにありません
# インストーラー利用ならば
$ composer global require "laravel/lumen-installer=~1.0"
$ lumen new service

# composerオンリーならば
$ composer create-project laravel/lumen プロジェクト名 --prefer-dist
必要なものはLaravelと同じですね
    PHP >= 5.4
    Mcrypt PHP Extension
    OpenSSL PHP Extension
    Mbstring PHP Extension
    Tokenizer PHP Extension
このあたりは数日後にネット上でたくさん見るようになるでしょう。

ルーティング

Laravelユーザーはおなじみのものですが、$router->controllerはありません
resourceによるルーティングも無いようです。
マイクロフレームワークという扱いなのでそこまでは無いです。
いつもどおり.htaccessを公開ディレクトに設置します。
http://lumen.laravel.com/docs/configuration まんまです
app/Http/routes.phpにルーティング用のファイルがあります。
ルーティングはfastRouteを利用していますが、書き方はおなじです
$app->get('/sample', 'App\Http\Controllers\Controller@index');
fastRouteのリポジトリも見るとルーティングの書き方がわかると思います。
だいたい基本的には一緒です

ディレクトリ

ベーシックなディレクトリはまんまLaravel5です。
CommandsはJobsです。
5.1もJobsディレクトリに変わる予定です(本当?)。

コンフィグ

とくになければデフォルトのままのもの+.env利用ですが、いじりたい場合は、
vendor/laravel/lumen-frameworkのconfigなどをプロジェクトのルートディレクトリへ設置します
値が欲しい時は
// 読み込むコンフィグファイル
$app->configure('app');
// 値
dd(config('app.key'));

コンポーネントの使い方

コンテナには下記のように登録されていますので、
app('db')とかで利用できます。
ファサードを利用したければbootstrap/app.phpの
$app->withFacades()を有効にするだけです。
        'auth' => 'registerAuthBindings',
        'Illuminate\Contracts\Auth\Guard' => 'registerAuthBindings',
        'auth.password' => 'registerAuthBindings',
        'Illuminate\Contracts\Auth\PasswordBroker' => 'registerAuthBindings',
        'Illuminate\Contracts\Bus\Dispatcher' => 'registerBusBindings',
        'cache' => 'registerCacheBindings',
        'Illuminate\Contracts\Cache\Factory' => 'registerCacheBindings',
        'Illuminate\Contracts\Cache\Repository' => 'registerCacheBindings',
        'config' => 'registerConfigBindings',
        'composer' => 'registerComposerBindings',
        'cookie' => 'registerCookieBindings',
        'Illuminate\Contracts\Cookie\Factory' => 'registerCookieBindings',
        'Illuminate\Contracts\Cookie\QueueingFactory' => 'registerCookieBindings',
        'db' => 'registerDatabaseBindings',
        'encrypter' => 'registerEncrypterBindings',
        'Illuminate\Contracts\Encryption\Encrypter' => 'registerEncrypterBindings',
        'events' => 'registerEventBindings',
        'Illuminate\Contracts\Events\Dispatcher' => 'registerEventBindings',
        'Illuminate\Contracts\Debug\ExceptionHandler' => 'registerErrorBindings',
        'files' => 'registerFilesBindings',
        'filesystem' => 'registerFilesBindings',
        'Illuminate\Contracts\Filesystem\Factory' => 'registerFilesBindings',
        'hash' => 'registerHashBindings',
        'Illuminate\Contracts\Hashing\Hasher' => 'registerHashBindings',
        'Psr\Log\LoggerInterface' => 'registerLogBindings',
        'mailer' => 'registerMailBindings',
        'Illuminate\Contracts\Mail\Mailer' => 'registerMailBindings',
        'queue' => 'registerQueueBindings',
        'queue.connection' => 'registerQueueBindings',
        'Illuminate\Contracts\Queue\Queue' => 'registerQueueBindings',
        'request' => 'registerRequestBindings',
        'Illuminate\Http\Request' => 'registerRequestBindings',
        'session' => 'registerSessionBindings',
        'session.store' => 'registerSessionBindings',
        'Illuminate\Session\SessionManager' => 'registerSessionBindings',
        'translator' => 'registerTranslationBindings',
        'url' => 'registerUrlGeneratorBindings',
        'validator' => 'registerValidatorBindings',
        'view' => 'registerViewBindings',
        'Illuminate\Contracts\View\Factory' => 'registerViewBindings',

コンテナ

コントローラはメソッドインジェクションが利用可能で、
サービスプロバイダも基本的に同じです。
登録はbootstrap/app.phpに
$app->register('App\Providers\AppServiceProvider');

のように書きます
同じです、全く。

あまり書くことが無いくらい同じで、ミドルウェアもそのままです。
フォームリクエストがなく、Laravel5がコンパクトになっただけですね。
そのうちなんか作ってみようと思いますが、ぶっちゃけそこまでぶっちぎりに早い感じはしませんでした。
というのもまだ負荷をかけると安定しない印象です。

最後にLaravel5とLumenベンチ
abコマンドで測定してます。
環境は
mac pro xeon dual
メモリは16GB
PHP 5.6.7
apache
ミニマムベンチなのでいらないものを全て外したLaravel5です

Lumenは最初からいらないものが外されてますのでそのまま

ちなみに最大瞬間風速なのでこれよりもだいぶ遅い場合もありますが、
最大だとこんなもんでしょう。
 

about ytake

執筆に参加しています


Laravel お役立ち情報

share



このエントリーをはてなブックマークに追加

Categories

laravel 45

DTM 0

music 0

PHP全般 31

0

JAPAN 1

WORLD 1

javascript 4

RDBMS 1

NoSQL 1

NewSQL 1

Recent Posts

Ad

comments powered by Disqus

GitHub

Social Links

Author


クリエイティブ・コモンズ・ライセンス
Yuuki Takezawa 作『Ytake Blog』はクリエイティブ・コモンズ 表示 - 非営利 4.0 国際 ライセンス で提供されています。

© ytake/comnect All Rights Reserved. 2014