バックエンド

Laravel9で追加変更された12点をまとめてみた

2022年2月9日。

いよいよLaravelの時期安定版、『Laravel 9』がリリースされました。

前回の安定版『Laravel6』は2019年9月リリースだったので、

実に2年5ヶ月ぶりになります。

今回の『Laravel 9』は、

  • バグ修正が2024年2月まで
  • セキュリティ修正は2025年1月まで

ということで長期に渡り運用することになりそうです。

アオキ
注意点としては、PHP 8.0以上が必要になるので、PHP7系を使っていた場合はアップデートが必要になります。

『Laravel』ユーザーならおなじみの『Laracast』で

『Laravel 9』の追加変更点が解説されていたので、
 
備忘録も兼ねて整理することにしてみました。

LaraCast Laravel9

Laravel9で追加変更 その1 ルーティング コントローラーグルーピング

これまでルートファイルでグルーピングする時は、
グループ内で毎回コントローラ名を書いていたのですが、

Route::controller[コントローラ名]と指定することで、
まとめて1つで書くことができるようになりました。

Route::controller(PostsController::class)->group(function(){
    Route::get('/posts', 'index');
});
アオキ
ルートが増えてくると同じコントローラが並ぶので、スッキリ嬉しい改善ですね。

また、php artisan route:list の表示がシンプルになってみやすくなっています。

Laravel9で追加変更 その2 マイグレーションのクラス名が匿名に

データベースのテーブルを生成する『マイグレーション』ですが、

Php artisan make:migrate で作成した時のクラス名が変更になり、匿名になりました。

// Laravel 8
class CreateFailedJobsTable extends Migration
{

}


// Laravel 9 
return new class extends Migration
{

}
アオキ
Schema::create(‘users’) の箇所でテーブル名を指定しているので、クラス名で指定する必要はないっちゃあないですかね。

Laravel9で追加変更 その3 str() ヘルパ関数

文字列関連で、
Str:: というファサードがあったのですが、
よりシンプルに書けるように、str()という ヘルパ関数が追加されました。

//Laravel8 
Str::of('hello world')->upper(); // 大文字に

// Laravel9
str('hello world')->apper();

Laravel9で追加変更 その4 to_route() ヘルパ関数

データ保存後リダイレクトをかけたりする時に、redirectとrouteを組み合わせていたのですが、
to_route()というヘルパ関数を使うことでスッキリ書けるようになっています。

// Laravel8
return redirect()->route('home');

// Laravel9
return to_route('home');
アオキ
細かい改善ですがスッキリしていいですね。

Laravel9で追加変更 その5 例外ページの改善

例外を発生させた時の画面が若干見やすくなっています。

Route::get('/', function(){
    throw new \Exception('Woops');  
})

Laravel9で追加変更 その6 Blade::render

Blade::render() の中にBladeテンプレートを直書きできるようになったそうです。

