2018年2月7日にリリースされたLaravel 5.6の新機能まとめ。
以下は、Laravel NewsのLaravel 5.6 is Live, Here’s What’s New!の翻訳。文章がこなれていないところや翻訳が怪しいところもあるが、何かあればご連絡ください。
ロギングの改良
Laravel 5.6における最大の機能はロギングの改良だ。まず、v5.6では、ロギングの設定ファイルは、config/app.php から、config/logging.php に変更になっている。
"stacks"への設定により、ログメッセージを複数のハンドラーに送ることができる。例えば、全てのデバッグメッセージをシステムログに送ると共にエラーログはslackへ送るということができる。
詳しくは、ロギングのドキュメントを参照のこと。
シングルサーバータスクのスケジューリング
タスクスケジューラーを複数のサーバーで走らせていると、タスクは各々のサーバーで実行されるが、onOneServer() メソッドを使うことで、どれか一つのサーバーだけで実行するようにすることが可能となる。
$schedule->command('report:generate')
->fridays()
->at('17:00')
->onOneServer();
注意:ディフォルトのアプリケーションキャッシュドライバとして memcached または redis キャッシュドライバを使うことで、Laravel 5.6ではシングルサーバータスクのスケジュールリングを活用することができる。
動的レート制限
Laravel 5.6では、動的レート制限が導入された。これにより、ユーザー単位で簡単にリクエスト数制限を行うことができるようになる。
Route::middleware('auth:api', 'throttle:rate_limit,1')
->group(function () {
Route::get('/user', function () {
//
});
});
上の例では、rate_limit は、App\User モデルの属性で、一定期間内でのリクエスト数を制限するものである。
ブロードキャスト Channel クラス
クロージャを利用する代わりに、routes/channels.php ファイルで channelクラスを使うことができる。
新しい channel クラスを使うために、新しく make:channel コマンドがLaravel 5.6では用意された。
php artisan make:channel OrderChannel
routes/channels.php ファイルへchannelを登録するには次のように行う:
use App\Broadcasting\OrderChannel;
Broadcast::channel('order.{order}', OrderChannel::class);
APIコントローラーの生成
HTMLを返すだけのリソースコントローラーに不要なcreateとeditアクションを除いたAPI向けリソースコントローラーを生成することができる。これを行うには、--apiフラグを使う:
php artisan make:controller API/PhotoController --api
Eloquentデータのキャスト
Eloquentのdate型およびdatetime型のフォーマットを個別にカスタマイズすることができる。
protected $casts = [
'birthday' => 'date:Y-m-d',
'joined_at' => 'datetime:Y-m-d H:00',
];
このフォーマットは、モデルを配列やJSONデータにシリアライズする際に使われる。
Bladeコンポーネントの別名
bladeコンポーネントに簡便にアクセスできるよう別名を定義することができる。例えば、コンポーネントを resources/views/components/alert.blade.php に置いた場合、component() メソッドによって短い別名を定義することができる。
Blade::component('components.alert', 'alert');
そしてこの定義された別名でレンダリングが可能となる。
@component('alert')
<p>This is an alert component</p>
@endcomponent
Argon2 パスワードハッシング
Laravel 5.6 は、PHP 7.2以上で導入された新しいパスワードハッシングアルゴリズムに対応している。新しい設定ファイル config/hashing.php の中でディフォルトでどのハッシングドライバーを使うかを決めることができる。
さらに学ぶには、Argon2i hashing algorithmという記事を参照。
UUID Methods
ユニバーサルユニークID (UUID)を生成する Illuminate\Support\Str クラスにおいて、2つの新しいメソッドが利用可能となっている。
// The methods return a Ramsey\Uuid\Uuid object
return (string) Str::uuid();
return (string) Str::orderedUuid();
orderedUuid() メソッドは、簡単かつ効率的なデータベースインデッキシングに有効なタイムスタンプ順序のUUIDを生成する。
Collision
dev composer依存のパッケージとしてLaravel 5.6 でCollisionがやって来たという記事を最近書いた。これは、コンソールに綺麗なエラーレポートを出力するものだ。
Bootstrap 4
すべてのフロントエンド・スキャフォールディングとVueコンポーネントのサンプルは今やBootstrap 4を使用している。ベータではあるが我々はBootstrap 4に対応してきたし、Bootstrap 4 Laravelプリセットを作ってきた。Bootstrap 4 stableをLaravel 5.6と一緒に出せることは非常に喜ばしい!
Laravel 5.6についてさらに学ぶには
あなたのLaravel環境をv5.6にアップグレードするには、アップグレードガイドを参照のこと。Laravelはあなたのアプリができるだけ最短にメジャーリリースにアップデートできるよう努力している。5.5から5.6へのアップグレードはたかだか10〜30分程度と思う。もちろん、アプリケーションによって差はあるのだが。
(original English article was written by Paul Redmond)