Readouble

Laravel 5.5 リリースノート

バージョニング規約Versioning Scheme

Laravelのバージョニングは、「パラダイム.メジャー・マイナー」の規約を維持しています。メジャーフレームワークリリースは、1月と6月の半年ごとにリリースします。一方、マイナーリリースは毎週のように、頻繁にリリースされます。マイナーリリースは、ブレーキングチェンジを絶対に含めません。Laravel's versioning scheme maintains the following convention: paradigm.major.minor. Major framework releases are released every six months (February and August), while minor releases may be released as often as every week. Minor releases should never contain breaking changes.

アプリケーションやパッケージで、Laravelフレームワークやコンポーネントを利用する場合、常に5.5.*のようにバージョンを指定してください。理由は上記の通り、Laravelのメジャーリリースは、ブレーキングチェンジを含んでいるからです。新しいメジャーリリースへの更新は、一日かからない程度になるように努力しています。When referencing the Laravel framework or its components from your application or package, you should always use a version constraint such as 5.5.*, since major releases of Laravel do include breaking changes. However, we strive to always ensure you may update to a new major release in one day or less.

パラダイムシフトリリースは数年空けています。これはフレームワークの構造と規約に重要な変更が起きたことを表します。現在、パラダイムシフトリリースは開発されていません。Paradigm shifting releases are separated by many years and represent fundamental shifts in the framework's architecture and conventions. Currently, there is no paradigm shifting release under development.

Laravelはなぜセマンティックバージョニングを使わないのかWhy Doesn't Laravel Use Semantic Versioning?

Laravelのコンポーネント(Cashier、Dusk、Valet、Socialiteなど)では、セマンティックバージョニングが使われています。しかし、Laravelフレームワーク自体には、使用していません。なぜなら、セマンティックバージョニングは、2つのコード部分がコンパチブルであるかを「還元論」的に決める方法だからです。たとえ、セマンティックバージョニングを採用していても、皆さんはアップグレードパッケージをインストール後、自動化したテストスーツを実行することにより、自分のコードベースでもコンパチブルであることを実際に確認する必要があります。On one hand, all optional components of Laravel (Cashier, Dusk, Valet, Socialite, etc.) do use semantic versioning. However, the Laravel framework itself does not. The reason for this is because semantic versioning is a "reductionist" way of determining if two pieces of code are compatible. Even when using semantic versioning, you still must install the upgraded package and run your automated test suite to know if anything is actually incompatible with your code base.

そのため、Laravelフレームワークでは、実際のリリース期間をより良く表すバージョニング方法を採用しています。マイナーリリースは決して内部のブレーキングチェンジを含まないわけですから、「パラダイム.メジャー.*」記法でバージョンを指定している限り、ブレーキングチェンジは発生しません。So, instead, the Laravel framework uses a versioning scheme that is more communicative of the actual scope of the release. Furthermore, since minor releases never contain intentional breaking changes, you should never receive a breaking change as long as your version constraints follow the paradigm.major.* convention.

サポートポリシーSupport Policy

Laravel5.5のようなLTSリリースでは、バグフィックスは2年間、セキュリティフィックスは3年間提供します。これらのリリースは長期間に渡るサポートとメンテナンスを提供します。 一般的なリリースでは、バグフィックスは6ヶ月、セキュリティフィックスは1年です。For LTS releases, such as Laravel 5.5, bug fixes are provided for 2 years and security fixes are provided for 3 years. These releases provide the longest window of support and maintenance. For general releases, bug fixes are provided for 6 months and security fixes are provided for 1 year.

Laravel 5.5 (LTS)Laravel 5.5 (LTS)

