Laravel 5.4 リリースノート

バージョニング規約

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

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

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

Laravelはなぜセマンティックバージョニングを使わないのか

Laravelのコンポーネント(Cashier、Dusk、Valet、Socialiteなど)では、セマンティックバージョニングが使われています。しかし、Laravelフレームワーク自体には、使用していません。なぜなら、セマンティックバージョニングは、2つのコード部分がコンパチブルであるかを「還元論」的に決める方法だからです。たとえ、セマンティックバージョニングを採用していても、皆さんはアップグレードパッケージをインストールし、自動化したテストスーツを実行することにより、自分のコードベースでもコンパチブルであるかを実際に確認する必要があります。

そのため、Laravelフレームワークでは、実際のリリース期間をより良く表すバージョニング方法を採用しています。さらに、パッチリリースは決して内部のブレーキングチェンジを含まないわけですから、「パラダイム.マイナー.*」記法でバージョンを指定している限り、ブレーキングチェンジを受けることはありません。

サポートポリシー

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

Laravel 5.4.22

Laravel 5.4.22は、一連のLaravel5.4リリースを使ったアプリケーションのユーザーに対し、フィッシングを可能にしているセキュリティ脆弱性に対応するパッチです。パスワードリセットシステムを使用し、悪意のあるユーザーがユーザーに対し、彼らのコントロールする別のアプリケーションへログイン情報を入力させる罠を仕掛けることを可能になっています。パスワードリセット通知は、受診したリクエストのホストを使い、パスワードリセットURLを組み立てており、パスワードリセットURLのホストは偽装可能です。もし、ユーザーが目的としているアプリケーションのドメインと異なることに気が付かなければ、悪意のあるアプリケーションへログイン情報を入力してしまうでしょう。

Laravel5.1アプリケーションのパスワードリセット通知は開発者によりメンテナンスされているため、この脆弱性があるかもしれませんし、ないかもしれません。アプリケーションが生成するパスワードリセットリンクの絶対URLを確認してください。

{{ url('http://example.com/password/reset/'.$token) }}

Laravel 5.4

Laravel5.4は5.3に引き続き、機能の向上させています。Markdownベースのメールと通知や、ブラウザ自動操作とテストフレームワークの Laravel Dusk、Laravel Mix、Blade「コンポーネント」と「スロット」、ブロードキャストチャンネルに対するルートモデル結合、コレクションのhigher order messages、オブジェクトベースのEloquentイベント、ジョブレベルの「再試行」と「タイムアウト」の指定、「リアルタイム」ファサード、Redisクラスターサポートの向上、カスタム中間テーブルモデル、リクエスト入力のトリミングとクリーニングのためのミドルウェアなどです。更に付け加え、フレームワークのコードベース全体は、全般的な美しさのためにレビューされ、リファクタされています。

Tip!! このドキュメントはフレームワークの一番目立つ向上点をまとめたドキュメントです。より全体的な変更のログは、いつでもGitHub上で参照可能です。

Markdownメールと通知

Laracastsにこの機能についての、無料ビデオチュートリアルが用意されています。

Markdown mailableメッセージにより、事前に構築したテンプレートとメール通知のコンポーネントの利点をMailable中で利用できます。メッセージをMarkdownで記述すると、Laravelは美しいレスポンシブHTMLテンプレートをレンダーすると同時に、自動的に平文テキスト版も生成します。以下は、Markdownメールがどのような見た目であるかの例です。

@component('mail::message')

# Order Shipped

Your order has been shipped!

@component('mail::button', ['url' => $url])
View Order
@endcomponent

Next Steps:

- Track Your Order On Our Website
- Pre-Sign For Delivery

Thanks,<br>
{{ config('app.name') }}
@endcomponent

このシンプルなMarkdownテンプレートを使えば、LaravelはレスポンシブHTMLメールと、プレーンテキスト版を生成します。

Markdownメールと通知については、完全なメール通知のドキュメントをご覧ください。

Tip!! カスタマイズのためにアプリケーションへ全Markdownメールコンポーネントをエクスポートできます。エクスポートするには、vendor:publish Artisanコマンドへlaravel-mailでアセットタグを指定し公開してください。

Laravel Dusk

Laracastsにこの機能についての、無料 video tutorialが用意されています。

Laravel Duskは、利用が簡単なブラウザの自動操作/テストAPIを提供します。デフォルトのDuskは皆さんのマシンへ、JDKやSeleniumのインストールを求めません。代わりにDuskはスタンドアローンのChromeDriverを使用します。しかし、望みのSeleniumコンパチドライバを自由に使用することもできます。

Duskは本当のブラウザを使用しますので、JavaScriptをたくさん使うアプリケーションでも簡単に操作し、テストできます。

/**
 * 基本的なブラウザテスト例
 *
 * @return void
 */
public function testBasicExample()
{
    $user = factory(User::class)->create([
        'email' => 'taylor@laravel.com',
    ]);

    $this->browse(function ($browser) use ($user) {
        $browser->loginAs($user)
                ->visit('/home')
                ->press('Create Playlist')
                ->whenAvailable('.playlist-modal', function ($modal) {
                    $modal->type('name', 'My Playlist')
                          ->press('Create');
                });

        $browser->waitForText('Playlist Created');
    });
}

Duskの詳細な情報は、完全なDuskドキュメントをご覧ください。

Laravel Mix

Laracastsにこの機能についての、無料 video tutorialが用意されています。

Laravel MixはLaravel Elixirの精神を受け継ぎ、Gulpの代わりに、全体をWebpackベースにしたものです。はLaravel Mixは多くの一般的なCSSとJavaScriptのプリプロセッサを使用し、Laravelアプリケーションために、構築過程をWebpackでスラスラと定義できるAPIを提供しています。シンプルなメソッドチェーンを使用しているため、アセットパイプラインを流暢に定義できます。例を見てください。

mix.js('resources/assets/js/app.js', 'public/js')
   .sass('resources/assets/sass/app.scss', 'public/css');

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

Laracastsにこの機能についての、無料 video tutorialが用意されています。

Bladeコンポーネントとスロットは、セクションとレイアウトと似た利便を提供します。しかし、コンポーネントとスロットのメンタルモデルのほうが簡単に理解できることに気づくはずです。最初に、アプリケーション全体で再利用する、"alert"コンポーネントをイメージしてください。

<!-- /resources/views/alert.blade.php -->

<div class="alert alert-danger">
    {{ $slot }}
</div>

{{ $slot }}変数は、このコンポーネントへ注入しようとする内容を含んでいます。では、このコンポーネントを構築するため、@component Bladeディレクティブを使いましょう。

@component('alert')
    <strong>Whoops!</strong> Something went wrong!
@endcomponent

名前付きスロットにより、一つのコンポーネント中に複数のスロットを利用できます。

<!-- /resources/views/alert.blade.php -->

<div class="alert alert-danger">
    <div class="alert-title">{{ $title }}</div>

    {{ $slot }}
