もしかして、最新のLaravelのバージョンを紹介できるのは初めて?いつも遅れて現在のひとつ前のバージョンを紹介してきたのですが、半年に1回のリリースが年に1回となり、さらに次のバージョンのリリースが遅れて、ついに私に追いつかれてしまったのです。

バージョン

毎回のように、まずサポートのスケジュールを見てみましょう。

なるほど次のバージョンLTS(長期サポート)となりますね。

新規プロジェクト

composerはすでにシステムにインストールされていると仮定して、以下のコマンドがl8xのディレクトリ名でLaravelをインストールします。ちなみに、phpは最低7.3のバージョンが必要です。私の環境ではすでに7.4なので大丈夫。

$ composer create-project --prefer-dist laravel/laravel:^8.0 l8x

ウェブサーバーなどが書き込みを行うディレクトリにはパーミッションが必要です。

$ cd l8x
$ chmod -R a+w storage bootstrap/cache

以下を実行して、

$ php artisan serve

ブラウザでhttp://localhost:8000にアクセスすると、ページを見ることができます。

前の7.xのバージョンとは変わりましたね。TailWind CSSの使用のためかな。

これ以降の変更をみるために、この時点でパージョン管理をしておきましょう。

$ cd l8x
$ git init
$ git add .
$ git commit -am "init"

ユーザー認証のパッケージ

さて、ここからが前のバージョンと大幅に変わったところです。Laravelは基本的にいわゆるバックエンド、サーバーアプリなのですが、使用するフロントエンドにも好みがあり、TailWindVueJS, LivewireをLaravelの認証のパッケージを積極的に採用しています。今までのLaravel UIパッケージの代わりに、Laravel Breezeの登場です。そよ風のように優しく(易しく?)インストールということでしょうか。

まず、必要なパッケージのインストールから、

$ composer require laravel/breeze --dev

次に、以下を実行して会員登録画面やログイン画面などを作成します。bladeだけでなく、vueやreactの指定も可能です。

$ php artisan breeze:install blade

これにより以下のファイルが追加あるいは編集されています。

        new file:   app/Http/Controllers/Auth/AuthenticatedSessionController.php
        new file:   app/Http/Controllers/Auth/ConfirmablePasswordController.php
        new file:   app/Http/Controllers/Auth/EmailVerificationNotificationController.php
        new file:   app/Http/Controllers/Auth/EmailVerificationPromptController.php
        new file:   app/Http/Controllers/Auth/NewPasswordController.php
        new file:   app/Http/Controllers/Auth/PasswordResetLinkController.php
        new file:   app/Http/Controllers/Auth/RegisteredUserController.php
        new file:   app/Http/Controllers/Auth/VerifyEmailController.php
        new file:   app/Http/Requests/Auth/LoginRequest.php
        modified:   app/Providers/RouteServiceProvider.php
        new file:   app/View/Components/AppLayout.php
        new file:   app/View/Components/GuestLayout.php
        modified:   composer.json
        modified:   composer.lock
        modified:   package.json
        modified:   resources/css/app.css
        modified:   resources/js/app.js
        new file:   resources/views/auth/confirm-password.blade.php
        new file:   resources/views/auth/forgot-password.blade.php
        new file:   resources/views/auth/login.blade.php
        new file:   resources/views/auth/register.blade.php
        new file:   resources/views/auth/reset-password.blade.php
        new file:   resources/views/auth/verify-email.blade.php
        new file:   resources/views/components/application-logo.blade.php
        new file:   resources/views/components/auth-card.blade.php
        new file:   resources/views/components/auth-session-status.blade.php
        new file:   resources/views/components/auth-validation-errors.blade.php
        new file:   resources/views/components/button.blade.php
        new file:   resources/views/components/dropdown-link.blade.php
        new file:   resources/views/components/dropdown.blade.php
        new file:   resources/views/components/input.blade.php
        new file:   resources/views/components/label.blade.php
        new file:   resources/views/components/nav-link.blade.php
        new file:   resources/views/components/responsive-nav-link.blade.php
        new file:   resources/views/dashboard.blade.php
        new file:   resources/views/layouts/app.blade.php
        new file:   resources/views/layouts/guest.blade.php
        new file:   resources/views/layouts/navigation.blade.php
        modified:   resources/views/welcome.blade.php
        new file:   routes/auth.php
        modified:   routes/web.php
        new file:   tailwind.config.js
        new file:   tests/Feature/Auth/AuthenticationTest.php
        new file:   tests/Feature/Auth/EmailVerificationTest.php
        new file:   tests/Feature/Auth/PasswordConfirmationTest.php
        new file:   tests/Feature/Auth/PasswordResetTest.php
        new file:   tests/Feature/Auth/RegistrationTest.php
        modified:   webpack.mix.js

前バージョンよりインストールされるファイルの数が倍以上になっています。これは、ブレードのコンポーネント(ressources/views/components/*)を多用しているからです。コンポーネントはまだ実際に使用したことないですが、将来その日がやってきそうです。

今度は、javascriptやcssのトランスパイルのために、nodeのパッケージのインストールとwebpackの実行です。

$ npm install && npm run dev

次はDBの設定です。mysqlのコマンドを実行して、l8xのデータベースを作成します。

$ mysql -u root -p
mysql> create database l8x;

.envファイルを次のように編集してDB情報を入れます。

DB_DATABASE=l8x
DB_USERNAME=DBユーザー名
DB_PASSWORD=DBパスワード

以下のコマンドを実行してDBテーブルを作成します。

$ php artisan migrate

以下のように、5つのテーブルが作成されます。

mysql> show tables;
+------------------------+
| Tables_in_l8x          |
+------------------------+
| failed_jobs            |
| migrations             |
| password_resets        |
| personal_access_tokens |
| users                  |
+------------------------+
5 rows in set (0.00 sec)

L7.xと比べて1つテーブルが増えていますね。personal_access_tokensのテーブルです。これはLaravel Sanctumで使用されるトークンのためらしい。楽しい将来の調査とします。

再度、ブラウザでhttp://localhost:8000/registerにアクセスします。

と入力して、「Register」ボタンをクリックすると、

新規会員登録成功です。

Laravel UIパッケージはどこへ?

さて、前バージョンまで使用していた、Laravel UIパッケージはもう使えないのでしょうか?
そんなことはないです。L8.xを対応しています。

しかし、残念なことにレガシー扱いになってしまいました。シンプルさが私には良かったのですが。

This legacy package is a very simple authentication scaffolding built on the Bootstrap CSS framework. While it continues to work with the latest version of Laravel, you should consider using Laravel Breeze for new projects. Or, for something more robust, consider Laravel Jetstream.

ちなみにパッケージのインストールは以下となります。もちろん、Laravel Breezeを削除してからのインストールとなりますので注意を。

$ composer require laravel/ui "^3.0"
$ php artisan ui bootstrap --auth

この後の手順は、上と同じです。

By khino