書籍「Laravelの教科書」Laravel13対応サポートガイド公開中 → ダウンロードはこちら

Laravel8へバージョンアップ:全14個の変更点と新機能まとめ

Laravelバージョンアップ・ニュース

Laravel8が2020年9月8日にリリースされました。

Laravel7との違い、便利な新機能情報、旧バージョンのサポートなど、まとめました。

下記の公式ブログに書かれた項目はすべて網羅しております。

実体験レポートも掲載しておりますので、Laravelユーザーの方、使ってみようかなと思っている方は、参考にしてください。

Laravel8の新機能

公式ファイルに書かれていたアップデート項目は、下記の通りです。

私の目線ですが、影響が多きそうな項目にだけ★をつけておきました。

すべてチェックするのが面倒な場合には、★部分だけご確認ください。

  • Laravel Jetstream :新たな認証機能追加
  • Models Directory :モデルファイルの場所変更 ★
  • Models Factory Classes :ダミーデータ作成がより便利に
  • Migration Squashing : 不要なマイグレーションファイルの処理 ★
  • Job Batching :ジョブのバッチ機能追加
  • Rate Limitingの改善 :アクセス制限などが便利に
  • Improved Maintenance Mode :メンテナンスモード改良
  • Closure Dispatch / Chain :失敗したときの処理
  • Dynamic Blade Components :コンポーネントを便利に指定
  • Event Listener Improvements :イベントリスナー処理の改良
  • Time Testing Helpers :新たな時間変更の関数が利用可能に
  • Artisan serve Improvements: Artisan Serveコマンドの改良
  • Tailwind Pagination Views:ページネーションビュー変更
  • Routing Namespace Updates:ルートファイルの名前空間の変更 ★

Laravel Jetstream :新たな認証機能追加

ログイン・認証機能です。

使用する際には、コンポーザーを使ってインストールします。

composer require laravel/jetstream

このあと、LivewireまたはInertiaのどちらかのライブラリを選択します。

LivewireはBlade、InertiaはVue.jsを使用します。

php artisan jetstream:install livewire

npm install && npm run dev

php artisan migrate

ユーザーログイン・登録・メール認証・2段階認証・セッション管理などを便利にしてくれる機能ながら、どうも使いにくいという声もあり。

とりあえずはこれまでおりの方法を使っていこうとおもいます。

Models Directory :モデルファイルの場所変更

これまでモデルファイルはappフォルダの直下にありました。

コントローラーやビューファイルはちゃんと「Controller」フォルダ、「View」フォルダに入っているのにどうして?

って感じしますよね。

同じように感じたユーザーが多かったようで、今回のアップデートにより、モデルファイルも app/Modelsフォルダの中に格納されるようになりました。

Models Factory Classes :ダミーデータ作成がより便利に

Laravelには、ダミーデータを作れる機能があります。

モデルファクトリを使うと、大量のダミーデータを作ることができます。

今回のバージョンアップで、モデルファクトリを非常に便利に作れるようになりました。

use App\Models\User;

User::factory()->count(50)->create();

特にリレーションがある場合に、便利です。

たとえばuserモデルがpostsモデルとの間にリレーションがある場合、下記のように【hasPosts】という関数が使えます。

<?php

namespace Database\Factories;

use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;

class UserFactory extends Factory
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = User::class;

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        return [
            'name' => $this->faker->name,
            'email' => $this->faker->unique()->safeEmail,
            'email_verified_at' => now(),
            'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
            'remember_token' => Str::random(10),
        ];
    }
}

なおLaravel8でダミーデータを作成する方法については、こちらの記事に詳細を解説しています。

Migration Squashing : 不要なマイグレーションファイルの処理

マイグレーションを度々実行すると、マイグレーションファイルの量が増えていきますよね。

Laravel 8では、 マイグレーションファイルを圧縮保存するコマンドができました。

php artisan schema:dump

コマンドを実行すると、database/shemaディレクトリにshemaファイルができ、このなかにマイグレーションのデータが格納されます。

マイグレーション実行時には最初にshcemaファイルのマイグレーションを実行します。

こうすることで、処理の高速化が可能に。

実行時に既存のマイグレーションファイルを削除したい場合は、–prune を付けます。

$ php artisan schema:dump --prune

Job Batching :ジョブのバッチ機能追加

then, catch, finally の三段階で処理を指定したりもできます。

use App\Jobs\ProcessPodcast;
use App\Podcast;
use Illuminate\Bus\Batch;
use Illuminate\Support\Facades\Batch;
use Throwable;

$batch = Bus::batch([
    new ProcessPodcast(Podcast::find(1)),
    new ProcessPodcast(Podcast::find(2)),
    new ProcessPodcast(Podcast::find(3)),
    new ProcessPodcast(Podcast::find(4)),
    new ProcessPodcast(Podcast::find(5)),
])->then(function (Batch $batch) {
    // All jobs completed successfully...
})->catch(function (Batch $batch, Throwable $e) {
    // First batch job failure detected...
})->finally(function (Batch $batch) {
    // The batch has finished executing...
})->dispatch();

return $batch->id;

どこかでうまくいかなくても処理を継続させることも可能。

$batch = Bus::batch([
    // ...
])->then(function (Batch $batch) {
    // 全ジョブが成功して完了した
})->allowFailures()->dispatch();

 Rate Limitingの改善 :アクセス制限などが便利に

Laravelでは、RouteにURLにアクセスしたときの処理を記述します。

Rate limitingを使えば、このRouteで設定されたアクセスにレート制限をかけることができます。

たとえばIPアドレスごとに1分間に100回のアクセスを可能にすることも可能。

RateLimiter::for('uploads', function (Request $request) {
    return $request->user()->vipCustomer()
                ? Limit::none()
                : Limit::perMinute(100)->by($request->ip());
});