Route::get('/', function(){
    return Blade::render('{{ $greeting}}', @if (true) World @endif, ['greeting' => ''Hello'] );
})
アオキ
個人的にはBladeはBladeで書きたいので使わないとは思いますが、簡単なテストなら使えるかも?

Laravel9で追加変更 その7 scopeBindings

あるユーザーが投稿した記事なら表示、それ以外なら表示しないという場合、

Laravel8まではひと手間かかっていたんですが、

Laravel9では scopeBindings() をつける事で判定をかけてくれるようになりました。

// Laravel8
Route::get('/users/{user}/posts/{post:id}', function( User $user, Post $post){
    return $post;
})
// リレーションもつなぐ必要ある

// Laravel9
Route::get('/users/{user}/posts/{post}', function( User $user, Post $post){
    return $post;
})->scopeBindings();
アオキ
これは地味に便利ですね。

Laravel9で追加変更 その8 テストカバレッジ

テストに追加オプションで –coverageや–minが追加され、
各ファイルの実行結果などをわかり易く表示してくれます。

php artisan test --coverage

php artisan test --min

pecl install xdebug
アオキ
ここはXdebugの設定が必要になるので動画見てもらったほうがわかりやすいと思います。

Laravel9で追加変更 その9 Laravel Scoutでデータベース指定

全文検索ライブラリ、Laravel Scoutでデータベースも指定できるようになったようです。

composer require laravel/scout

php artisan vendor:publish // configファイルを出力

>8

Copied File [scout.php to config/scout.php]

.envに追記
SCOUT_DRIVER=database

Modelのuse内に追記

use Laravel\Scout\Searchable;

class Post extends Model
{
    use HasFactory, Searchable; // Searchableを追記
    
    public function toSearchableArray()
    {
        return [
            'title' => $this->title,
            'body' => $this->body
        ];
}
 
 Route::get('/', function(){
    return Post::search('xxx')->get(); // searchメソッドで検索結果表示
    //return Post::search('xxx')->paginate();
 })
アオキ
Laravel Scoutはあまり使ってなかったのでこれを気に取り組んでみます。

Laravel9で追加変更 その10 full text indexing

データベースのインデックス設定も簡単になったようです。

// マイグレーションファイル内

    $table->text(body')->fulltext();
    

// Tinkerで実施

Post::whereFullText('body', 'xxx')->count();

Laravel9で追加変更 その11 enum

EnumはPHP8.1で実装されていて、Laravel9でも実装できるようになっています。

// マイグレーション
$table->enum('state', ['draft', 'archived', 'published']);

// クラス (app/Enums/PostState.php)
enum PostState
{
    case Draft;
    case Published;
    case Archved;
}
アオキ
Enumも設定見込むならPHP8.1まで上げておかないとですね。進化が早い。。

Laravel9で追加変更 その12 アクセサー・ミューテーションがシンプルに

データベースにデータを保存時にデータを加工したり、
取り出したりする時に表示を変えたりという場合に、

アクセサー、ミューテーターという機能があります。

以前は getXXXAttribute やsetXXXAttributeというメソッドを作る必要があったのですが、
Laravel9ではget, setで使えるようになり、1メソッドでそれぞれ設定できるので
シンプルに書けるようになっています。

// モデル
protected $appends = [
    'path'
];

// Laravel8
public function getPathAttribute()
{
    return route('posts.show', $this);
}

// Laravel9 その1
 
public function path(): Attribute
{
    return Attribute::get(fn() => route('posts.show', $this));
}

// Laravel9 その2

public function username(): Attribute
{
    return new Attribute(
        get: fn($value) => ucwords($value), // アクセサー
        set: fn($value) => strtolower($value) // ミューテーター
    );
    
}

// tinker

$user = new User;
$user->username = 'ABC'; // 大文字で登録すると
$user
> username: "abc"; // ミューテータ(set)がきいて小文字で設定されている
アオキ
PHP8の記述方法も合わせて確認しなきゃですね。

Laravel9で追加変更点をまとめてみて

Laravel8でJetStreamなど大きな変更が入ってからは、

長らくテスト、実験を経て、安定版になったのだろうと感じます。

細かい改善が多いのは、それだけ完成度が高いという事なんでしょうね。

アオキ
Laravel9のUdemy講座も頑張って作りまっせー

PHP/Laravel講座




関連記事一覧 (一部広告あり)

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

CAPTCHA


最近の記事

アーカイブ

  1. オンライン教材

    【AWS】【初心者向け】インフラの基礎からわかる講座をリリースしました【Udem…
  2. STEAM教育

    熊本市東区でプログラミングのワークショップやります〜夏休み特別企画 こども向けス…
  3. オンライン教材

    【PHP/Laravel】初心者向けの動画をリリースしました【Udemy】
  4. オンライン教材

    【ExcelVBA】初心者向け講座をリリースしました。【Udemy】
  5. CG関連

    【P5.js】初心者向けの動画をリリースしました(プログラミング×数学物理)【U…
PAGE TOP