Laravel 5.6 Release & 5.5 機能差分メモ


おめでとうございます。どうも [laracon](https://laracon.net/) に合わせてリリース。

所々で力尽きてるので。

1. [5.6 Upgrade Guide](https://laravel.com/docs/5.6/upgrade)
2. [ChangeLog 5.6](https://github.com/laravel/framework/blob/5.6/CHANGELOG-5.6.md)
3. [Laravel 5.6 is Live, Here’s What’s New!
](https://laravel-news.com/laravel-5-6)


大きな変更点は `Argon` のサポート、 `Log` まわりの内部変更、Bootstrap4 対応

# PHP上の変更点

1. `PHP >= 7.0.0` から `PHP >= 7.1.3` になりました。

## 配列

2. `Arr::wrap` メソッドの返り値が `null` から `[]` になりました

## Artisan

1. `optimize` が廃止されます。

## Blade

`e` メソッドで `htmlspecialchars`メソッドを通すが、Inline-JSONでJavascriptFrameworkを使うと二重……？？?

あとで書く

### Blade Component Alias

Bladeのコンポーネントにエイリアス名をつけられるようになった。

1. `resources/views/components/alert.blade.php` にコンポーネントの内容を書いたとする。
2. `Blade::component('components.alert', 'alert');` というコードをどっかに書く（ ViewServiceProvider とか作ってそこの`boot`とかにやろか）
3. Blade内で書くにはこんな感じになる

```
@component('alert')
    <p>This is an alert component</p>
@endcomponent
```



## Cache

The Rate Limiter `tooManyAttempts` Method の挙動変更?

## Cron

Cron実行をいくつかのサーバで実行している場合、全てのサーバで実行されますが、 `onOneServer`メソッドでどれか一つのサーバのみで実行できるようになった。

この機能を使うには、`memcached`or`redis`サーバをキャッシュサーバとして使っている必要がある。

## Database

### `Morph` カラムのインデックス化。

`morphs`を使ったカラムのマイグレーションをした時に、パフォーマンスを良くするために実行予約が逆転していました（訳：あやしい）
もし `mophs`メソッドを一つのマイグレーションで使っている場合、`migration`の`down`を実行した時にエラーが発生したと思われます。もし開発中のアプリケーションに起きた時、`migrate:fresh`を実行して再構築をしていたはずです。`Production`環境の場合、`morphs`メソッドのインデックス名からパスするでしょう

### `MigrationRepositoryInterface`

新しい`getMigrationsBatches`メソッドが`MigrationRepositoryInterface`に追加されました。

In the very unlikely event that you were defining your own implementation of this class, you should add this method to your implementation. You may view the default implementation in the framework as an example.

## Eloquent

`getDateFormat`メソッドが、`protected`から`public`になりました。

## Hashing

`config/hashing.php`ファイルが追加されました。設定ファイルの中身は [default configuration](https://github.com/laravel/laravel/blob/develop/config/hashing.php)にして下さい。

Most likely, you should maintain the `bcrypt` driver as your default driver. However, `argon` is also supported.

### Argon2i

Laravel では Argon2i アルゴリズムを使う。[詳しくはこちら](https://laravel-news.com/laravel-agron2i)

## Helpers

`e` 関数の挙動変更。

## Logging

1. 新しい設定ファイル

	`config/logging.php` ファイルが追加されました。設定ファイルの中身は [default configuration](https://github.com/laravel/laravel/blob/develop/config/logging.php)にしてください。

	そして`config/app.php`の設定にあった `log`,`log_level`は削除されます。
	
2. `configureMonologUsing`メソッド

	もしあなたのアプリケーションが `configureMonologUsing` を使っている場合、`custom` ログチャンネルを新設する必要があります。詳しいことは [こちら](https://laravel.com/docs/5.6/logging#creating-custom-channels)


3. `Writer`クラス

	`Illuminate\Log\Writer`クラスは`Illuminate\Log\Logger`へ名前変更されます。type-hintingでこのクラスを使っている場合は名前の変更をするようにして下さい。もしくは、どちらかと言えば、type-hintingでも`Psr\Log\LoggerInterface`を使うようにしてください。

3. `Illuminate\Contracts\Logging\Log`インターフェース

	`Illuminate\Contracts\Logging\Log`インターフェースは廃止されます。type-hintingとして使うなら`Psr\Log\LoggerInterface`を使うようにしてください。


## Mail

## Pagination

Bootstrap4 に対応しました。Bootstrap3 のリンクを使う場合は `Paginator::useBootstrapThree` を `AppServiceProvider::boot` メソッド内で実行して下さい。



## Resources

`Eloquent`のResource Response の `origial`プロパティが、新しくJsonの string/array になりました。modelデータの情報を早く確認する方法ができたっぽい。

## Routing

Model を新しく作った時の返り値が自動的に `201` になります。アプリケーションテストで `200` が帰ってくるとしている場合は `201` に書き換えてね。

## Trusted Proxies

## Validation

`ValidatesWhenResolved` interface/trait の `validate`メソッド が、`$request->validate()`との衝突を回避するために `validateResolved` へ名前が変更されました。

## Str

UUID メソッドが使えるようになりました。

`(string) Str::uuid();` や `(string)Str::orderedUuid()`


### orderedUuid

このメソッドは `timestamp` からUUIDを生成します。そしてDBのインデックスに効率がいい感じにするぽいよ。