</div>

名前付きのスロットを挿入するには、@slotディレクティブを使用します。@slotディレクティブ外の全コンテンツは、$slot変数中のコンポーネントへ渡されます。

@component('alert')
    @slot('title')
        Forbidden
    @endslot

    You are not allowed to access this resource!
@endcomponent

コンポーネントとスロットに関する情報は、Bladeドキュメントをご覧ください。

Broadcastモデル結合

HTTPルートと同様にチャンネルルートでも、暗黙あるいは明白なルートモデル結合を利用できます。たとえば、文字列や数値の注文IDを受け取る代わりに、実際のOrderモデルインスタンスを要求できます。

use App\Order;

Broadcast::channel('order.{order}', function ($user, Order $order) {
    return $user->id === $order->user_id;
});

ブロードキャストモデル結合の詳細は、イベントブロードキャストドキュメントをご覧ください。

コレクションHigher Order Messages

Laracastsにこの機能についての、無料 video tutorialが用意されています。

コレクションで繁用するアクションを手短に実行するために、"higher order messages"をサポートしました。containseacheveryfilterfirstmappartitionrejectsortBysortByDescsumコレクションメソッドでhigher order messageが使用できます。

各higher order messageへは、コレクションインスタンスの動的プロパティとしてアクセスできます。例として、コレクション内の各オブジェクトのメソッドを呼び出す、each higher order messageを使ってみましょう。

$users = User::where('votes', '>', 500)->get();

$users->each->markAsVip();

同様に、ユーザーのコレクションに対し、「投票(votes)」の合計数を求めるために、sum higher order messageを使用できます。

$users = User::where('group', 'Development')->get();

return $users->sum->votes;

オブジェクトベースEloquentイベント

Laracastsにこの機能についての、無料 video tutorialが用意されています。

Eloquentのイベントハンドラはイベントオブジェクトにマップされました。これにより、直感的な方法でEloquentイベントを処理でき、イベントのテストも簡単になりました。使用開始するには、Eloquentモデルの様々なライフサイクルポイントを皆さん自身のイベントクラスへマップするための$eventsプロパティを定義してください。

<?php

namespace App;

use App\Events\UserSaved;
use App\Events\UserDeleted;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * モデルのイベントマップ
     *
     * @var array
     */
    protected $events = [
        'saved' => UserSaved::class,
        'deleted' => UserDeleted::class,
    ];
}

ジョブレベル再試行/タイムアウト

以前のキュージョブでは、コマンドラインで全ジョブに対してグローバルに「再試行」と「タイムアウト」をせってしていました。しかし、Laravel5.4では、各ジョブごとにジョブクラス上で直接定義できるようになりました。

<?php

namespace App\Jobs;

class ProcessPodcast implements ShouldQueue
{
    /**
     * ジョブの最大試行回数
     *
     * @var int
     */
    public $tries = 5;

    /**
     * ジョブタイムアウトまでの秒数
     *
     * @var int
     */
    public $timeout = 120;
}

これらの設定についての情報は、キュードキュメントをご覧ください。

リクエストサニタライズミドルウェア

Laracastsにこの機能についての、無料 video tutorialが用意されています。

Laravel5.4に新しいデフォルトミドルウェアとして、TrimStringsConvertEmptyStringsToNullが追加されました。

/**
 * アプリケーションのグローバルHTTPミドルウェアスタック
 *
 * これらのミドルウェアはアプリケーションへのリクエスト全てで実行される。
 *
 * @var array
 */
protected $middleware = [
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
    \App\Http\Middleware\TrimStrings::class,
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];

これらのミドルウェアは自動的にリクエスト入力値をトリムし、空文字列をnullへ変換します。これによりアプリケーションに入ってくる全リクエストの入力をノーマライズできるようになり、全ルートとコントローラでtrim関数を呼び出し続けることを心配せずに済みます。

「リアルタイム」ファサード

Laracastsにこの機能についての、無料 video tutorialが用意されています。

以前のLaravelには、サービスコンテナにより自身の組み込みサービスのメソッドへ、素早く簡単にアクセスできるファサードが提供されていました。しかし、Laravel5.4ではimportのクラス名にFacadesをプレフィックスとして付けることにより、アプリケーションのどんなクラスでも簡単にファサードへリアルタイムに変換できるようになりました。例として、アプリケーションに以下のようなクラスが含まれていると考えてください。

<?php

namespace App\Services;

class PaymentGateway
{
    protected $tax;

    /**
     * 新しい支払いゲートウェイインスタンスの生成
     *
     * @param  TaxCalculator  $tax
     * @return void
     */
    public function __construct(TaxCalculator $tax)
    {
        $this->tax = $tax;
    }

    /**
     * 指定金額の支払い
     *
     * @param  int  $amount
     * @return void
     */
    public function pay($amount)
    {
        // 金額の支払い処理…
    }
}

このクラスをファサードして簡単に使用できます。

use Facades\ {
    App\Services\PaymentGateway
};

Route::get('/pay/{amount}', function ($amount) {
    PaymentGateway::pay($amount);
});

もちろん、このようにリアルタイムファサードの利点を活用しても、Laravelのファサードモック機能を利用し簡単にテストを書くことができます。

PaymentGateway::shouldReceive('pay')->with('100');

カスタム中間テーブルモデル

Laravel5.3では、belongsToManyリレーションの「中間」テーブルモデルは、同じ組み込み済みのPivotモデルインスタンスでした。Laravel5.4では、中間テーブルにカスタムモデルを定義できるようになりました。リレーションの中間テーブルを表すカスタムモデルを定義したい場合は、リレーションの定義でusingメソッドを使用してください。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Role extends Model
{
    /**
     * 役割に所属するユーザー
     */
    public function users()
    {
        return $this->belongsToMany('App\User')->using('App\UserRole');
    }
}

Redisクラスタサポートの向上

以前は同じアプリケーションでシングルホストへのRedis接続と、クラスタへの接続を定義できませんでした。Lravel5.4では、同じアプリケーションで、複数のシングルホストと複数クラスタに対するRedis接続を定義できるようになりました。LaravelにおけるRedisについての情報は、Redisドキュメントをご覧ください。

マイグレーションデフォルト文字列長

Laravel5.4はデータベース中への「絵文字」保存をサポートするため、デフォルトでutf8mb4文字セットを使っています。アプリケーションをLaravel5.3からアップグレードする場合は、この文字列セットへ切り替える必要はありません。

この文字セットへ手動で切り替えるとき、バージョン5.7.7より古いMySQLが動作している場合は、マイグレーションで生成されるデフォルト文字列長を手動で設定する必要があります。設定するには、AppServiceProviderの中で、Schema::defaultStringLengthメソッドを呼び出してください。

use Illuminate\Support\Facades\Schema;

/**
 * アプリケーションの全サービスの初期処理
 *
 * @return void
 */
public function boot()
{
    Schema::defaultStringLength(191);
}

