Laravel 5.dev アップグレードガイド

4.2から5.0へのアップグレード

新しくインストール、その後で移行

推奨するアップグレード方法は、新しくLaravel5.0をインストールし、それから4.2サイト独自のファイルを新しくインストールした環境へコピーすることです。コピーするファイルにはコントローラー、ルート、Eloqモデル、Artisanコマンド、アセット、その他あなたのアプリケーション限定のコードを含みます。

開始するために、ローカル環境の新しいディレクトリーへLaravel5アプリケーションをインストールしてください。各手順の詳細は、以降で紹介します。

Composerの依存とパッケージ

追加しているComposerの依存パッケージを5.0アプリケーションへコピーするのを忘れないでください。SDKのような、サードパーティのコードも忘れずに。

最初のリリース時、Laravel限定のパッケージはLaravel5と互換性がないかも知れません。Laravel5向きの対応バージョンが用意されるか、メンテナーに確認しましょう。Composerの依存パッケージをアプリケーションに追加したら、composer updataを実行する必要があります。

名前空間

Laravel4のデフォルトでは、アプリケーションのコードに名前空間は使用されていません。そのため、例えば、全Eloquentモデルとコントローラーは、ただ「グローバル」な名前空間下に置かれています。手早く移行するには、Laravel5でも同様にグローバル名前空間下へ、それらのクラスを設置しましょう。

設定

環境変数の移行

新しい.env.exampleファイルを.envへコピーします。古いバージョンの.env.phpファイルに該当します。APP_ENVAPP_KEY(暗号化キー)、データベース接続情報、キャッシュやセッションのドライバーのような値を適切に設置してください。

さらに、古い.env.phpファイル中で変更した値を.env(ローカル環境で本当に使用される値)と.env.example(他のチームメンバーに参考にしてもらう値)にコピーします。

環境設定の詳細は、ドキュメントを読んでください。

注意: Laravel5アプリケーションを本番サーバーへデプロイする前に、適切な値を設置した.envファイルを用意しておく必要があります。

設定ファイル

Laravel5.0では、特定の環境のために設定ファイルを指定する、app/config/{環境名}/ディレクトリー構造はもう使われません。代わりに、様々な環境に用意する.envへ設定値を移動します。それから、設定ファイル中でenv('キー', 'デフォルト値')を使用して、値にアクセスします。config/database.php設定ファイルに設定例があります。

configディレクトリー下の設定ファイルには、全環境に渡り変更しない値を直接設置するか、環境ごとに変化する値をロードするために、env()を使うかの、どちらかで設定値を指定します。

.envファイルにキーを追加したら、同様に参考値を.env.exampleファイルへ追加するのを忘れないでください。これにより、あなたのチームメンバーが自分の.envファイルを作成しやすくなります。

ルート

古いroutes.phpを新しいapp/Http/routes.phpへ、コピー&貼付けしてください。

コントローラー

次に、全コントローラーをapp/Http/Controllersディレクトリーへ移動します。このガイドでは名前空間を利用した以降を行わないため、composer.jsonファイルのclassmapディレクティブへ、app/Http/Controllersを追加してください。次に、app/Http/Controllers/Controller.php抽象ベースクラスから、名前空間を削除します。移行するコントローラーはこのベースクラスを拡張していることを確認してください。

app/Providers/RouteServiceProvider.phpファイルの中で、namespaceプロパティをnullに設定してください。

ルートフィルター

フィルターの定義をapp/filters.phpから、app/Providers/RouteServiceProvider.phpboot()メソッドの中へコピーします。app/Providers/RouteServiceProvider.phpuse Illuminate\Support\Facades\Route;の1行を追加し、Routeファサードを使い続けられるようにします。

