Laravel 5.6 リリースノート

バージョニング規約

Laravelのバージョニングは、「パラダイム.メジャー・マイナー」の規約を維持しています。メジャーフレームワークリリースは、1月と6月の半年ごとにリリースします。一方、マイナーリリースは毎週のように、頻繁にリリースされます。マイナーリリースは、ブレーキングチェンジを絶対に含めません。

アプリケーションやパッケージで、Laravelフレームワークやコンポーネントを利用する場合、常に5.5.*のようにバージョンを指定してください。理由は上記の通り、Laravelのメジャーリリースは、ブレーキングチェンジを含んでいるからです。新しいメジャーリリースへの更新は、一日かからない程度になるように努力しています。

パラダイムシフトリリースは数年空けています。これはフレームワークの構造と規約に重要な変更が起きたことを表します。現在、パラダイムシフトリリースは開発されていません。

サポートポリシー

Laravel5.5のようなLTSリリースでは、バグフィックスは2年間、セキュリティフィックスは3年間提供します。これらのリリースは長期間に渡るサポートとメンテナンスを提供します。 一般的なリリースでは、バグフィックスは6ヶ月、セキュリティフィックスは1年です。

バージョン リリース バグフィックス期限 セキュリティフィックス期限
5.0 2015年2月4日 2015年8月4日 2016年2月4日
5.1 (LTS) 2015年5月9日 2017年6月9日 2018年6月9日
5.2 2015年12月21日 2016年6月21日 2016年12月21日
5.3 2016年8月23日 2017年2月23日 2017年8月23日
5.4 2017年1月24日 2017年7月24日 2018年1月24日
5.5 (LTS) 2017年8月30日 2019年8月30日 2020年8月30日
5.6 2018年2月7日 2018年8月7日 2019年2月7日

Laravel 5.6

Laravel5.6はLaravel5.5からの持続的な向上に付け加え、向上したログシステム、単一サーバタスクスケジュール、向上したモデルのシリアライズ、動的レート制限、ブロードキャストチャンネルクラス、APIリソースコントローラ生成、Eloquent日付フォーマットの向上、Bladeコンポーネント別名、Argon2パスワードハッシュサポート、Collisionパッケージの同梱などを追加しました。更に、フロントエンドのスカフォールドは、Bootstrap4向けにアップグレードされました。

Laravelが背後で使用しているSymfonyコンポーネントは、Symfonyの~4.0リリースシリーズへアップグレードされました。

Laravel5.6のリリースはSpark6.0と同時にリリースされました。Laravel Sparkがリリースされてから、初めてのメジャーアップグレードです。Spark6.0では、StripeとBraintreeに対するユーザー数に応じた価格や、ローカリゼーション、Bootstrap4、UIの向上、Stripe Elementsのサポートを導入しました。

Tip!! このドキュメントはフレームワークで注目してもらいたい機能向上についてまとめたものです。より全体的な変更ログは、いつでもGitHubで確認できます。

ログの向上

Laravel5.6ではログシステムが大いに向上しています。ログの設定はすべて、新しいconfig/logging.php設定ファイルにあります。ログメッセージを複数のハンドラへ送る、ログ「スタック」が簡単に構築できるようになりました。たとえば、debugレベルのメッセージは全てシステムログへ送り、errorレベルのメッセージでは、すぐに対応できるようにSlackへ送ることができます。

'channels' => [
    'stack' => [
        'driver' => 'stack',
        'channels' => ['syslog', 'slack'],
    ],
],

さらに、新しいログシステムの"tap"機能を使えば、既存のログチャンネルを簡単にカスタマイズできるようになりました。詳細は、ログのドキュメント全文をご覧ください。

単一サーバタスクスケジュール

Note: この機能を使用するには、アプリケーションのデフォルトキャッシュドライバとして、memcachedredisキャッシュドライバを使用する必要があります。更に、全サーバが同じ単一のキャッシュサーバと通信している必要があります。

アプリケーションが複数のサーバで実行される場合、スケジュール済みのジョブを単一サーバ上のみで実行するよう制限できるようになりました。たとえば、毎週の金曜の夜に、新しいレポートを生成するタスクをスケジュールしていると仮定しましょう。タスクスケジューラが3つのワーカーサーバ上で実行されているなら、スケジュールされているタスクは3つ全部のサーバで実行され、3回レポートが生成されます。これではいけません。

タスクをサーバひとつだけで実行するように指示するには、スケジュールタスクを定義するときにonOneServerメソッドを使用します。このタスクを最初に取得したサーバが、同じタスクを同じCronサイクルで他のサーバで実行しないように、ジョブにアトミックなロックを確保します。

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

動的レート制限

以前のLaravelのリリースでは、ルートのグループへレート制限を指定する場合、リクエストの最大回数をハードコードする必要がありました。

Route::middleware('auth:api', 'throttle:60,1')->group(function () {
    Route::get('/user', function () {
        //
    });
});

Laravel5.6では、認証されたUserモデルの属性にもとづいて、リクエストの最大回数が動的に指定されます。たとえば、Userモデルがrate_limit属性を含んでいれば、属性の名前をthrottleミドルウェアに指定することで、最大リクエストカウントを計算するために使用されます。

Route::middleware('auth:api', 'throttle:rate_limit,1')->group(function () {
    Route::get('/user', function () {
        //
    });
});

ブロードキャストチャンネルクラス

アプリケーションで多くのチャンネルを利用していると、routes/channels.phpファイルは膨大になってしまいます。認証チャンネルのクロージャを使用する代わりに、チャンネルクラスを使用するのが良いでしょう。チャンネルクラスを生成するには、make:channel Aritisanコマンドが使用できます。このコマンドは、新しいチャンネルクラスをApp/Broadcastingディレクトリへ生成します。