Laravel 5.3

Laravel5.2で施された改善に引き続き、5.3では以降の新機能/改善が行われました。ドライバベースの通知システムLaravel Echoによる堅牢なリアルタイムのサポート、Laravel Passportによる苦労知らずのOAuth2サーバ、Laravel Scoutによるフルテキストモデル検索、Laravel ElixirによるWebpackのサポート、"Mailable"オブジェクトの導入、webapiルートの明確な分離、クロージャベースコンソールコマンド、アップロードファイル保存の便利なヘルパ、POPOでシングルアクションのコントローラのサポート、デフォルトフロントエンドスカフォールドの改善などです。

通知

Laracastsでこの機能の無料ビデオチュートリアルがご覧いただけます。

Laravelの通知は、メール、Slack、SMSなどの様々な配信チャンネル庭たり、通知を送信するためのシンプルで記述的なAPIを提供します。たとえば、課金された通知を定義し、メールとSMSにより、その通知を配信できます。簡単なメソッド一つで、通知が送信できます。

$user->notify(new InvoicePaid($invoice));

既にコミュニティにより書かれた通知ドライバが、数多く、幅広く用意されています。その中には、iOSやAndroid通知のサポートも含まれています。通知についての詳細を学ぶには、通知のドキュメントをお読みください。

WebSocket/イベントブロードキャスト

Laravelの以前のバージョンにも、イベントブロードキャストはありました。Laravel5.3では、プライベート配信のためのチャンネルレベルの認証と、WebSocketプレゼンスチャンネルが追加され、これによりフレームワークのこの機能は大幅に向上しました。

/*
 * チャンネルサブスクリプションの認証
 */
Broadcast::channel('orders.*', function ($user, $orderId) {
    return $user->placedOrder($orderId);
});

NPMによりインストールできる新しいJavaScriptパッケージであるLaravel Echoは、クライアントサイドのJavaScriptアプリケーションの中でチャンネルを購読し、サーバサイドイベントをリッスンするための、簡単で美しいAPIを提供するためにリリースされました。EchoはPusherSocket.ioもサポートしています。

Echo.channel('orders.' + orderId)
    .listen('ShippingStatusUpdated', (e) => {
        console.log(e.description);
    });

伝統的なチャンネルを行動くすることに付け加え、Laravel Echoは指定したチャンネルへ誰がリッスンしているかの情報を提供する、プレゼンスチャンネルの購入も簡単にできます。

Echo.join('chat.' + roomId)
    .here((users) => {
        //
    })
    .joining((user) => {
        console.log(user.name);
    })
    .leaving((user) => {
        console.log(user.name);
    });

Echoとイベントブロードキャストの詳細は、ドキュメントで確認してください。

Laravel Passport(OAuth2サーバ)

Laracastsでこの機能の無料ビデオチュートリアルがご覧いただけます。

Laravelアプリケーションのためにすぐに用意できる、完全なOAuth2サーバの実装であるLaravel Passportを使うことにより、Laravel5.3でのAPI認証はとても簡単です。Passportは、Alex Bilbie氏によりメンテナンスされている、League OAuth2 server上に構築されています。

PassportはOAuth2認証コードによるアクセストークンの発行を苦労なしにしてくれます。皆さんのユーザーに対し「パーソナルアクセストークン」をWeb UIから作成することもできます。素早く開始できるように、クライアント作成、アクセストークンの発行などをユーザーに行ってもらう、OAuth2ダッシュボードの出発地点として役立てることができる、VueコンポーネントもPassportは用意しています。

<passport-clients></passport-clients>
<passport-authorized-clients></passport-authorized-clients>
<passport-personal-access-tokens></passport-personal-access-tokens>

Vueコンポーネントを使用したくない場合は、クライアントとアクセストークンを管理するフロントエンドダッシュボードを作成することもできます。PassportはシンプルなJSON APIを提供していますので、どんなJavaScriptフレームワークを選んでも使用できます。

もちろん、アプリケーションのAPI利用者がリクエストするアクセストークンスコープの定義も、Passportでは簡単です。

Passport::tokensCan([
    'place-orders' => 'Place new orders',
    'check-status' => 'Check order status',
]);

さらに、Passportは認証済みのアクセストークンが必要なトークンスコープを含んでいるかを確認するための、便利なミドルウェアも用意しています。

Route::get('/orders/{order}/status', function (Order $order) {
    // アクセストークンは、"check-status"スコープを持っている
})->middleware('scope:check-status');

最後に、Passportではアクセストークンを渡す手間を取らなくても、JavaScriptアプリケーションから皆さん自身のAPIを使ってもらうサポートもしています。Passportは皆さんがアプリケーションの重要点に集中できるように、暗号化済みJWTクッキーと同期済みCSRFトークンを用い、これを実現しています。Passportの詳細は、ドキュメントで確認してください。

検索(Laravel Scout)

Laravel ScoutはEloquentモデルへフルテキスト検索機能を追加するための、シンプルなドライバベースのソルーションを提供します。モデルオブザーバを使い、Scoutは自動的にサーチインデックスとEloquentレコードの同期を保ちます。現在、ScoutはAlgoliaドライバを用意していますが、シンプルなカスタムドライバをプログラムし、自由に独自の検索実装でScoutを拡張できます。

モデルを検索可能にするには、モデルにSearchableトレイトをただ追加するだけです。

<?php

namespace App;

use Laravel\Scout\Searchable;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    use Searchable;
}

トレイトをモデルへ追加したら、その情報はモデルを保存するごとに、検索インデックスと同期されます。

$order = new Order;

// ...

$order->save();

モデルがインデックスされると、全モデルに対するフルテキスト検索の実行は簡単です。検索結果をページ付けもできます。

return Order::search('Star Trek')->get();

return Order::search('Star Trek')->where('user_id', 1)->paginate();

もちろん、Scoutはもっと機能を持っており、ドキュメントで説明しています。

Mailableオブジェクト

Laracastsでこの機能の無料ビデオチュートリアルがご覧いただけます。

Laravel5.3はMailableオブジェクトをサポートしています。このオブジェクトは、クロージャーの中でメールメッセージをカスタマイズする代わりに、シンプルなオブジェクトとしてメールメッセージを表現できるようにしてくれます。例として、"Welcome"メールのために、シンプルなMailableオブジェクトを定義してみましょう。

class WelcomeMessage extends Mailable
{
    use Queueable, SerializesModels;