Laravel5.5は、パッケージの自動検出やAPIリソース/変換、コンソールコマンドの自動登録、キュージョブのチェーン、キュージョブのレート制限、時間ベースのジョブ再試行、renderableなmailable、renderableかつreportableな例外、より一貫性のある例外処理、データベーステストの向上、簡単になったカスタムバリデーションルール、Reactのフロントエンドのプリセット、Route::viewRoute::redirectメソッド、MemcachedとRedisキャッシュドライバの「ロック」、オンデマンド通知、DuskでのヘッドレスChromeのサポート、便利なBladeのショートカット記法、信用するプロキシサポートの向上などを付け加え、持続的な進化を遂げています。Laravel 5.5 continues the improvements made in Laravel 5.4 by adding package auto-detection, API resources / transformations, auto-registration of console commands, queued job chaining, queued job rate limiting, time based job attempts, renderable mailables, renderable and reportable exceptions, more consistent exception handling, database testing improvements, simpler custom validation rules, React front-end presets, Route::view and Route::redirect methods, "locks" for the Memcached and Redis cache drivers, on-demand notifications, headless Chrome support in Dusk, convenient Blade shortcuts, improved trusted proxy support, and more.

同時に、美しいキューダッシュボードと設定システムを提供する、RedisベースのLaravelキューのためのLaravel Horizonも新たにリリースしました。In addition, Laravel 5.5 coincides with the release of Laravel Horizon[https://horizon.laravel.com], a beautiful new queue dashboard and configuration system for your Redis based Laravel queues.

lightbulb">Tip!! このドキュメントはフレームワークで注目してもらいたい機能向上についてまとめたものです。より全体的な変更ログは、いつでもGitHubで確認できます。{tip} This documentation summarizes the most notable improvements to the framework; however, more thorough change logs are always available on GitHub[https://github.com/laravel/framework/blob/5.5/CHANGELOG-5.5.md].

Laravel HorizonLaravel Horizon

Horizonは、Laravelで動作するRedisキューのための、美しいダッシュボードとコード駆動による設定を提供します。Horizonにより、ジョブのスループット、実行時間、失敗したジョブのような、キューのメトリックを簡単に監視できます。Horizon provides a beautiful dashboard and code-driven configuration for your Laravel powered Redis queues. Horizon allows you to easily monitor key metrics of your queue system such as job throughput, runtime, and job failures.

ワーカ設定はすべて一つのシンプルな設定ファイルにまとめられ、チーム全体でコラボ―レートできるソースコントロール下に置くことができます。All of your worker configuration is stored in a single, simple configuration file, allowing your configuration to stay in source control where your entire team can collaborate.

Horizonの詳細は、完全なHorizonドキュメントをご覧ください。For more information on Horizon, check out the full Horizon documentation[/docs/{{version}}/horizon]

パッケージディスカバリーPackage Discovery

videocam この機能の無料動画チュートリアル(英語)がLaracastsに用意されています。{video} There is a free video tutorial[https://laracasts.com/series/whats-new-in-laravel-5-5/episodes/5] for this feature available on Laracasts.

以前のバージョンのLaravelではパッケージのインストールで、app設定ファイルへサービスプロバイダを追加したり、関連のあるファサードを登録したりと、多くの追加のステップが要求されるのが通常でした。しかし、Laravel5.5から、自動的に検出し、サービスプロバイダとファサードを登録します。In previous versions of Laravel, installing a package typically required several additional steps such as adding the service provider to your app configuration file and registering any relevant facades. However, beginning with Laravel 5.5, Laravel can automatically detect and register service providers and facades for you.

たとえば、この機能を試して見るために、人気のbarryvdh/laravel-debugbarパッケージをLaravelアプリケーションにインストールしてみることができます。Composerによりパッケージがインストールされると、余計な設定をせずとも、アプリケーションにデバッグバーが利用できるようになっています。For example, you can experience this by installing the popular barryvdh/laravel-debugbar package into your Laravel application. Once the package is installed via Composer, the debug bar will be available to your application with no additional configuration:

composer require barryvdh/laravel-debugbar

パッケージ開発者は、提供するパッケージのcomposer.jsonファイルへ、サービスプロバイダとファサードを追加する必要があります。Package developers only need to add their service providers and facades to their package's composer.json file:

"extra": {
    "laravel": {
        "providers": [
            "Laravel\\Tinker\\TinkerServiceProvider"
        ]
    }
},

サービスプロバイダとファサードをディスカバリーで使用するための変更の詳細は、パッケージ開発のドキュメントで確認してください。For more information on updating your packages to use service provider and facade discovery, check out the full documentation on package development[/docs/{{version}}/packages].

APIリソースAPI Resources

APIを構築する場合、Eloquentモデルとアプリケーションのユーザーへ実際に返送するJSONレスポンスの間に、変換レイヤーが必要となります。Laravelのリソースクラスで、モデルとモデルコレクションをJSONへ、記述的かつ簡単に変換できます。When building an API, you may need a transformation layer that sits between your Eloquent models and the JSON responses that are actually returned to your application's users. Laravel's resource classes allow you to expressively and easily transform your models and model collections into JSON.

リソースクラスはJSON構造へ変換する必要のある、単一モデルを表します。例として、簡単なUserResourceクラスをご覧ください。A resource class represents a single model that needs to be transformed into a JSON structure. For example, here is a simple UserResource class:

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\Resource;

class UserResource extends Resource
{
    /**
     * リソースを配列へ変換
     *
     * @param  \Illuminate\Http\Request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'name' => $this->name,
            'email' => $this->email,
            'created_at' => $this->created_at,
            'updated_at' => $this->updated_at,
        ];
    }
}

もちろん、これは一番基本的なAPIリソースです。Laravelは、リソースとリソースコレクションを構築する時に役立つ、バラエティ豊かなメソッドを提供しています。詳細は、APIリソースの完全なドキュメントをご覧ください。Of course, this is only the most basic example of an API resource. Laravel also provides a variety of methods to help you when building your resources and resource collections. For more information, check out the full documentation[/docs/{{version}}/eloquent-resources] on API resources.

コンソールコマンドの自動登録Console Command Auto-Registration

videocam この機能の無料動画チュートリアル(英語)がLaracastsに用意されています。{video} There is a free video tutorial[https://laracasts.com/series/whats-new-in-laravel-5-5/episodes/12] for this feature available on Laracasts.

新しいコンソールコマンドを作成する場合、コンソールカーネルの$commandsプロパティへリストする必要はなくなりました。代わりに、新しいloadメソッドがカーネルのcommandsメソッドから呼び出されています。これは、指定したディレクトリでコンソールコマンドを探し、自動的に登録します。When creating new console commands, you no longer are required to manually list them in the $commands property of your Console kernel. Instead, a new load method is called from the commands method of your kernel, which will scan the given directory for any console commands and register them automatically:

/**
 * アプリケーションのコマンド登録
 *
 * @return void
 */
protected function commands()
{
    $this->load(__DIR__.'/Commands');

    // ...
}

新しいフロントエンドプリセットNew Frontend Presets

videocam この機能の無料動画チュートリアル(英語)がLaracastsに用意されています。{video} There is a free video tutorial[https://laracasts.com/series/whats-new-in-laravel-5-5/episodes/4] for this feature available on Laracasts.

基本的なVueスカフォールドもLaravel5.5に含まれたままですが、新しいフロントエンドプリセットの選択肢が利用できるようになりました。真新しいLaravelアプリケーションでpresetコマンドを使用し、VueスカフォールドをReactスカフォールドへ交換できます。While the basic Vue scaffolding is still included in Laravel 5.5, several new frontend preset options are now available. In a fresh Laravel application, you can swap the Vue scaffolding for React scaffolding using the preset command:

php artisan preset react

もしくは、noneプリセットを使用すれば、JavaScriptとCSSフレームワークのスカフォールドを取り除くことができます。このプリセットでは、アプリケーションに空のSassファイルと、シンプルなJavaScriptユーティリティがいくつか残るだけです。Or, you can remove the JavaScript and CSS framework scaffolding entirely using the none preset. This preset will leave your application with a plain Sass file and a few simple JavaScript utilities:

php artisan preset none

Note: note これらのコマンドは、インストールしたてのLaravelアプリケーションで実行する目的で用意されています。既存のアプリケーションでは使用してはいけません。{note} These commands are only intended to be run on fresh Laravel installations. They should not be used on existing applications.

キュージョブのチェーンQueued Job Chaining

ジョブのチェーンにより、順番に実行すべきキュージョブのリストを指定できるようになりました。リスト中のあるジョブが失敗すると、それ以降のジョブは実行されません。ジョブチェーンを実行するには、dispatchableなジョブのwithChainメソッドを使用します。Job chaining allows you to specify a list of queued jobs that should be run in sequence. If one job in the sequence fails, the rest of the jobs will not be run. To execute a queued job chain, you may use the withChain method on any of your dispatchable jobs:

ProvisionServer::withChain([
    new InstallNginx,
    new InstallPhp
])->dispatch();

キュージョブのレート制限Queued Job Rate Limiting

アプリケーションがRedisを扱っている場合、回数や時間によりキュージョブの制限ができるようになりました。この機能は、キュージョブがレート制限のあるAPIを取り扱う場合に便利です。例として、特定のタイプのジョブで、60秒毎に、10回の制限を指定してみましょう。If your application interacts with Redis, you may now throttle your queued jobs by time or concurrency. This feature can be of assistance when your queued jobs are interacting with APIs that are also rate limited. For example, you may throttle a given type of job to only run 10 times every 60 seconds:

Redis::throttle('key')->allow(10)->every(60)->then(function () {
    // ジョブのロジック処理…
}, function () {
    // ロックできなかった場合の処理…

    return $this->release(10);
});

lightbulb">Tip!! 上記の例でkeyは、レート制限したいジョブのタイプを表す、一意の認識文字列です。たとえば、ジョブのクラス名と、(そのジョブに含まれているならば)EloquentモデルのIDを元に、制限できます。{tip} In the example above, the key may be any string that uniquely identifies the type of job you would like to rate limit. For example, you may wish to construct the key based on the class name of the job and the IDs of the Eloquent models it operates on.

もしくは、ジョブを同時に処理するワーカの最大数を指定することができます。これは、一度に一つのジョブが更新すべきリソースを変更するキュージョブを使用する場合に、役立ちます。funnelメソッドの使用例として、一度に1ワーカのみにより処理される、特定のタイプのジョブを制限してみましょう。Alternatively, you may specify the maximum number of workers that may simultaneously process a given job. This can be helpful when a queued job is modifying a resource that should only be modified by one job at a time. For example, we may limit jobs of a given type to only be processed by one worker at a time:

Redis::funnel('key')->limit(1)->then(function () {
    // ジョブのロジック処理…
}, function () {
    // ロックできなかった場合の処理…

    return $this->release(10);
});

時間ベースの試行Time Based Job Attempts

失敗するまでジョブの試行を何度認めるかを定義する代わりに、ジョブのタイムアウト時間を定義することもできます。これにより、指定した時間内で複数回ジョブを試行します。タイムアウト時間を定義するには、ジョブクラスにretryUntilメソッドを追加します。As an alternative to defining how many times a job may be attempted before it fails, you may now define a time at which the job should timeout. This allows a job to be attempted any number of times within a given time frame. To define the time at which a job should timeout, add a retryUntil method to your job class:

/**
 * タイムアウトになる時間を決定
 *
 * @return \DateTime
 */
public function retryUntil()
{
    return now()->addSeconds(5);
}

lightbulb">Tip!! キューイベントリスナでも、retryUntilメソッドを定義できます。{tip} You may also define a retryUntil method on your queued event listeners.

バリデーションルールオブジェクトValidation Rule Objects

videocam この機能の無料動画チュートリアル(英語)がLaracastsに用意されています。{video} There is a free video tutorial[https://laracasts.com/series/whats-new-in-laravel-5-5/episodes/7] for this feature available on Laracasts.

バリデーションルールオブジェクトは、アプリケーションにカスタムルールを追加する、新しい簡単な方法を提供します。以前のバージョンのLaravelでは、クロージャを使用してカスタムバリデーションルールを追加する、Validator::extendが使われていました。しかし、これは改善されました。Laravel5.5では、新しいバリデーションルールをapp/Rulesディレクトリへ生成するために、make:rule Artisan新コマンドを使用します。Validation rule objects provide a new, compact way of adding custom validation rules to your application. In previous versions of Laravel, the Validator::extend method was used to add custom validation rules via Closures. However, this can grow cumbersome. In Laravel 5.5, a new make:rule Artisan command will generate a new validation rule in the app/Rules directory:

php artisan make:rule ValidName

ルールオブジェクトは2つのメソッドを含みます。passesmessageです。passesメソッドは属性の値と名前を受け取り、その属性値が有効であればtrue、無効であればfalseを返します。messageメソッドは、バリデーション失敗時に使用する、バリデーションエラーメッセージを返します。A rule object only has two methods: passes and message. The passes method receives the attribute value and name, and should return true or false depending on whether the attribute value is valid or not. The message method should return the validation error message that should be used when validation fails:

<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class ValidName implements Rule
{
    /**
     * バリデーションの成功を判定
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        return strlen($value) === 6;
    }

    /**
     * バリデーションエラーメッセージの取得
     *
     * @return string
     */
    public function message()
    {
        return 'The name must be six characters long.';
    }
}

ルールが定義できたら、他のバリデーションルールと一緒に、ルールオブジェクトのインスタンスをバリデータへ渡し、指定します。Once the rule has been defined, you may use it by passing an instance of the rule object with your other validation rules:

use App\Rules\ValidName;

$request->validate([
    'name' => ['required', new ValidName],
]);

信用するプロキシの統合Trusted Proxy Integration

TLS/SSL証明を行うロードバランサの裏でアプリケーションが実行されている場合、アプリケーションが時々HTTPSリンクを生成しないことに、気づくでしょう。典型的な理由は、トラフィックがロードバランサにより80番ポートへフォワーディングされるため、セキュアなリンクを生成すべきだと判断できないからです。When running applications behind a load balancer that terminates TLS / SSL certificates, you may notice your application sometimes does not generate HTTPS links. Typically this is because your application is being forwarded traffic from your load balancer on port 80 and does not know it should generate secure links.

これを解決するために多くのLaravelユーザーはChris Fidaoさんが作成した、Trusted Proxiesパッケージをインストールしています。これはコモンケースですから、Laravel5.5ではデフォルトとしてChrisのパッケージを利用しています。To solve this, many Laravel users install the Trusted Proxies[https://github.com/fideloper/TrustedProxy] package by Chris Fidao. Since this is such a common use case, Chris' package now ships with Laravel 5.5 by default.

Laravel5.5では、新しいApp\Http\Middleware\TrustProxiesミドルウェアがデフォルトとして含まれています。このミドルウェアにより、アプリケーションが信用するプロキシを素早くカスタマイズできます。A new App\Http\Middleware\TrustProxies middleware is included in the default Laravel 5.5 application. This middleware allows you to quickly customize the proxies that should be trusted by your application:

<?php

namespace App\Http\Middleware;

use Illuminate\Http\Request;
use Fideloper\Proxy\TrustProxies as Middleware;

class TrustProxies extends Middleware
{
    /**
     * このアプリケーションで信用するプロキシ
     *
     * @var array
     */
    protected $proxies;

    /**
     * 現在のプロキシヘッダのマップ
     *
     * @var array
     */
    protected $headers = [
        Request::HEADER_FORWARDED => 'FORWARDED',
        Request::HEADER_X_FORWARDED_FOR => 'X_FORWARDED_FOR',
        Request::HEADER_X_FORWARDED_HOST => 'X_FORWARDED_HOST',
        Request::HEADER_X_FORWARDED_PORT => 'X_FORWARDED_PORT',
        Request::HEADER_X_FORWARDED_PROTO => 'X_FORWARDED_PROTO',
    ];
}

オンデマンド通知On-Demand Notifications

場合により、アプリケーションの「ユーザー」として保存されていない誰かに対し、通知を送る必要が起きることがあります。Notification::routeメソッドを使い、通知を送る前にアドホックな通知ルーティング情報を指定できます。Sometimes you may need to send a notification to someone who is not stored as a "user" of your application. Using the new Notification::route method, you may specify ad-hoc notification routing information before sending the notification:

Notification::route('mail', 'taylor@laravel.com')
            ->route('nexmo', '5555555555')
            ->send(new InvoicePaid($invoice));

RenderableなmailableRenderable Mailables

videocam この機能の無料動画チュートリアル(英語)がLaracastsに用意されています。{video} There is a free video tutorial[https://laracasts.com/series/whats-new-in-laravel-5-5/episodes/6] for this feature available on Laracasts.

mailableは、ルートから直接返せるようになり、ブラウザでmailableのデザインを素早くレビューできるようになりました。Mailables can now be returned directly from routes, allowing you to quickly preview your mailable's designs in the browser:

Route::get('/mailable', function () {
    $invoice = App\Invoice::find(1);

    return new App\Mail\InvoicePaid($invoice);
});

Reportable/Renderable例外Renderable & Reportable Exceptions

videocam この機能の無料動画チュートリアル(英語)がLaracastsに用意されています。{video} There is a free video tutorial[https://laracasts.com/series/whats-new-in-laravel-5-5/episodes/18] for this feature available on Laracasts.

以前のバージョンのLaravelでは、特定の例外に対するカスタムレスポンスをレンダするために、例外ハンドラで「タイプチェック」を使っていました。たとえば、以下のようなコードを例外ハンドラのrenderメソッドに書いていたと思います。In previous versions of Laravel, you may have had to resort to "type checking" in your exception handler in order to render a custom response for a given exception. For instance, you may have written code like this in your exception handler's render method:

/**
 * 例外をHTTPレスポンスへレンダ
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Exception  $exception
 * @return \Illuminate\Http\Response
 */
public function render($request, Exception $exception)
{
    if ($exception instanceof SpecialException) {
        return response(...);
    }

    return parent::render($request, $exception);
}

Laravel5.5では、renderメソッドを直接自分の例外で定義できます。これにより、例外に直接レスポンスのレンダロジックを置けるようになり、例外ハンドラに条件判定のロジックが積み重なるのを防ぐことができます。例外のレポートもカスタマイズしたい場合は、クラスにreportメソッドを定義してください。In Laravel 5.5, you may now define a render method directly on your exceptions. This allows you to place the custom response rendering logic directly on the exception, which helps avoid conditional logic accumulation in your exception handler. If you would like to also customize the reporting logic for the exception, you may define a report method on the class:

<?php

namespace App\Exceptions;

use Exception;

class SpecialException extends Exception
{
    /**
     * 例外のレポート
     *
     * @return void
     */
    public function report()
    {
        //
    }

    /**
     * 例外のレンダ
     *
     * @param  \Illuminate\Http\Request
     * @return void
     */
    public function render($request)
    {
        return response(...);
    }
}

リクエストのバリデーションRequest Validation

videocam この機能の無料動画チュートリアル(英語)がLaracastsに用意されています。{video} There is a free video tutorial[https://laracasts.com/series/whats-new-in-laravel-5-5/episodes/2] for this feature available on Laracasts.

Illuminate\Http\Requestオブジェクトが、validateメソッドを提供するようになり、ルートクロージャやコントローラで送信されてきたリクエストを素早くバリデートできます。The Illuminate\Http\Request object now provides a validate method, allowing you to quickly validate an incoming request from a route Closure or controller:

use Illuminate\Http\Request;

Route::get('/comment', function (Request $request) {
    $request->validate([
        'title' => 'required|string',
        'body' => 'required|string',
    ]);

    // ...
});

一貫性のある例外処理Consistent Exception Handling

フレームワーク全体を通し、バリデーション例外の処理が統一されました。以前は、JSONバリデーションエラーレスポンスのデフォルトフォーマットを変更するには、フレームワークの複数の箇所をカスタマイズする必要がありました。Laravel5.5では、JSONバリデーションレスポンスのデフォルト形式は、以下の規約にしたがっています。Validation exception handling is now consistent throughout the framework. Previously, there were multiple locations in the framework that required customization to change the default format for JSON validation error responses. In addition, the default format for JSON validation responses in Laravel 5.5 now adheres to the following convention:

{
    "message": "The given data was invalid.",
    "errors": {
        "field-1": [
            "Error 1",
            "Error 2"
        ],
        "field-2": [
            "Error 1",
            "Error 2"
        ],
    }
}

すべてのJSONバリデーションエラーフォーマットは、App\Exceptions\Handlerクラスの一つのメソッドで定義されています。以下のカスタマイズ例は、Laravel5.4の規約を使用する、JSONバリデーションレスポンスをフォーマットしています。All JSON validation error formatting can be controlled by defining a single method on your App\Exceptions\Handler class. For example, the following customization will format JSON validation responses using the Laravel 5.4 convention.

use Illuminate\Validation\ValidationException;

/**
 * バリデーション例外をJSONレスポンスへ変換
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Illuminate\Validation\ValidationException  $exception
 * @return \Illuminate\Http\JsonResponse
 */
protected function invalidJson($request, ValidationException $exception)
{
    return response()->json($exception->errors(), $exception->status);
}

キャッシュロックCache Locks

キャッシュドライバは、アトミックな「ロック」の取得と開放をサポートするようになりました。これにより、競合状態を心配せずに、自由にロックを取得できるシンプルな手段が提供されました。たとえば、既に処理中の同じタスクを実行するのを防ぐため、実行を試みる前にロックを取得できます。The Redis and Memcached cache drivers now have support for obtaining and releasing atomic "locks". This provides a simple method of obtaining arbitrary locks without worrying about race conditions. For example, before performing a task, you may wish to obtain a lock so no other processes attempt the same task that is already in progress:

if (Cache::lock('lock-name', 60)->get()) {
    // 60秒ロックを取得し、処理を継続…

    Cache::lock('lock-name')->release();
} else {
    // ロックを取得できなかった
}

もしくは、getメソッドでクロージャを渡せます。このクロージャはロックが取得された場合のみ実行され、クロージャが終了すると自動的に開放します。Or, you may pass a Closure to the get method. The Closure will only be executed if the lock can be obtained and the lock will automatically be released after the Closure is executed:

Cache::lock('lock-name', 60)->get(function () {
    // 60秒ロックを取得
});

さらに、ロックできるようになるまで、「ブロック」することもできます。In addition, you may "block" until the lock becomes available:

if (Cache::lock('lock-name', 60)->block(10)) {
    // ロックが利用できるようになるまで、最長で10秒待つ
}

Bladeの向上Blade Improvements

videocam この機能の無料動画チュートリアル(英語)がLaracastsに用意されています。{video} There is a free video tutorial[https://laracasts.com/series/whats-new-in-laravel-5-5/episodes/10] for this feature available on Laracasts.

シンプルなカスタム条件文を定義する時、必要以上にカスタムディレクティブのプログラミングが複雑になってしまうことが、時々起きます。そのため、Bladeはクロージャを使用し、カスタム条件ディレクティブを素早く定義できるように、Blade::ifメソッドを提供しています。例として、現在のアプリケーション環境をチェックするカスタム条件を定義してみましょう。AppServiceProviderbootメソッドで行います。Programming a custom directive is sometimes more complex than necessary when defining simple, custom conditional statements. For that reason, Blade now provides a Blade::if method which allows you to quickly define custom conditional directives using Closures. For example, let's define a custom conditional that checks the current application environment. We may do this in the boot method of our AppServiceProvider:

use Illuminate\Support\Facades\Blade;

/**
 * サービスの初期処理後に実行
 *
 * @return void
 */
public function boot()
{
    Blade::if('env', function ($environment) {
        return app()->environment($environment);
    });
}

カスタム条件を定義したら、テンプレートの中で簡単に利用できます。Once the custom conditional has been defined, we can easily use it on our templates:

@env('local')
    // アプリケーションはlocal環境
@else
    // アプリケーションはlocal環境ではない
@endenv

Bladeのカスタム条件ディレクティブを簡単に定義できる機能に付け加え、現在のユーザーの認証状態を素早くチェックできる、新しいショートカット記法も追加されました。In addition to the ability to easily define custom Blade conditional directives, new shortcuts have been added to quickly check the authentication status of the current user:

@auth
    // ユーザーは認証済み
@endauth

@guest
    // ユーザーは未認証
@endguest

新しいルーティングメソッドNew Routing Methods

videocam この機能の無料動画チュートリアル(英語)がLaracastsに用意されています。{video} There is a free video tutorial[https://laracasts.com/series/whats-new-in-laravel-5-5/episodes/16] for this feature available on Laracasts.

他のURIへリダイレクトするルートを定義する場合は、Route::redirectメソッドを使用します。このメソッドは便利な短縮形を提供しているので、単純なリダイレクトを実行するために、完全なルートやコントローラを定義する必要はありません。If you are defining a route that redirects to another URI, you may now use the Route::redirect method. This method provides a convenient shortcut so that you do not have to define a full route or controller for performing a simple redirect:

Route::redirect('/here', '/there', 301);

ルートからビューを返すだけの場合は、Route::viewメソッドを使用します。redirectメソッドと同様に、このメソッドはシンプルな短縮形を提供しており、完全なルートやコントローラを定義する必要はありません。viewメソッドは、最初の引数にURIを取り、ビュー名は第2引数です。更に、オプションの第3引数として、ビューへ渡すデータの配列を指定することもできます。If your route only needs to return a view, you may now use the Route::view method. Like the redirect method, this method provides a simple shortcut so that you do not have to define a full route or controller. The view method accepts a URI as its first argument and a view name as its second argument. In addition, you may provide an array of data to pass to the view as an optional third argument:

Route::view('/welcome', 'welcome');

Route::view('/welcome', 'welcome', ['name' => 'Taylor']);

"Sticky"データベース接続"Sticky" Database Connections

stickyオプションThe sticky Option

read/writeデータベース接続を設定する場合に、新しいsticky設定オプションが使えるようになりました。When configuring read / write database connections, a new sticky configuration option is available:

'mysql' => [
    'read' => [
        'host' => '192.168.1.1',
    ],
    'write' => [
        'host' => '196.168.1.2'
    ],
    'sticky'    => true,
    'driver'    => 'mysql',
    'database'  => 'database',
    'username'  => 'root',
    'password'  => '',
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix'    => '',
],

stickyオプションはオプショナル値で、現在のリクエストサイクル中にデータベースへ書き込まれたレコードを即時に読み込めるようにします。stickyオプションが有効で、現在のリクエストサイクル中にデータベースに対して「書き込み(write)」処理が実行されると、すべての「読み込み(read)」操作で"write"接続が使われるようになります。これによりリクエストサイクル中に書き込まれたデータが、同じリクエスト中にデータベースから即時に読み込まれることが確実になります。この振る舞いが皆さんのアプリケーションで好ましいかは、皆さんが判断してください。The sticky option is an optional value that can be used to allow the immediate reading of records that have been written to the database during the current request cycle. If the sticky option is enabled and a "write" operation has been performed against the database during the current request cycle, any further "read" operations will use the "write" connection. This ensures that any data written during the request cycle can be immediately read back from the database during that same request. It is up to you to decide if this is the desired behavior for your application.

章選択

公式パッケージ

設定

明暗テーマ
light_mode
dark_mode
brightness_auto システム設定に合わせる
テーマ選択
photo_size_select_actual デフォルト
photo_size_select_actual モノクローム(白黒)
photo_size_select_actual Solarized風
photo_size_select_actual GitHub風(青ベース)
photo_size_select_actual Viva(黄緑ベース)
photo_size_select_actual Happy(紫ベース)
photo_size_select_actual Mint(緑ベース)
コードハイライトテーマ選択

明暗テーマごとに、コードハイライトのテーマを指定できます。

テーマ配色確認
スクリーン表示幅
640px
80%
90%
100%

768px以上の幅があるときのドキュメント部分表示幅です。

インデント
無し
1rem
2rem
3rem
原文確認
原文を全行表示
原文を一行ずつ表示
使用しない

※ 段落末のEボタンへカーソルオンで原文をPopupします。

Diff表示形式
色分けのみで区別
行頭の±で区別
削除線と追記で区別

※ [tl!…]形式の挿入削除行の表示形式です。

テストコード表示
両コード表示
Pestのみ表示
PHPUnitのみ表示
和文変換

対象文字列と置換文字列を半角スペースで区切ってください。(最大5組各10文字まで)

本文フォント

総称名以外はCSSと同様に、"〜"でエスケープしてください。

コードフォント

総称名以外はCSSと同様に、"〜"でエスケープしてください。

保存内容リセット

localStrageに保存してある設定項目をすべて削除し、デフォルト状態へ戻します。

ヘッダー項目移動

キーボード操作