Laravel 10🐿がリリースされたのだ🎉【Laravel 10 新機能】

https://twitter.com/taylorotwell/status/1625523834236420159

Laravel 10がきました！ぺちぱーとララベラー歓喜！新機能を紹介します
https://laravel.com/docs/10.x/releases


# Laravel ぺなんと
if文なしで実行する処理を切り替えることができ、ABテストで便利です

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435735/87dc8b70-d745-653c-b5fc-d311b4c3b75c.png)

```php
    public function boot(): void
    {
        Feature::define('beta-testers', fn (User $user) => match (true) {
            $user->isBetaTester() => true,
            default => false,
        });
    }
```

# Processファサード

シンフォニぃ使わなくてもコマンドを実行できます

```php
use Illuminate\Support\Facades\Process;
 
$result = Process::run('ls -la');
 
$result->successful();
$result->failed();
$result->exitCode();
$result->output();
$result->errorOutput();
$result->throw();
$result->throwIf($condition);
```

# 戻り値に型宣言

PHPDocのreturnが不要になります

https://twitter.com/taylorotwell/status/1610338749065433089

Laravel 9
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435735/f71ac76d-8c93-662a-f050-83cade7f822a.png)

Laravel 10
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435735/451efdee-ec67-1479-76ca-7c6b97e47b8c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435735/02e80d00-10a8-300b-e955-4031fddf271d.png)

# php artisan test --profile
PHPうにっと実行時に、プロファイルで実行時間が長いテストを見つけられます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435735/cd2f86fc-3db4-4e63-d6d0-f52233cddb44.png)

# パスワード生成関数
パスワード生成できます

```php
use Illuminate\Support\Str;
 
$password = Str::password();
 
// 'EbJo2vE-AS:U,$%_gkrV4n,q~1xy/-_4'
 
$password = Str::password(12);
 
// 'qwuar>#V|i]N'
```

# 呼び出し可能なバリデーション
冗長なメソッドがいらないです

Laravel 9
```php
namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class Titlecase implements Rule
{
    // commented constructor for brevity

    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        if (ucwords($value) !== $value) {
            $message[] = 'Each word in :attribute must begin with a capital letter';

            return false;
        }

        return $this->messages === [];
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return $message;
    }
}
```

Laravel 10

```php
namespace App\Rules;

use Illuminate\Contracts\Validation\InvokableRule;

class Titlecase implements InvokableRule
{
    /**
     * Run the validation rule.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @param  \Closure(string): \Illuminate\Translation\PotentiallyTranslatedString  $fail
     * @return void
     */
    public function __invoke($attribute, $value, $fail)
    {
        if (ucwords($value) !== $value) {
            $fail('Each word in :attribute must begin with a capital letter');
        }
    }
}
```

```php:routes/web.php
<?php

use App\Rules\Titlecase;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return view('welcome');
});

Route::post('/', function (Request $request) {
    $request->validate([
        'title' => ['nullable', new Titlecase],
    ]);

    return view('welcome');
});

```

# php artisan make:* のおもてなし
コントローラー名を入れ忘れても聞いてくれます

```bash
php artisan make:controller
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435735/ced0b25d-a83c-55f3-a2f4-7555e119c08e.png)


# laravel new example-application --pest

pestというテストフレームワークが使えます

# まとめ

いかがでしたか?(🤛

3/23~ぺちぱーの会議があります。もしよければぜひ参加してほしいのだ

https://phperkaigi.jp/2023/

https://rakus.connpass.com/event/273053/

https://connpass.com/event/275385/