    /**
     * メッセージの構築
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('emails.welcome');
    }
}

Mailableオブジェクトを定義できたら、シンプルで記述的なAPIを使用し、ユーザーへ送ることができます。Mailableオブジェクトはコードを読み解く時に、メッセージの意図を見つけやすくしてくれます。

Mail::to($user)->send(new WelcomeMessage);

もちろん、Mailableオブジェクトをキューワーカによりバックグランドで送信できるように、「キュー投入可能」としてマーク付けできます。

class WelcomeMessage extends Mailable implements ShouldQueue
{
    //
}

Mailableオブジェクトの情報は、メールのドキュメントで確認してください。

アップロードファイルの保存

Laracastsでこの機能の無料ビデオチュートリアルがご覧いただけます。

Webアプリケーションにおいてファイル保存の最も一般的なユースケースは、プロファイルや写真、ドキュメントなど、ユーザーがアップロードしたファイルを保存する場合です。Laravel5.3では、アップロードファイルインスタンスに対しstoreメソッドを使用すれば、アップロード済みファイルを簡単に保存できます。アップロードファイルを保存したいパスを引数に、ただstoreメソッドを呼び出してください。

/**
 * ユーザーのアバター更新
 *
 * @param  Request  $request
 * @return Response
 */
public function update(Request $request)
{
    $path = $request->file('avatar')->store('avatars', 's3');

    return $path;
}

アップロード済みファイルの保存についての情報は、ドキュメントをお読みください。

WebpackとLaravel Elixir

Laravel5.3と同時に、WebpackとRollup JavaScript モジュールバンドラのサポートを伴い、Laravel Elixir 6.0がリリースされました。デフォルトでLaravel5.3のgulpfile.jsファイルは、WebpackをJavaScriptをコンパイルするために使用します。Laravel Elixirのドキュメントには、両バンドラに対するより多くの情報が用意されています。

elixir(mix => {
    mix.sass('app.scss')
       .webpack('app.js');
});

フロントエンド構造

Laracastsでこの機能の無料ビデオチュートリアルがご覧いただけます。

Laravel5.3はよりモダンなフロントエンド構造になりました。これは主にmake:auth認証スカフォールドに影響を与えています。フロントエンドアセットをCDNからロードする代わりに、依存パッケージがデフォルトのpackage.jsonファイルで指定されています。

さらに、シングルファイルVueコンポーネントが初めから含まれています。サンプルExample.vueコンポーネントが、resources/assets/js/componentsディレクトリに用意されています。それに付け加え、新しいresources/assets/js/app.jsファイルがJavaScriptライブラリ、適切であればVueコンポーネントも起動、設定しています。

この構造は、モダンで堅牢なJavaScriptアプリケーションの構築を特定のJavaScriptやCSSフレームワークを必要とせずに、開発し始めるためのガイダンスとなるでしょう。モダンなLaravelフロント開発を始めるための情報は、新しいフロントエンド入門のドキュメントで確認してください。

ルートファイル

デフォルトで真新しいLaravel5.3アプリケーションには、新しいトップレベルのroutesディレクトリの中に、2つのHTTPルートファイルを用意しています。webapiルートファイルは、WebインターフェイスとAPIのルートをどう分けたら良いかという、明確なガイダンスを提供します。apiルーファイル内のルートは、自動的にRouteServiceProviderにより、apiプレフィックスが割りつけられます。

クロージャコンソールコマンド

コマンドクラスとしての定義に付け加え、Artisanコマンドはシンプルなクロージャとして、app/Console/Kernel.phpファイルのcommandsメソッドで、定義できるようになりました。真新しいLaravel5.3アプリケーションでは、コンソールコマンドをルートのように、アプリケーションを指し示すクロージャベースのエントリ定義するroutes/console.phpファイルをcommandsメソッドがロードします。

Artisan::command('build {project}', function ($project) {
    $this->info('Building project...');
});

クロージャコマンドについての情報は、Artisanのドキュメントで確認してください。

$loop変数

Laracastsでこの機能の無料ビデオチュートリアルがご覧いただけます。

Bladeテンプレートの中でループする場合、$loop変数が使用できます。現在のループインデックスやループの最初や最後の繰り返しかどうかなどの、便利なちょっとした情報へ、この変数でアクセスできます。

@foreach ($users as $user)
    @if ($loop->first)
        これは最初の繰り返し
    @endif

    @if ($loop->last)
        これは最後の繰り返し
    @endif