php artisan make:channel OrderChannel

次に、チャンネルをroutes/channels.phpファイルで登録します。

use App\Broadcasting\OrderChannel;

Broadcast::channel('order.{order}', OrderChannel::class);

最後に、チャンネルの認証ロジックをチャンネルクラスのjoinへ記述します。典型的な場合ではチャンネル認証クロージャに設置するのと同じロジックをこのjoinメソッドに設置します。もちろん、チャンネルモデル結合の利点も利用できます。

<?php

namespace App\Broadcasting;

use App\User;
use App\Order;

class OrderChannel
{
    /**
     * 新しいチャンネルインスタンスの生成
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * ユーザーのチャンネルへアクセスを認証
     *
     * @param  \App\User  $user
     * @param  \App\Order  $order
     * @return array|bool
     */
    public function join(User $user, Order $order)
    {
        return $user->id === $order->user_id;
    }
}

APIコントローラの生成

APIにより使用されるリソースルートを定義する場合、createeditのようにHTMLテンプレートに存在するルートを通常除外します。これらのメソッドを含まないリソースコントローラを生成するには、make:controller実行時に--apiスイッチを使用できるようになりました。

php artisan make:controller API/PhotoController --api

モデルのシリアライズの向上

以前のLaravelリリースでは、キューされたモデルがロードしていたリレーションは、そのままリストアされませんでした。Laravel5.6では、キューされたモデルがロードしていたリレーションは、キューによりジョブが処理される際に自動的にリロードされます。

Eloquent日付キャスト

Eloquent日付キャストカラムのフォーマットを個別にカスタマイズできるようになりました。最初に、キャスト宣言の中で、希望する日付形式を指定します。一度指定すると、このフォーマットはモデルを配列やJSON西リアライズするとき、そのフォーマットが使用されます。

protected $casts = [
    'birthday' => 'date:Y-m-d',
    'joined_at' => 'datetime:Y-m-d H:00',
];

Bladeコンポーネント別名

Bladeコンポーネントがサブディレクトリへ保存している場合、アクセスを簡単にするために別名が付けられるようになりました。たとえば、Bladeコンポーネントをresources/views/components/alert.blade.phpとして保存しているとイメージしてください。components.alertalertとして、このコンポーネントとして別名を付けるには、componentメソッドを使用します。

Blade::component('components.alert', 'alert');

コンポーネントに別名を付けると、ディレクティブを使いレンダできます。

@alert('alert', ['type' => 'danger'])
    You are not allowed to access this resource!
@endalert

追加のスロットがなければ、コンポーネントパラメータを省略できます。

@alert
    You are not allowed to access this resource!
@endalert

Argon2パスワードハッシュ

アプリケーションをバージョン7.2.0以降のPHP上で構築している場合、LaravelはArgon2アルゴリズムによるパスワードハッシュをサポートするようになりました。アプリケーションのデフォルトハッシュドライバーは、新しいconfig/hashing.php設定ファイルでコントロールします。

UUIDメソッド

Laravel5.6で新しいUUID生成メソッドが導入されました。Str::uuidStr::orderedUuidです。orderedUuidメソッドは、MySQLのようなデータベースにより、より簡単に、より効率的にインディックスされるタイムスタンプ先行のUUIDを生成します。これらのメソッドは、Ramsey\Uuid\Uuidオブジェクトを返します。

use Illuminate\Support\Str;

return (string) Str::uuid();

return (string) Str::orderedUuid();

Collision

デフォルトのlaravel/laravelアプリケーションは、dev Composer依存パッケージとして、Nuno Maduro氏によりメンテナンスされているCollisionパッケージを含むようになりました。このパッケージは、コマンドラインのLaravelアプリケーションを操作する際、美しいエラーレポートを提供してくれます。

Bootstrap 4

認証の定形コードやVueコンポーネント例のような、フロントエンドの全スカフォールドが、Bootstrap4へアップグレードされました。デフォルトとして生成するペジネーションリンクも、Bootstrap4になりました。

ドキュメント章別ページ

公式パッケージ

ヘッダー項目移動

注目:アイコン:ページ内リンク設置(リンクがないヘッダーへの移動では、リンクがある以前のヘッダーのハッシュをURLへ付加します。

移動

クリックで即時移動します。

設定

適用ボタンクリック後に、全項目まとめて適用されます。

カラーテーマ
和文指定 Pagination
和文指定 Scaffold
Largeスクリーン表示幅
インデント
本文フォント
コードフォント
フォント適用確認

フォントの指定フィールドから、フォーカスが外れると、当ブロックの内容に反映されます。EnglishのDisplayもPreviewしてください。

フォント設定時、表示に不具合が出た場合、当サイトのクッキーを削除してください。

バックスラッシュを含むインライン\Code\Blockの例です。

以下はコードブロックの例です。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * ユーザに関連する電話レコードを取得
     */
    public function phone()
    {
        return $this->hasOne('App\Phone');
    }
}

設定を保存する前に、表示が乱れないか必ず確認してください。CSSによるフォントファミリー指定の知識がない場合は、フォントを変更しないほうが良いでしょう。

キーボード・ショートカット

オープン操作

PDC

ページ(章)移動の左オフキャンバスオープン

HA

ヘッダー移動モーダルオープン

MS

移動/設定の右オフキャンバスオープン

ヘッダー移動

T

最初のヘッダーへ移動

E

最後のヘッダーへ移動

NJ

次ヘッダー(H2〜H4)へ移動

BK

前ヘッダー(H2〜H4)へ移動

その他

?

このヘルプページ表示
閉じる