バージョニング規約
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: この機能を使用するには、アプリケーションのデフォルトキャッシュドライバとして、
memcached
かredis
キャッシュドライバを使用する必要があります。更に、全サーバが同じ単一のキャッシュサーバと通信している必要があります。
アプリケーションが複数のサーバで実行される場合、スケジュール済みのジョブを単一サーバ上のみで実行するよう制限できるようになりました。たとえば、毎週の金曜の夜に、新しいレポートを生成するタスクをスケジュールしていると仮定しましょう。タスクスケジューラが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により使用されるリソースルートを定義する場合、create
やedit
のように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.alert
をalert
として、このコンポーネントとして別名を付けるには、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::uuid
とStr::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になりました。