    <p>これは{{ $user->id }}のユーザー</p>
@endforeach

より多くの情報は、Bladeのドキュメントをお読みください。

Laravel 5.2

Laravel5.2は5.1に引き続き、持続的な向上を目指し、複数認証ドライバのサポート、暗黙のモデル結合、Eloquentグローバルスコープの簡略化、オプトイン認証スカフォールド、ミドルウェアグループ、レート限定ミドルウェア、配列バリデーションの向上などを追加しています。

認証ドライバ/「複数認証」

Laravelの以前のバージョンではデフォルトのみの、セッションベースの認証ドライバーをサポートしており、アプリケーションで2つ以上の認証モデルが使えませんでした。

しかし、Laravel5.2では、追加の認証ドライバを定義でき、同時に複数の認証モデルやユーザーテーブルも定義可能です。それぞれ独立して認証プロセスをコントロールできます。たとえば、"admin(管理者)"ユーザーのデータベーステーブルと、"student(生徒)"のデータベーステーブルを用意し、それぞれのテーブルに対し独立して認証するためにAuthのメソッドが使えるようになりました。

認証のスカフォールド

Laravelでは既に、バックエンドの認証を簡単に処理できるようになっています。しかし、Laravel5.2では便利に、素早くフロントエンドの認証ビューをスカフォールドする方法を提供しました。ターミナルで、ただmake:authコマンドを実行するだけです。

php artisan make:auth

このコマンドは単純なBootstrapと互換性のある、ユーザーログイン、登録、パスワードリセットのビューを生成します。コマンドはさらに、適切なルート追加するように、ルートファイルを更新します。

Note: この機能は新しいアプリケーションだけで使用スべきもので、アプリケーションのアップグレードでは行わないでください。

暗黙のモデル結合

暗黙のモデル結合は、ルートやコントローラに直接関連のあるモデルを何の苦労もなしに依存注入します。たとえば、以下のようなルート定義を考えましょう。

use App\User;

Route::get('/user/{user}', function (User $user) {
    return $user;
});

Laravel5.1では通常、Route::modelメソッドを使い、ルート定義中の{user}パラメータには、App\Userインスタンスを注入するように指示する必要がありました。しかし、Laravel5.2では、必要なモデルインスタンスに素早くアクセスできるように、フレームワークが自動的にURIセグメントに基づき依存注入します。

ルートパラメータのセグメント({user})が、ルートクロージャかコントローラメソッドの対応する変数名('$user')であり、その変数のタイプヒントがEloquentモデルクラスの場合、自動的にそのモデルを依存注入します。

ミドルウェアグループ

ミドルウェアグループは、ルートへ一度に多くのミドルウェアを割りつけられるように、一つの手頃なキーに多くのルートミドルウェアをまとめる機能です。たとえばこれは、同じアプリケーションでWebのUIとAPIを構築する時に便利です。webグループにはセッションとCSRFミドルウェアをまとめ、たぶんapiグループではレート制限をまとめたいと考えるでしょう。

実際、Laravel5.2のデフォルトアプリケーション構造は、このアプローチに従っています。例えば、デフォルトのApp\Http\Kernel.phpファイルには、以下のコードが含まれています。

/**
 * アプリケーションのミドルウェアグループ
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
    ],

    'api' => [
        'throttle:60,1',
    ],
];

ですから、webグループは、ルートに次のように割りつけられます。

Route::group(['middleware' => ['web']], function () {
    //
});

しかし、RouteServiceProviderの中において、デフォルトミドルウェアグループ下でルートファイルをincludeしているため、デフォルト状態でルートには、既にwebミドルウェアグループが適用されることを覚えておいてください。

レート制限

新しいレート制限ミドルウェアがフレームワークに含まれ、あるIPアドレスからの、一分間に指定した回数より多いルートへのアクセスを簡単に制限できるようになりました。たとえば、あるIPからのアクセスを毎分60回に制限したい場合は、次のように指定します。

Route::get('/api/users', ['middleware' => 'throttle:60,1', function () {
    //
}]);

配列のバリデーション

配列のフォーム入力フィールドに対するバリデーションは、Laravel5.2でより簡単になりました。指定した配列の各メールアドレスフィールドがユニークであることをバリデートするには、次のようにします。

$validator = Validator::make($request->all(), [
    'person.*.email' => 'email|unique:users'
]);

同様に*文字を使い、配列ベースのフィールドでも通常のバリデーションメッセージと同じように簡単に、言語ファイル中のバリデーションメッセージを指定できます。

'custom' => [
    'person.*.email' => [
        'unique' => 'Each person must have a unique e-mail address',
    ]
],

Bailバリデーションルール

新しいbail(保釈)バリデーションルールが追加されました。これはバリデータに、ルールで指定された最初のバリデーションに失敗したら、その後のバリデーションを停止するように指示します。たとえば、以下の例では属性がintegerのチェックに失敗したら、バリデータはuniqueのチェックを行いません。

$this->validate($request, [
    'user_id' => 'bail|integer|unique:users'
]);

Eloquentグローバルスコープの向上

以前のバージョンのLaravelでは、グローバルEloquentスコープは複雑で間違いやすい実装でした。しかし5.2では、グローバルクエリスコープはシンプルなメソッド、applyひとつだけを実装するだけです。

グローバルスコープを書くための情報は、十分な説明のあるEloquentのドキュメントを参照してください。

Laravel 5.1.11

Laravel 5.1.11では認可が初めからサポートされています! アプリケーションの認可ロジックをシンプルなコールバックかポリシークラスを使い便利に統合でき、アクションをシンプルで記述的なメソッドを使い認可できます。

詳細は認可のドキュメントを参照してください。

Laravel 5.1.4

Laravel5.1.4でシンプルなログイン制限がフレームワークに導入されました。詳細は認証のドキュメントで確認してください。

Laravel 5.1

Laravel5.1はPSR-2を採用し、イベントのブロードキャスト、ミドルウェアパラメーター、Artisanの改良など、Laravel5.0から継続的に向上しています。

PHP 5.5.9+

PHP5.4は9月に「役目を終える」ことになり、PHP開発チームからセキュリティアップデートを受けられなくなりますので、Laravel5.1はPHP5.5.9以上を動作要件とします。PHP5.5.9はGuzzleやAWS SDKのように人気のあるPHPライブラリーの最新バージョンと互換性があります。

LTS

Laravel5.1は最初の長期間サポートリリースになります。Laravel5.1はバグフィックスを2年間、セキュリティフィックスを3年間提供します。このサポート期間は今までのリリースで一番長く、安定性と心の平和を大きなエンタープライズの顧客に提供します。

PSR-2

ドキュメント

Laravelのドキュメントの全ページは注意深く見直され、大きく向上しました。全サンプルコードはレビューされ、より適切でコンテキストに合うように更新されました。

イベントブロードキャスト

近代的なWebアプリケーションでは、リアルタイムですぐに更新されるユーザーインターフェイスを実装するために、Webソケットが使用されています。あるデータがサーバで更新されると、そのメッセージはWebソケット接続を通じ、クライアントで処理されるように送信されます。

こうしたタイプのアプリケーションを構築する手助けになるように、LaravelはイベントをWebソケット接続上へ簡単に「ブロードキャスト」できるようにしました。Laravelイベントをブロードキャストすることにより、同じイベント名をサーバサイドのコードとクライアントサイドのJavaScriptフレームワークとで共有できるようになります。

イベントのブロードキャストをより詳しく知るには、イベントのドキュメントを読んでください。

ミドルウェアパラメーター

ミドルウェアは追加のカスタムパラメーターを受け取れるようになりました。たとえば、指定されたアクションを取る前に、指定された「役割(role)」を認証済みユーザーが持っているかをアプリケーションで確認する必要があるとします。役割名を追加の引数として受け取るRoleMiddlewareを作成することができます。

<?php

namespace App\Http\Middleware;

use Closure;

class RoleMiddleware
{
    /**
     * リクエストフィルターの実行
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string  $role
     * @return mixed
     */
    public function handle($request, Closure $next, $role)
    {
        if (! $request->user()->hasRole($role)) {
            // リダイレクト処理…
        }

        return $next($request);
    }

}

ミドルウエアパラメーターはルートを定義するときに指定され、ミドルウェア名とパラメーターを:で区切ります。複数のパラメーターはカンマで区切ります。

Route::put('post/{id}', ['middleware' => 'role:editor', function ($id) {
    //
}]);

ミドルウェアについての詳細については、ミドルウェアのドキュメントを調べてください。

テストのオーバーオール

Laravelの組み込みテスト機構は大幅に向上しました。アプリケーションと関連し、レスポンスを調べるためのスラスラと記述しやすいインターフェイスの新しいメソッドが数多く提供されました。以下のテストを見てください。

public function testNewUserRegistration()
{
    $this->visit('/register')
         ->type('Taylor', 'name')
         ->check('terms')
         ->press('Register')
         ->seePageIs('/dashboard');
}

テストの詳細は、テストのドキュメントを確認してください。

モデルファクトリ

モデルファクトリを使い、Eloquentモデルのスタブを簡単に作成する方法が提供されました。モデルファクトリによりEloquentモデルの「デフォルト」属性を定義し、テストやデータベースシーディング(初期値設定)に利用するモデルインスタンスを簡単に生成できます。また、ランダムな属性データーを生成するためのFaker PHPライブラリーの強力な機能をモデルファクトリで使えます。

$factory->define(App\User::class, function ($faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->email,
        'password' => str_random(10),
        'remember_token' => str_random(10),
    ];
});

モデルファクトリの詳細は、ドキュメントを参照してください。

Artisanの向上

Artisanコマンドは、コマンドラインの引数とオプションを定義するための、とても簡単なインターフェイスを提供するルート定義のような「使い方」で指定できるようになりました。たとえば、シンプルなコマンドとオプションを定義してみましょう。

