Laravel 5.6の新機能

2018年2月7日にリリースされたLaravel 5.6の新機能まとめ。

以下は、Laravel Newsの[Laravel 5.6 is Live, Here’s What’s New!](https://laravel-news.com/laravel-5-6?utm_medium=email&utm_campaign=Laravel%2056%20is%20now%20released%20-%20%20193&utm_content=Laravel%2056%20is%20now%20released%20-%20%20193+CID_ef15a144904bf855890a8824f99ff94b&utm_source=email%20marketing)の翻訳。文章がこなれていないところや翻訳が怪しいところもあるが、何かあればご連絡ください。

# ロギングの改良

Laravel 5.6における最大の機能はロギングの改良だ。まず、v5.6では、ロギングの設定ファイルは、config/app.php から、config/logging.php に変更になっている。

"stacks"への設定により、ログメッセージを複数のハンドラーに送ることができる。例えば、全てのデバッグメッセージをシステムログに送ると共にエラーログはslackへ送るということができる。

詳しくは、[ロギングのドキュメント](https://laravel.com/docs/5.6/logging)を参照のこと。

# シングルサーバータスクのスケジューリング

タスクスケジューラーを複数のサーバーで走らせていると、タスクは各々のサーバーで実行されるが、onOneServer() メソッドを使うことで、どれか一つのサーバーだけで実行するようにすることが可能となる。

```
$schedule->command('report:generate')
    ->fridays()
    ->at('17:00')
    ->onOneServer();
```

注意：ディフォルトのアプリケーションキャッシュドライバとして memcached または redis キャッシュドライバを使うことで、Laravel 5.6ではシングルサーバータスクのスケジュールリングを活用することができる。

# 動的レート制限

Laravel 5.6では、[動的レート制限](https://laravel-news.com/laravel-5-6-dynamic-rate-limiting)が導入された。これにより、ユーザー単位で簡単にリクエスト数制限を行うことができるようになる。

```
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](https://laravel-news.com/laravel-5-6)という記事を参照。

# UUID Methods

ユニバーサルユニークID (UUID)を生成する Illuminate\Support\Str クラスにおいて、２つの新しいメソッドが利用可能となっている。

```
// 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がやって来た](https://laravel-news.com/collision)という記事を最近書いた。これは、コンソールに綺麗なエラーレポートを出力するものだ。

![alt](https://i2.wp.com/wp.laravel-news.com/wp-content/uploads/2018/02/collision-example.png?resize=600%2C388)

# Bootstrap 4

すべてのフロントエンド・スキャフォールディングとVueコンポーネントのサンプルは今やBootstrap 4を使用している。[ベータではあるが](https://laravel-news.com/bootstrap-4-final-beta-released)我々はBootstrap 4に対応してきたし、[Bootstrap 4 Laravelプリセット](https://laravel-news.com/bootstrap-4-laravel-preset)を作ってきた。[Bootstrap 4 stable](https://laravel-news.com/bootstrap-4-stable)をLaravel 5.6と一緒に出せることは非常に喜ばしい！

# Laravel 5.6についてさらに学ぶには

あなたのLaravel環境をv5.6にアップグレードするには、[アップグレードガイド](https://laravel.com/docs/5.6/upgrade)を参照のこと。Laravelはあなたのアプリができるだけ最短にメジャーリリースにアップデートできるよう努力している。5.5から5.6へのアップグレードはたかだか10〜30分程度と思う。もちろん、アプリケーションによって差はあるのだが。

(original English article was written by Paul Redmond)