authcsrfのような、Laravel4デフォルトフィルターは移動しないでください。ミドルウェアとしてLaravel5に用意されています。ルートやコントローラーで、古いデフォルトフィルターの使用箇所(例えば、['before' => 'auth'])を新しいミドルウェアを使用するように書き換えてください。(例えば、['middleware' => 'auth']

フィルターはLaravel5でも廃止されていません。カスタムフィルターを定義して、beforeafterを使用し指定できます。

グローバルCSRF

デフォルトで、CSRF保護が、全ルートで有効になりました。これを無効にするか、特定のルートだけに手動で有効にしたいのでしたら、以下の行をApp\Http\Kernelファイル中のmiddleware配列から削除してください。

'App\Http\Middleware\VerifyCsrfToken',

他で使用する場合は、次の1行を$routeMiddlewareに追加します。

'csrf' => 'App\Http\Middleware\VerifyCsrfToken',

これで、個別のルート/コントローラーに対し、['middleware' => 'csrf']を指定することで、ミドルウェアを追加できるようになります。ミドルウェアの詳細は、ドキュメントを参照してください。

Eloquentモデル

Eloquentモデルを設置するために、app/Modelsディレクトリーを作成することもできます。その場合、このディレクトリーをcomposer.jsonclassmapディレクティブへ追加してください。

SoftDeletingTraitを使用しているモデルでは、Illuminate\Database\Eloquent\SoftDeletesを使うように変更します。

Eloquentキャッシュ

Eloquentは、クエリー結果をキャッシュするためのrememberメソッドを提供しなくなりました。Cache::remember機能を使用し、手動でクエリーをキャッシュする必要があります。キャッシュの詳細は、ドキュメントに全て記載されています。

User認証モデル

UserモデルをLaravel5の認証システム向けにアップグレードするには、以下の指示に従ってください。

useブロックから、以下の行を削除する

use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;

useブロックに、以下の行を追加する

use Illuminate\Auth\Authenticatable;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;

UserInterfaceとRemindableInterfaceインターフェイスを削除する

クラスで以下のインターフェイスを実装宣言する

implements AuthenticatableContract, CanResetPasswordContract

クラスの宣言で、以下のトレイトを取り込む

use Authenticatable, CanResetPassword;

Cashierの変更

Artisanコマンド

古いapp/commandsディレクトリーからコマンドクラスを全部、新しいapp/Console/Commandsディレクトリーへ移動します。次に、composer.jsonファイルのclassmapディレクティブに、app/Console/Commandsを追加します。

それから、start/artisan.phpでリストしていたArtisanコマンドをapp/Console/Kernel.phpcommand配列へコピーします。

データベースマイグレーションと初期値設定

データベースにusersテーブルが既に存在しているでしょうから、Laravel5.0に含まれている2つのマイグレーションを削除します。

app/database/migrationsディレクトリーのマイグレートクラスを、新しいdatabase/migrationsへ移動します。初期値設定(seed)クラスをapp/database/seedsから、database/seedsへ移動します。

グローバルIoC結合

start/global.phpの中のIoC結合は全て、app/Providers/AppServiceProvider.phpファイルのregisterメソッドへ移動します。Appファサードをインポートする必要があります。

そうした結合定義をカテゴリー毎に別々のサービスプロバイダーへ分割する選択肢もあります。

ビュー

app/views中のビューを新しいresources/viewsディレクトリーへ移動します。

Bladeタグ変更

デフォルトでもセキュリティーを強化するために、Laravel5.0では{{ }}{{{ }}}の両Blade記法で出力がエスケープされます。新しい{!! !!}記法により、出力をエスケープせずにそのまま表示します。アプリケーションをアップデートする場合の一番安全な選択肢は、明らかにそのまま出力をしても安全なところでだけで、新しい{!! !!}記法を使うことでしょう。

しかし、古いBlade記法を使わなくてはならないのでしたら、AppServiceProvider@registerの最後に、以下の数行を追加してください。

\Blade::setRawTags('{{', '}}');
\Blade::setContentTags('{{{', '}}}');
\Blade::setEscapedContentTags('{{{', '}}}');

これは簡単に行うべきではありません。XSS攻撃に対しアプリケーションを脆弱にしてしまうかもしれません。また、{{--を使用したコメントは廃止されました。

言語ファイル

app/lang下の言語ファイルは、新しいresources/langディレクトリーへ移動します。

Publicディレクトリー

4.2アプリケーションのpublicディレクトリーから、公開しているアセットを新しいアプリケーションのpublicディレクトリーへコピーします。5.0バージョンのindex.phpは変更しないように気をつけてください。

テスト

app/testsからテストを、新しいtestsディレクトリーへ移動します。

その他のファイル

プロジェクトの他のファイルをコピーしましょう。例えば、.scrutinizer.ymlbower.json、その他の似たようなツールの設定ファイルなどです。

SassやLess、CoffeeScriptをお好きな場所へ移動しましょう。resources/assetsディレクトリーがデフォルトの場所として最適でしょう。

FormとHTMLヘルパ

FromかHTMLヘルパを使用しているのでしたら、class 'Form' not foundclass 'Html' not foundのエラーを目にすることになります。これを修正するには、composer.jsonファイルのrequireセクションに、"illuminate/html": "~5.0"を追加してください。

さらに、FormとHTMLのファサード、サービスプロバイダーを追加する必要があります。config/app.phpを編集し、providers配列に以下の1行を追加します。

'Illuminate\Html\HtmlServiceProvider',

次に、aliases配列へ以下を追加します。

'Form'      => 'Illuminate\Html\FormFacade',
'Html'      => 'Illuminate\Html\HtmlFacade',

CacheManager

Laravelのキャッシュでファサードを使用せず、Illuminate\Cache\CacheManagerをコードで注入している場合、代わりにIlluminate\Contracts\Cache\Repositoryを注入してください。

ペジネーション

$paginator->links()の呼び出しを$paginator->render()へ変更してください。

Beanstalkキュー

Laravel5.0では、"pda/pheanstalk": "~2.1"の代わりに、"pda/pheanstalk": "~3.0"が必要になります。

Remote

Remoteコンポーネントは廃止されました。

Workbench

Workbenchコンポーネントは廃止されました。

4.1から4.2へのアップグレード

PHP 5.4+

Laravel4.2を動作させるにはPHP 5.4.0以上が必要です。

暗号化のデフォルト

app/config/app.php設定ファイルに、新しいcipherオプションが追加されました。このオプションの値は、MCRYPT_RIJNDAEL_256にすべきでしょう。

'cipher' => MCRYPT_RIJNDAEL_256

この設定は、Laravelの暗号機能により使用される、デフォルトcipherをコントロールするために使用されます。

注意: Laravel4.2では、最も安全な暗号化であると考えられる、MCRYPT_RIJNDAEL_128 (AES)がデフォルトの暗号化です。cipherをMCRYPT_RIJNDAEL_256へ戻すことが必要になるのは、Laravel4.1以前のバージョンで暗号化されたクッキー/値を解読する場合です。

ソフトデリートは、トレイトを使用するようになりました

モデルのソフトデリートを使用している場合、softDeletesプロパティーは必要なくなりました。SoftDeletingTraitを次のように使用してください。

use Illuminate\Database\Eloquent\SoftDeletingTrait;

class User extends Eloquent {
    use SoftDeletingTrait;
}

それから、datesプロパティーにdeleted_atカラムを追記してください。

class User extends Eloquent {
    use SoftDeletingTrait;

    protected $dates = ['deleted_at'];
}

ソフトデリート操作のAPIは、今までと変わりありません。

注意: SoftDeletingTraitは、ベースモデルで使用してはいけません。実際のモデルクラスで使用します。

View/PaginationのEnvironmentクラスの名前変更

もし、Illuminate\View\Environmentクラスか、Illuminate\Pagination\Environmentクラスを直接参照している場合、Illuminate\View\FactoryIlluminate\Pagination\Factoryを代わりに参照するように、コードを変更してください。この2つのクラスは、機能をより良く表すように名前が変更されました。

ペジネーションプレゼンテーターの引数追加

Illuminate\Pagination\Presenterクラスを拡張している場合、getPageLinkWrapper抽象メソッドに、rel引数を追加するように変更してください。

abstract public function getPageLinkWrapper($url, $page, $rel = null);

Iron.Ioキューの暗号化

Iron.ioキュードライバーを使用している場合、新しいencryptオプションをキュー設定ファイルに追加する必要があります。

'encrypt' => true

Upgrading To 4.1.29 From <= 4.1.x

Laravel4.1.29では、全データベースドライバーのカラムクオーティングが向上しました。Eloquentモデルにfillableを使用していない場合の、複数代入に関する脆弱性からアプリケーションを保護します。複数代入されるのを防ぐためにモデルにfillableプロパティを使用している場合には、アプリケーションに脆弱性はありません。しかし、guardedを使用し、ユーザーがコントロールできる配列を"update"や"save”タイプの機能に渡しているのでしたら、複数代入のリスクにアプリケーションがさらされているため、4.1.29へすぐアップグレードすべきでしょう。

Laravel4.1.29へアップグレードするには、composer updateを実行するだけです。このリリースには、ソース修正が必要な変更は含まれていません。

4.1.25以下から、4.1.26へのアップグレード

Laravel 4.1.26では、"Remember me"クッキーへのセキュリティーが強化されました。このアップデート以前は、Remeberクッキーが悪意のあるユーザーによりハイジャックされ、本当のユーザーがアカウントのパスワードをリセットしたり、ログアウトしたりしても、クッキーが長期に渡り有効なままにされてしまいました。

今回の変更により、usersテーブル(もしくはユーザー管理を行うためのテーブル)へ、新しいremember_tokenカラムを追加する必要があります。この変更により、ユーザーがアプリケーションにログインするたびに、真新しいトークンが割り当てられます。このトークンはユーザーがアプリケーションからログアウトするたびに、再生成されます。この実装により、もしも"Remember me"クッキがーハイジャックされても、アプリケーションからログアウトすれば、そのクッキーは無効になります。

アップデート法

最初に、新しいremember_token(null値可能なVARCHAR(100)かTEXTなど)カラムをusersテーブルに追加してください。

次に、Eloquent認証ドライバーを使用しているのであれば、Userクラスへ以下の3クラスを追加してください。

public function getRememberToken()
{
    return $this->remember_token;
}

public function setRememberToken($value)
{
    $this->remember_token = $value;
}

public function getRememberTokenName()
{
    return 'remember_token';
}

注意:この変更により、現在使用中の"Remember me"セッションは無効となるため、全ユーザーはアプリケーションへの再認証を強制されます。

パッケージメンテナーの方へ

Illuminate\Auth\UserProviderInterfaceへ、新しいメソッドが2つ追加されました。実装のサンプルは、デフォルトドライバーをご覧ください。

public function retrieveByToken($identifier, $token);

public function updateRememberToken(UserInterface $user, $token);

Illuminate\Auth\UserInterfaceにも、「アップデート法」で説明している、新しい3つのメソッドが追加されました。

4.0から4.1へアップグレード

コンポーサー依存パッケージのアップグレード

アプリケーションをLaravel4.1へアップグレードするには、composer.jsonファイルの中のlaravel/frameworkのバージョンを4.1に変更します。

ファイルの置き換え

public/index.phpファイルをこのリポジトリーの新バージョンへ置き換えて下さい。

artisanファイルをこのリポジトリーの新バージョンへ置き換えて下さい。

設定ファイルとオプションの追加

app/config/app.php設定ファイル中のaliasesproviders配列を更新します。変更する内容はこのファイルで確認して下さい。自分で追加したサービスプロバーダーとエイリアスを書き戻すのを忘れないで下さい。

新規にapp/config/remote.phpファイルをこのリポジトリーから取得し、追加して下さい。

app/config/session.phpファイルへ新しいexpire_on_close設定オプションを追加して下さい。デフォルト値はfalseです。

app/config/queue.phpファイルへ新しいfailed設定セクションを追加して下さい。セクションのデフォルト値は以下の通りです。

'failed' => array(
    'database' => 'mysql', 'table' => 'failed_jobs',
),

(オプション):app/config/view.phpファイル中のpagination設定オプションをpagination::slider-3に変更することもできます。

コントローラーの更新

もし、app/controllers/BaseController.phpが頭のところでuse文を使用していたら、use Illuminate\Routing\Controllers\Controller;use Illuminate\Routing\Controller;へ変更して下さい。

パスワードリマインダーの更新

パスワードリマインダーは自由度を増すために全体的に見なおされました。php artisan auth:reminders-controller Artisanコマンドを実行し、作成される新しいスタブコントローラーを調べてみて下さい。もしくは、更新されたドキュメントを読み、それに従ってアプリケーションを更新して下さい。

app/lang/en/reminders.php言語ファイルをこちらの更新済みファイルに合わせて変更して下さい。

環境決定の更新

セキュリティーの観点から、アプリケーションの環境を決定するためにURLのドメインはもう使用されなくなりました。これらの値は簡単に偽装でき、リクエストの環境を変更する攻撃が可能です。コンピューターのホスト名を利用するように、環境決定コードを変更して下さい。(hostnameコマンドがMac、Linux、Windowsで使用できます。)

ログファイルの単純化

今回よりLaravelは、app/storage/logs/laravel.logファイルのみを作成、使用するようになりました。しかし、この動作はapp/start/global.phpファイルで設定できるままになっています。

Trailing Slashリダイレクトの削除

bootstrap/start.phpファイルの中から、$app->redirectIfTrailingSlash()'の呼び出しを削除して下さい。この機能はフレームワークに含まれている.htaccess`ファイルで処理されるようになったため、メソッドは必要なくなりました。

次に、public/.htaccessファイルを最後のスラッシュを処理する新バージョンへ置き換えて下さい。

現在のルートへのアクセス

現在のルートへアクセスするには、Route::getCurrentRoute()の代わりに、Route::current()が使えるようになりました。

Composerの更新

以上の変更を行ったら、アプリケーションのコアファイルを更新するために、composer updateを実行して下さい!クラスのロードエラーになった場合は、updateコマンドを--no-scriptsオプションを付け、実行してみてください。ですから、composer update --no-scriptsと実行します。

ワイルドカードイベントリスナー

ワイルドカードイベントリスナーは、ハンドラー関数の引数にイベントを渡さなくなりました。発行されたイベントを見つける必要がある場合は、Event::firing()を使用してください。

ドキュメント章別ページ

Artisan CLI

ヘッダー項目移動

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

その他

?

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