/**
 * コンソールコマンドの名前と使用方法
 *
 * @var string
 */
protected $signature = 'email:send {user} {--force}';

Artisanコマンドの定義の詳細は、Artisanのドキュメントを読んでください。

フォルダー構造

より意図が分かりやすいように、app/Commandsディレクトリはapp/Jobsに名前が変更されました。さらに、app/Handlersディレクトリは、イベントリスナ専用のapp/Listenersに統合されました。しかしこれは互換性を崩す変更ではなく、Laravel5.1の新しいフォルダー構造へ更新する必要はありません。

暗号化

以前のバージョンのLaravelはPHPのmcrypt拡張により暗号化が行われていました。Laravel5.1からは、より活発にメンテナンスが行われているopenssl拡張により暗号化が処理されます。

Laravel 5.0

Laravel5.0では、Laravelプロジェクトに対する全く新しいアプリケーション構造が、デフォルトとして導入されました。この新構造は、Laravelで堅牢なアプリケーションを構築するためより良い基礎となり、同時にアプリケーション全体へ新しいオートローディング規約(PSR-4)を適用します。最初に、大きな変更点を確認しましょう。

新フォルダー構造

古いapp/modelsディレクトリは完全に取り除かれました。代わりに、皆さんの全コードは直接appフォルダーの中に記述し、デフォルトではApp名前空間として統合されます。このデフォルト名前空間は、app:name Artisanコマンドを使い、簡単に変更できます。

コントローラー、ミドルウェア、リクエスト(Laravel5.0の新しいクラスタイプ)は、アプリケーションのHTTPトランスポート層と関連するクラスとして、app/Httpディレクトリ下に全部まとめられます。構造を持たない一つのルートフィルターファイルの代わりに、全ミドルウェアーは、それぞれのクラスファイルへ分割されました。

新しいapp/Providersディレクトリが、以前のLaravel4.xで使われていたapp/startファイルに置き換わりました。これらのサービスプロバイダは、エラーハンドリング、ロギング、ルートのロードなど、アプリケーションの様々な機能の初期準備を担います。もちろん、自分のアプリケーションのために、追加のサービスプロバイダを自由に作成できます。

アプリケーションの言語ファイルとビューは、resourcesディレクトリへ移動しました。

契約

Laravelの主要なコンポーネント全ての実装インターフェイスが、illuminate/contractsリポジトリーの中に設置されてました。このリポジトリーは外部依存していません。分離性と依存注入のため、使用しているインターフェイスが一箇所にまとまっている利点により、Laravelファサードへ別の選択肢を簡単に導入できるでしょう。

契約の詳細は、ドキュメントに全て記載されています。

ルートキャッシュ

If your application is made up entirely of controller routes, you may utilize the new route:cache Artisan command to drastically speed up the registration of your routes. This is primarily useful on applications with 100+ routes and will drastically speed up this portion of your application.

ルートミドルウェア

Laravel4スタイルのルート「フィルター」に付け加え、Laravel5ではHTTPミドルウェアもサポートしています。認証やCSRF「フィルター」はミドルウェアに変更されました。ミドルウェアはリクエストがアプリケーションに完全に届く前に検査や、拒否さえも簡単にできるように、全タイプのフィルターを置き換えられる一つの首尾一貫したインターフェイスを提供します。

ミドルウェアの詳細は、ドキュメントで確認してください。

コントローラーメソッドインジェクション

既存のコンストラクターインジェクションに付け加え、今度はコントローラーメソッドでもタイプヒントによる依存指定ができるようになりました。ルートメソッドに別の引数が存在していても、サービスコンテナが自動的に依存を注入します。

public function createPost(Request $request, PostRepository $posts)
{
    //
}

認証のスカフォールド

ユーザー登録、認証、パスワードリセットコントローラーは、最初から準備されています。同時に対応するビューも、resources/views/authに用意されます。さらに、"users"テーブルのマイグレーションも含まれています。簡単なリソースが用意されていることにより、認証の定形コードに手間取ること無く、アプリケーションのアイデアを素早く開発できるようになります。認証ビューへアクセスするルートは、auth/loginauth/registerです。App\Services\Auth\Registrarサービスは、ユーザーバリデーションと作成に責任を持っています。

イベントオブジェクト

イベントは単なる文字列の代わりに、オブジェクトとして定義されます。以下のイベント例で確認してください。

<?php

class PodcastWasPurchased
{
    public $podcast;

    public function __construct(Podcast $podcast)
    {
        $this->podcast = $podcast;
    }
}

イベントは普通にディスパッチできます。

Event::fire(new PodcastWasPurchased($podcast));

もちろん、イベントハンドラは、データのリストの代わりに、イベントオブジェクトを受け取ります。

<?php

class ReportPodcastPurchase
{
    public function handle(PodcastWasPurchased $event)
    {
        //
    }
}

イベント関連の詳細情報は、ドキュメントで完全に記載されています。

コマンド/キューイング

Laravel4でサポートしているキュージョブの形式に付け加え、Laravel5ではキューするジョブをシンプルなコマンドオブジェクトとして表すことができるようになりました。これらのコマンドは、app/Commandsディレクトリに設置します。サンプルコマンドをご覧ください。

<?php

class PurchasePodcast extends Command implements SelfHandling, ShouldBeQueued
{
    use SerializesModels;

    protected $user, $podcast;

    /**
     * 新しいコマンドインスタンスの生成
     *
     * @return void
     */
    public function __construct(User $user, Podcast $podcast)
    {
        $this->user = $user;
        $this->podcast = $podcast;
    }

    /**
     * コマンド実行
     *
     * @return void
     */
    public function handle()
    {
        // ポッドキャスト購入ロジックの処理…

        event(new PodcastWasPurchased($this->user, $this->podcast));
    }
}

コマンドを簡単に実行できるように、ベースLaravelコントローラーで、DispatchesCommandsトレイトが使用されています。

$this->dispatch(new PurchasePodcastCommand($user, $podcast));

もちろん、(キューに入れず)タスクを同期的に実行するコマンドを使用することもできます。実際、アプリケーションで実行する必要のある複雑なタスクをカプセル化するため、コマンドは良い手段です。詳細は、コマンドバスのドキュメントで確認してください。

データベースキュー

databaseキュードライバがLaravelに追加されました。データベースソフトウェアの他、余計な追加パッケージが必要がない、シンプルなローカルのキュードライバです。

Laravelスケジューラー

これまで開発者は、時間で実行したいコンソールコマンドに対し、一つ一つCronエントリーを作成してきました。しかし、これは面倒でした。コンソールスケジューラーはソースコントロールされておらず、Cronエントリを追加するためにSSHでサーバに接続する必要がありました。人生をより簡単にしましょう。LaravelコマンドスケジューラーはLaravel自身の中でコマンドスケジュールがスラスラと記述的に定義できるようにしてくれ、サーバに必要なCronエントリはたったひとつだけです。