レート制限を超えたときのレスポンスも独自に設定できます。

Improved Maintenance Mode :メンテナンスモード改良

これまでも php artisan down とするとメンテナンスモードにできました。

今回はここに secretオプションを使って、メンテナンス中もページを見れるトークンを特定できるようになりました。

php artisan down --secret="1630542a-246b-4b66-afa1-dd72a4c43515"

工事中の場所を迂回してサイトにアクセスするような感じですね。

Closure Dispatch / Chain :失敗したときの処理

新たな catchメソッドを使うことで、もしClosure処理が無事行えなかった場合に実行する処理を設定できます。

use Throwable;

dispatch(function () use ($podcast) {
    $podcast->publish();
})->catch(function (Throwable $e) {
    // This job has failed...
});

Dynamic Blade Components :コンポーネントを便利に指定

コンポーネントファイルとは、テンプレートファイルのようなものです。

コンポーネントを使うとき、場合によってはどのコンポーネントが使われるか判断できない場合があります。

下記のように【dynemic-component】を使って指定しておけば、実行時の変数や値をもとにコンポーネントが受け渡されます。

<x-dynamic-component :component="$componentName" class="mt-4" />

Event Listener Improvements :イベントリスナー処理の改良

イベントリスナー機能を使う際、Laravelがそのタイプのイベントをリスナーが処理するか、調べられるようになりました。

use App\Events\PodcastProcessed;
use Illuminate\Support\Facades\Event;

Event::listen(function (PodcastProcessed $event) {
    //
});

Time Testing Helpers :新たな時間変更の関数が利用可能に

Time Testing Helpersが使えるようになりました。

Ruby on Railsの機能だったようですね。

現在時刻をもとに、設定した時間に変更して、テストができる機能。

public function testTimeCanBeManipulated()
{
    // Travel into the future...
    $this->travel(5)->milliseconds();
    $this->travel(5)->seconds();
    $this->travel(5)->minutes();
    $this->travel(5)->hours();
    $this->travel(5)->days();
    $this->travel(5)->weeks();
    $this->travel(5)->years();

    // Travel into the past...
    $this->travel(-5)->hours();

    // Travel to an explicit time...
    $this->travelTo(now()->subHours(6));

    // Return back to the present time...
    $this->travelBack();
}

Artisan serve Improvements: Artisan Serveコマンドの改良

PHP Artisan Serveコマンドを実行すると、自動で.envファイルの変更を読み込んでくれるようになりました。

Tailwind Pagination Views:ページネーションビュー変更

Laravelのページネーターは、Thaiwindページネーションビューをデフォルトで使用するようになりました。

Bootstrap3と4のビューもこれまでどおり利用可能です。

Routing Namespace Updates:ルートファイルの名前空間の変更

以前はRouteServiceProviderファイルに、 コントローラーのパスがデフォルトで入っていました。

そのため、ルートファイルに記入する必要はありませんでした。

Laravel 8ではデフォルトではデフォルトでこの設定が無効になっています。そのため、ルートファイルにコントローラーのパスの記述が必要です。

use App\Http\Controllers\UserController;

Route::get('/users', [UserController::class, 'index']);

これまでの方法がよければ、RouteServiceProviderファイルの設定を変えれば、毎回ルートファイルにパスを入れる必要はなくなります。

処理方法は、こちらで解説しています。

Laravelの旧バージョンのサポート

Laravelは6か月ごとにバージョンを更新します。

新しいバージョンが出たら、古いバージョンのサポートはどうなるのか?

しばらくはサポートを継続してくれますが、期限付きです。

あまり古いバージョンは更新していったほうが良さそうですね。

なおLaravel バージョン6はLTS版(長期間サポート版)であるため、サポート期間が長めに設定されています。

!2021年2月追記:今後のバージョンはアップは1年に1度ペースになるとのこと!

詳しくはこちらをどうぞ。

Laravelバージョンアップ・ニュース

生成AIを「安全に」使うための研修・セミナー

お問い合わせ

生成AIの業務活用で気になるのは、効率だけでなくセキュリティです。 実践的な活用に加え、セキュリティ対策もお伝えします。

詳細を見てみる
 

生成AIを「安全に」使うための研修・セミナー

お問い合わせ

生成AIの業務活用で気になるのは、効率だけでなくセキュリティです。 実践的な活用に加え、セキュリティ対策もお伝えします。

詳細を見てみる

【Laravelの教科書・プレゼント】

Junko
Laravelの使い方を覚えたい!と思ったら、ぜひ、役立ててほしいです。 基礎編は無料でプレゼント中です♪
ひつじプログラマ
会員制サイトをいちから作っていくよ。ボタンをクリックして詳細を見てね。
Laravelの教科書の詳細を見る

最新版Laravel13への対応に対応。Laravel8からの各バージョンのテキストもご覧になれます♪

【無料プレゼント】

「LaravelでWebアプリをいちから作れるようになりたい!」

そんなLaravel初心者のあなたへ【Laravelの教科書】基礎編プレゼント中! 会員制フォーラムサイトを学習しながら作れます。

詳細はこちらをクリック

最新のLaravel13に対応。Laravel8からの各バージョンのテキストもご覧になれます♪

Laravelの本を書きました。


ひつじが目印♪

Laravelの使い方を分かりやすく解説した本を書きました。 書店やAmazon等のオンラインショップにて販売中
最新版Laravel13対応用サポートガイド(PDF)あり

書籍の詳細を見てみる

Laravelの本書きました。


ひつじが目印♪
クリックするとamazonページへ。
最新版Laravel13対応用
サポートガイド(PDF)あり

書籍の詳細を見てみる
シェアする
Twitter始めました。

コメント

タイトルとURLをコピーしました