サポートポリシー
セキュリティーに関する修正は、Laravelの以前のメジャーバージョンに対しいつでも適用されます。現在、全てのセキュリティー修正とパッチは、Laravel5.xとLaravel4.xの両方へ行われています。
当てはまるならば、Laravel3.xのようなさらに古いリリースに対しても、適用します。
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ファサードへ別の選択肢を簡単に導入できるでしょう。
契約の詳細は、ドキュメントに全て記載されています。
ルートキャッシュ
アプリケーションが全てコントローラールートにより構築されている場合、ルート登録の速度をドラマティックに早く改善するため、新しいroute:cache
Artisanコマンドを活用できます。これは、主にアプリケーションが100以上のルートを持っている場合に役立ち、アプリケーションのルート登録を劇的にスピードアップします。
ルートミドルウェア
Laravel4スタイルのルート「フィルター」に付け加え、Laravel5ではHTTPミドルウェアもサポートしています。認証やCSRF「フィルター」はミドルウェアに変更されました。ミドルウェアはリクエストがアプリケーションに完全に届く前に検査や、拒否さえも簡単にできるように、全タイプのフィルターを置き換えられる一つの首尾一貫したインターフェイスを提供します。
ミドルウェアの詳細は、ドキュメントで確認してください。
コントローラーメソッドインジェクション
既存のコンストラクターインジェクションに付け加え、今度はコントローラーメソッドでもタイプヒントによる依存指定ができるようになりました。ルートメソッドに別の引数が存在していても、サービスコンテナが自動的に依存を注入します。
public function createPost(Request $request, PostRepository $posts)
{
//
}
認証のスカフォールド
ユーザー登録、認証、パスワードリセットコントローラーは、最初から準備されています。同時に対応するビューも、resources/views/auth
に用意されます。さらに、"users"テーブルのマイグレーションも含まれています。簡単なリソースが用意されていることにより、認証の定形コードに手間取ること無く、アプリケーションのアイデアを素早く開発できるようになります。認証ビューへアクセスするルートは、auth/login
とauth/register
です。App\Services\Auth\Registrar
サービスは、ユーザーバリデーションと作成に責任を持っています。
イベントオブジェクト
イベントは単なる文字列の代わりに、オブジェクトとして定義されます。以下のイベント例で確認してください。
class PodcastWasPurchased {
public $podcast;
public function __construct(Podcast $podcast)
{
$this->podcast = $podcast;
}
}
イベントは普通にディスパッチできます。
Event::fire(new PodcastWasPurchased($podcast));
もちろん、イベントハンドラーは、データのリストの代わりに、イベントオブジェクトを受け取ります。
class ReportPodcastPurchase {
public function handle(PodcastWasPurchased $event)
{
//
}
}
イベント関連の詳細情報は、ドキュメントで完全に記載されています。
コマンド/キューイング
Laravel4でサポートしているキュージョブの形式に付け加え、Laravel5ではキューするジョブをシンプルなコマンドオブジェクトとして表すことができるようになりました。これらのコマンドは、app/Commands
ディレクトリーに設置します。サンプルコマンドをご覧ください。
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はLaravel5.0コンパチブルのオプションパッケージで、OAuthプロバイダーによる認証を全く苦労無しで行えます。現在、Socialiteがサポートしているのは、Facebook、Twitter、Google、GitHubです。以下の例をご覧ください。
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.1でphp artisan changes
コマンドを実行することで表示されます。もしくは、GitHub上の変更JSONファイルをご覧ください。
新SSHコンポーネント
全く新しいSSH
コンポーネントがこのリリースで導入されました。これが提供する機能は、SSHを使い簡単にリモートサーバーでコマンドを実行することです。詳しくは、SSHコンポーネントのドキュメントをご覧ください。
新しいphp artisan tail
コマンドは、この新SSHコンポーネントを活用しています。詳細は、tailコマンドドキュメントをご覧ください。
TinkerとBoris
php artisan tinker
コマンドは、システムがサポートしている場合、Boris
REPLを活用します。この機能を利用するには、readline
とpcntl
PHP拡張をインストールする必要があります。これらの拡張が用意出来な場合は、4.0以上のシェルが利用できます。
Eloquentの向上
新しいhasManyThrough
リレーションがEloquentに追加されました。どのように使用するかは、Eloquentドキュメントをご覧ください。
また、新しいwhereHas
メソッドがリレーションの条件に基づいてモデルを取得するために導入されました。
データベースRead/Write接続
クエリービルダーとEloquent使用時に、データベース層でRead/Write接続により接続を自動的に分けられるようになりました。詳細はドキュメントをご覧ください。
クエリーの優先度
queue:listen
コマンドに、カンマ区切りでリストを指定することによる、キュー処理のプライオリティーがサポートされました。
失敗したキュージョブの処理
queue:listen
へ新しい--tries
スイッチをつけることで、失敗したジョブを自動的に処理する機能が追加されました。失敗したジョブに関するより詳しい説明は、キューのドキュメントをご覧ください。
キャッシュタグ
キャッシュの"section"は"tags"に置き換わりました。キャッシュのタグにより、複数のタグをキャッシュアイテムにつけることができます。そして、タグを指定することで、一度に全部のアイテムを消去できます。キャッシュタグの使い方の情報は、キャッシュのドキュメントに記載されています。
柔軟になったパスワードリマインダー
パスワードのバリデーション、セッションにフラッシュアイテムとして保存するメッセージの使用など、パスワードリマインダー(リセット)は、開発者が柔軟に使用できるように変更されました。修正パスワードリマインダーエンジンの詳細は、ドキュメントをご覧ください。
ルーティングエンジンの向上
Laravel 4.1ではルーティング層が完全に書き換えられています。APIに変更はありませんが、ルートの登録は、4.0と比べ完全に100%早くなっています。エンジン全体はとてもシンプルになり、ルートの解釈時のSymfony Routingへの依存が小さくなりました。
セッションエンジンの向上
このリリースでは、新しいセッションエンジンも導入しました。ルーティングでの向上と同様に、新しいセッション層はより小さく、早くなりました。Symfonyの(そのためにPHPのも)セッション処理機能を使用しなくなり、よりシンプルでメンテナンスしやすいカスタム処理を使用しています。
Doctrine DBAL
もしrenameColumn
機能をマイグレーションで使用している場合、composer.json
ファイルにdoctrine/dbal
パッケージを追加する必要があります。このパッケージはデフォルトではLaravelに含まれなくなりました。