以下のような定義します。

$schedule->command('artisan:command')->dailyAt('15:00');

もちろん、スケジューラーの全てを学習したい場合は、ドキュメントを確認してください。

Tinker/Psysh

php artisan tinkerコマンドは、より堅牢なPHP REPLであるJustin Hileman作成のPsyshを使用するようになりました。Laravel4のBorisがお気に入りなら、Psyshはもっと好みでしょう。より良いことに、Windowsでも動作します!php artisan tinkerで試し始めてください。

php artisan tinker

DotEnv

環境設定ディレクトリがネストし、色々と混乱させる代わりに、Laravel5ではVance Lucas制作のDotEnvを使用しています。このライブラリーは環境設定を管理するとても単純な手法を提供しており、Laravel5での環境決定は簡単です。詳細は、設定のドキュメントをご覧ください。

Laravel Elixir

Laravel ElixirはJeffrey Wayにより開発された、アセットをコンパイルしたり、結合したりするためにスラスラと表現できるインターフェイスを提供しています。もしもGruntやGulpの学習が恐ろしくても、怖がる必要はありません。ElixirはLessやSass、CoffeeScriptをコンパイルするために、Gulpを簡単に使い始めさせてくれます。さらにテストまで実行してくれます!

Elixirの詳細は、ドキュメントで確認してください。

Laravel Socialite

Laravel Socialite is an optional, Laravel 5.0+ compatible package that provides totally painless authentication with OAuth providers. Currently, Socialite supports Facebook, Twitter, Google, and GitHub. Here's what it looks like:

public function redirectForAuth()
{
    return Socialize::with('twitter')->redirect();
}

public function getUserFromProvider()
{
    $user = Socialize::with('twitter')->user();
}

OAuth認証のフローを書くために、時間を費やす必要はもうありません。数分で使用開始できます!ドキュメントで詳細が全部説明されています。

Flysystemの統合

Laravelは強力なFlysystem抽象ファイルシステムライブラリーを採用しました。これにより、統一されたエレガントなAPI一つで、ローカルストレージ、Amazon S3、Rackクラウドストレージを苦労なしに統合できます。

Storage::put('file.txt', 'contents');

LaravelとFlysystemの統合についての詳細は、ドキュメントをご覧ください。

フォームリクエスト

Laravel5.0は、Illuminate\Foundation\Http\FormRequestを拡張したクラスである、フォームリクエストを導入しました。このリクエストオブジェクトは、コントローラーメソッドインジェクションにより注入され、定形処理コードを書かなくとも、ユーザー入力のバリデーションが行えます。FormRequestのサンプルを掘り下げ確認してみましょう。

<?php

namespace App\Http\Requests;

class RegisterRequest extends FormRequest
{
    public function rules()
    {
        return [
            'email' => 'required|email|unique:users',
            'password' => 'required|confirmed|min:8',
        ];
    }

    public function authorize()
    {
        return true;
    }
}

クラスが定義できれば、コントローラーアクションでタイプヒントを指定できます。

public function register(RegisterRequest $request)
{
    var_dump($request->input());
}

Laravel サービスコンテナがFormRequestインスタンスの注入を認識すると、そのリクエストは自動的にバリデーションが行われます。つまり、コントローラーのアクションが呼び出された時には、そのフォームリクエストクラスに指定したルールに従い、HTTPリクエストは入力のバリデーションに通され確認済みであると、安心して想定できます。さらに、リクエストがバリデーションに引っかかった場合、HTTPリダイレクトが自動的に行われ(カスタマイズ可能)、エラーメッセージもセッションにフラッシュデーターとして保存されるか、JSONに変換されます。 フォームバリデーションはこれまでないくらいにシンプルになりました。 FormRequestバリデーションの詳細は、ドキュメントをご覧ください。

シンプルなコントローラーリクエストバリデーション

Laravel5のベースコントローラーは、ValidatesRequestsトレイトを取り込んでいます。このトレイトは、やってきたリクエストを手間なくバリデートする、validateメソッドを提供しています。もし、FormRequestがあなたのアプリケーションでは、多少大げさすぎるならば、これを使ってみてください。

public function createPost(Request $request)
{
    $this->validate($request, [
        'title' => 'required|max:255',
        'body' => 'required',
    ]);
}

バリデーションが失敗すると、例外が投げられ、適切なHTTPレスポンスが自動的にブラウザへ送り返されます。バリデーションエラーもフラッシュデータとしてセッションに保存されます!AJAXリクエストの場合、Laravelはバリデーションエラーを表すJSONを送り返す面倒も見ます。

この新しいメソッドの詳細は、ドキュメントをご覧ください。

新ジェネレーター

新しいデフォルトアプリケーション構造を手助けするため、Artisan生成コマンドが新しくフレームワークに追加されました。詳細は、php artisan listで確認してください。

設定のキャッシュ

config:cacheコマンドを使用して、全設定ファイルを一つのファイルへキャッシュできるようになりました。

Symfony VarDumper

変数をデバッグ情報としてダンプする、人気のddヘルパ関数が、素晴らしいSymfony VarDumperを使用するようにアップグレードされました。これは出力を色分けし、配列を折りたたむこともできます。プロジェクトで以下のように使用してください。

dd([1, 2, 3]);

Laravel 4.2

このリリースの完全な変更リストは、4.2をインストールし、php artisan changesコマンドを実行するか、GitHubで変更を確認してください。このセクションの記述は、リリースの主要な向上点と変更だけを示しています。

注意: 4.2のリリースまでの間に、多くの様々な小さなバグ修正や改善が、Laravel4.1に取り込まれてきました。ですから、Laravel4.1の変更リストも注意深くチェックしてください。

PHP 5.4が必要

Laravel4.2を動作させるには、PHP5.4以上が必要です。このPHPに関する動作要件の引き上げにより、Laravelキャッシャーなどのツールで、より記述的なインターフェイスを提供するための、トレイトのような新しい機能を使用することができるようになりました。更に、PHP5.4はPHP5.3よりも、大きな速度と効率の向上をもたらしてくれます。

Laravel Forge

Laravel Forgeは、新しいWebベースアプリケーションで、皆さんが選んだLinode、DigitalOcean、Rackspace、Amazon EC2のようなクラウド上で、PHPサービスを作成し管理する、シンプルな方法を提供しています。自動的なNginx設定、SSHキーアクセス、cronジョブの自動化、NewRelicとPapertrailによるサーバ監視、「Pushによるデプロイ」、Laravelキュー・ワーカー設定などをサポートしています。Forgeは皆さんのLaravelアプリケーション全部をランチする、最もシンプルで、手に入れやすい手法です。

インストールしたLaravel4.2の中の、app/config/database.php設定ファイルが、デフォルトでForge使用の設定ファイルになり、プラットフォームへ真新しいアプリケーションを便利にデプロイできるようにしてくれます。

Laravel Forgeの詳細な情報は、Forgeの公式Webサイトをご覧ください。

