Laravel 5.4 の新機能

2017年1月24日にリリースされたLaravel 5.4の新機能まとめ。

以下は、Laravel Newsの[Laravel 5.4 Is Now Released](https://laravel-news.com/laravel-5-4)の翻訳。文章がこなれていないところや翻訳が怪しいところもあるが、何かあればご連絡ください。

# Laravel Dusk

[Laravel Dusk](https://laravel-news.com/laravel-dusk-is-coming)はJavaScriptが有効なアプリケーション向けの徹底したブラウザテスティングツールだ。ページのやりとりのテストを正しく行う方法を提供することを目的としており、ボタンやリンクのクリック、フォーム、ドラッグ＆ドロップのテストにDuskが有効だ。

DuskはChromeDriverとFacebook Php-webdriverをテストのために利用している。どんなSeleniumブラウザとも一緒に動作するが、ディフォルトではChromeDriverも付いて来るので、JDKやSeleniumをインストールする手間が省ける。

DuskはSeleniumのセットアップが不要で毎回サーバーを起動することなく簡単に使える。

# Laravel Mix

[Laravel Mix](https://laravel-news.com/laravel-elixir-to-laravel-mix)は、次世代のElixirだ。Gulpではなくwebapckで構築されている。大きな変更であるため名称が変更された。

Elixirのセットアップをカスタマイズしていなければ、Mixへの移行は問題ではないし、[Laracast](https://laracasts.com/series/whats-new-in-laravel-5-4/episodes/3)にもアップデートに関する動画がある。

# Bladeコンポーネントとスロット

[コンポーネントとスロット](https://laravel-news.com/blade-components-slots)はBladeテンプレートでさらなる柔軟性を持たせるために設計されている。たとえば、アラートを表示するためのインクルードテンプレートがあるとします。

```
// alert.blade.php
<div class="alert">
    {{ $slot }}
</div>
```

そして、テンプレートファイル内で次のようにインクルードすることができる。

```
@component('inc.alert')
    This is the alert message here.
@endcomponent
```

# Markdownメール

[Laravel 5.3](https://laravel-news.com/laravel-5-3-is-now-released)では、[Mailable](https://laravel-news.com/laravel-mailable-the-new-and-improved-way-to-send-email-in-laravel)と[Notifications](https://laravel-news.com/laravel-notifications-easily-send-quick-updates-through-slack-sms-email-and-more)というメール関連の2つの機能が導入された。これらを使ってメール、SMS、その他のチャネルに同じメッセージを送信することが可能だ。

これらの改善点の上に構築されたLaravel 5.4ではメールテンプレートを作成するために新しくMarkdownシステムが含まれている。

この機能は、PrasedownパーサーとMarkdown Extraを実装しているので、テーブルを使用することが可能。

```
@component('mail:message')

# Thank You

Thank you for purchasing from our store. 

@component('mail::button', ['url' => $actionUrl, 'color' => $color])
{{ $actionText }}
@endcomponent

@endcomponent
```

# 自動ファサード

どんなクラスも事前の準備なしにFacadeとして使うことができるようになった。例を示す：

```
namespace App;

class Zonda 
{
    public function zurf()
    {
        return ‘Zurfing’;
    }
}
```

そして、ルートまたはコントローラー内で：

```
use Facades\ {
    App\Zonda
};

Route::get('/', function () {
    return Zonda::zurf();
});
```

# ルートの改善

さらなる新機能は、名前付きルートやミドルウェアを定義ためのこなれた文法だ。

```
Route::name('profile')->get('user/{id}/profile', function ($id) {
    // some closure action...
});

Route::name('users.index')->middleware('auth')->get('users', function () {
    // some closure action...
});

Route::middleware('auth')->prefix('api')->group(function () {
    // register some routes...
});

Route::middleware('auth')->resource('photo', 'PhotoController');
```

ルートキャッシング層も非常に巨大なアプリケーションでのルートマッチングを可能にする重大な改善が行われた。

# Collectionの高次メッセージング

この新機能を披露するにはコードサンプルを使った方が良いでしょう。コレクションの各要素にある処理を施したいとします：

```
$invoices->each(function($invoice) {
    $invoice->pay();
});
```

こう書けます：

```
$invoices->each->pay();
```

# さらなる新機能

その他の変更と改善は以下の通り：

- 新しいretryヘルパー
- 新しいarray_wrapヘルパー
- デフォルトの503エラーページを追加
- コアの部分から::class記法に切り替え
- パスワードリセットルートに名前を追加
- PhpRedisのサポート
- IPv4とIPv6バリデーターの追加
- date_format検証がより正確に

# Laravel 5.4へのアップグレード

公式[ドキュメント](https://laravel.com/docs/5.4/upgrade)に完全なアップグレードガイドが含まれている。また、知っておくべき変更も幾つかある。

Laravel Tinkerは独立パッケージとなり、インストールは簡単になった。パッケージをrequireしてサービスプロバイダを含めれば良い：

```
composer require laravel/tinker
```

それが終われば、config/app.phpにサービスプロバイダを追加する：

```
Laravel\Tinker\TinkerServiceProvider
```

ブラウザキットを使う既存のテストは、Laravel Duskに移行するか、[古いパッケージ](https://github.com/laravel/browser-kit-testing)をインクルードする必要がある：

```
composer require laravel/browser-kit-testing --dev
```

最新バージョンを取得するには、composer.jsonにおいて、laravel/frameworkへの依存を5.4.*に変更する。

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

[Laracast](https://laracasts.com/series/whats-new-in-Laravel-5-4)はこれら全ての機能について"網羅"している。また、公式ドキュメントには[リリースノート](https://laravel.com/docs/5.4/upgrade)、[アップグレードガイド](https://laravel.com/docs/5.4/releases)がある。

(original English article was written by Eric L. Barnes)