Laravel Homestead

Laravel Homesteadは、強固なLaravelとPHPアプリケーションをデプロイするための、公式Vagrant環境です。配布のためにboxをバッケージする前に、広大な範囲に渡る、必要なboxの準備作業は処理済みですから、非常に素早くboxを起動可能です。Homesteadは、Nginx1.6、PHP5.6、MySQL、Postgres、Redis、Memcached、Beanstalk、Node、Gulp、Grunt、Bowerを用意しています。HomesteadはシンプルなHomestead.yaml設定ファイルを含んでおり、複数のLaravelアプリケーションを一つのboxで管理しています。

インストールしたLaravel4.2に含まれており、初めから用意されているHomesteadデータベースを使用するために設定されている、app/config/local/database.php設定ファイルは、Laravelの初期インストールと設定をより便利にしています。

公式ドキュメントにも、Homesteadのドキュメントが追加されました。

Laravelキャッシャー

Laravelキャッシャーは、Stripeを使用し、購読の課金を管理するための、シンプルで記述的なライブラリーです。Laravel4.2で紹介し、キャッシャーのドキュメントも、Laravelのメインドキュメントに含めましたが、コンポーネントのインストールはまだオプションです。このリリースのキャッシャーは、多くのバグが修正され、複数通貨をサポートし、最新のStripe APIとコンパチブルです。

デーモン・キュー・ワーカー

Artisanのqueue:workコマンドは、--daemonオプションをサポートし、ワーカーを「デーモンモード」で開始できます。つまり、ワーカーはフレームワークを再起動することなく、ジョブの処理を継続します。この結果、CPU使用率は大幅に減らすことができましたが、アプリケーションのデプロイ手段がやや複雑になるという犠牲を払う必要があります。

デーモン・キュー・ワーカーに関する情報は、キューのドキュメントをご覧ください。

メールAPIドライバ

Laravel4.2は、新しいMailgunとMandrill APIドライバをメール機能に導入しました。多くのアプリケーションにとって、SMTPを使用する選択肢よりも、メールを送信する手段として、より早く、より信頼が置けるでしょう。新しいドライバは、Guzzle 4 HTTPライブラリーを使用しています。

ソフトデリート・トレイト

PHP5.4のトレイトを使用し、「ソフトデリート」の構造をより美しくし、「グローバルスコープ」を導入しました。この新しい構造により、グローバルトレイトに似た簡単な記述法ができ、フレームワーク内部の関心の分離をよりきれいに実現できます。

新しいSoftDeletingTraitに関する詳細はEloquentのドキュメントをご覧ください。

便利な認証とパスワードリマインダーのトレイト

Laravel4.2は、認証とパスワードリマインダーのユーザーインターフェイスに必要なプロパティを含むシンプルなトレイトを使用するようになりました。これにより、初めから含まれているデフォルトのUserモデルファイルをより美しく提供できます。

シンプル・ペジネーション

新しいsimplePaginateメソッドが、クエリとEloquentビルダに追加され、ペジネーションビューに、シンプルな「次」と「前」リンクを使用したい場合に、より効率的なクエリが行えるようになりました。

マイグレーション時の確認

実働時には、破壊的なマイグレーション操作には、確認を尋ねるようになりました。コマンドをプロンプト無しで実行する場合は、--forceオプションを使用してください。

Laravel 4.1

完全な変更リスト

このリリースの完全な変更リストは、4.2をインストールし、php artisan changesコマンドを実行するか、GitHubで変更を確認してください。このセクションの記述は、リリースの主要な向上点と変更だけを示しています。

新SSHコンポーネント

全く新しいSSHコンポーネントがこのリリースで導入されました。これが提供する機能は、SSHを使い簡単にリモートサーバでコマンドを実行することです。詳しくは、SSHコンポーネントのドキュメントをご覧ください。

新しいphp artisan tailコマンドは、この新SSHコンポーネントを活用しています。詳細は、tailコマンドドキュメントをご覧ください。

TinkerとBoris

php artisan tinkerコマンドは、システムがサポートしている場合、Boris REPLを活用します。この機能を利用するには、readlinepcntl PHP拡張をインストールする必要があります。これらの拡張が用意出来な場合は、4.0以上のシェルが利用できます。

Eloquentの向上

新しいhasManyThroughリレーションがEloquentに追加されました。どのように使用するかは、Eloquentドキュメントをご覧ください。

また、新しいwhereHasメソッドがリレーションの条件に基づいてモデルを取得するために導入されました。

データベースRead/Write接続

クエリビルダとEloquent使用時に、データベース層でRead/Write接続により接続を自動的に分けられるようになりました。詳細はドキュメントをご覧ください。

クエリの優先度

queue:listenコマンドに、カンマ区切りでリストを指定することによる、キュー処理のプライオリティーがサポートされました。

失敗したキュージョブの処理

queue:listenへ新しい--triesスイッチをつけることで、失敗したジョブを自動的に処理する機能が追加されました。失敗したジョブに関するより詳しい説明は、キューのドキュメントをご覧ください。

キャッシュタグ

キャッシュの"section"は"tags"に置き換わりました。キャッシュのタグにより、複数のタグをキャッシュアイテムにつけることができます。そして、タグを指定することで、一度に全部のアイテムを消去できます。キャッシュタグの使い方の情報は、キャッシュのドキュメントに記載されています。

柔軟になったパスワードリマインダー

The password reminder engine has been changed to provide greater developer flexibility when validating passwords, flashing status messages to the session, etc. For more information on using the enhanced password reminder engine, consult the documentation.パスワードのバリデーション、セッションにフラッシュアイテムとして保存するメッセージの使用など、パスワードリマインダー(リセット)は、開発者が柔軟に使用できるように変更されました。修正パスワードリマインダーエンジンの詳細は、ドキュメントをご覧ください。

ルーティングエンジンの向上

Laravel 4.1ではルーティング層が完全に書き換えられています。APIに変更はありませんが、ルートの登録は、4.0と比べ完全に100%早くなっています。エンジン全体はとてもシンプルになり、ルートの解釈時のSymfony Routingへの依存が小さくなりました。

セッションエンジンの向上

このリリースでは、新しいセッションエンジンも導入しました。ルーティングでの向上と同様に、新しいセッション層はより小さく、早くなりました。Symfonyの(そのためにPHPのも)セッション処理機能を使用しなくなり、よりシンプルでメンテナンスしやすいカスタム処理を使用しています。

Doctrine DBAL

もしrenameColumn機能をマイグレーションで使用している場合、composer.jsonファイルにdoctrine/dbalパッケージを追加する必要があります。このパッケージはデフォルトではLaravelに含まれなくなりました。

ドキュメント章別ページ

公式パッケージ

ヘッダー項目移動

注目:アイコン:ページ内リンク設置(リンクがないヘッダーへの移動では、リンクがある以前のヘッダーのハッシュを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)へ移動

その他

?

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