九保すこひ@フリーランスエンジニア|累計300万PVのブログ運営中
さてさて、Laravel 8.x
がリリースされ新ログインパッケージ「Laravel Jetstream」の高機能に驚かされたばかりですが、少し前にまた新しいログインのパッケージがリリースされたのをご存知でしょうか。
その名も・・・・・・
Laravel Breeze(ららべる・ぶりーず)
です。
もしかかすると、「もうJetstream
があるのになんで❓」と思われた方もいるかもしれませんが、実はこのLaravel Breeze
はコンセプトが、
『シンプルなスタート地点』
となっていて、Jetstream
との違いは次のようになっています。
- シンプルにログイン、会員登録、パスワード再発行だけ
- livewire や inertia は使わず、Bladeを使う
そのため、ほぼLaravel 7.x
まで使われていた laravel/ui と同じものと考えていいでしょう。(もしかすると、livewire
やinertia.js
の学習コストを避けたいという要望があったのかもしれません)
そこで❗
今回は「よりシンプルなログイン機能」をLaravel Breeze
で実装してみます。
ぜひ皆さんのお役に立てると嬉しいです😊✨
「冬は箱でカイロを買います❗ドッサリ」
開発環境: Laravel 8.x
目次
パッケージをインストールする
では、まずはLaravel Breeze
をインストールします。
以下のコマンドを実行してください。
composer require laravel/breeze --dev
パッケージがインストールされたら、以下のArtisan
コマンドを実行します。
php artisan breeze:install
実行すると以下のような表示になります。
必要になるJavaScript、CSSをビルドする
まだこの状態では、ログイン機能に必要なJavaScript
、CSS
ファイルが有効になっていませんので、以下のコマンドを実行してビルドしてください。
npm install && npm run dev
※ ビルドが終わると、JavaScript
は以下のファイルにひとまとめにされています。
- JavaScript ・・・ public/js/app.js
- CSS ・・・ public/css/app.css
マイグレーションを実行する
では、最後にログインに必要なDB
テーブルをつくります。
以下のコマンドを実行してください。
php artisan migrate
実行が完了すると、こうなります。
これでインストールは完成です。
この状態でトップページを再読込みしてみてください。
以下のように画面右上にログインとユーザー登録ページへのリンクが表示されていると思います。
テストデータをつくる
ログイン機能のインストールは完了していますが、実際にログインができるユーザーデータがありませんので、これをつくっていきましょう。
※ なお、Jetstream
のインストールではLaravel 8.x
から新しくなったFactory
を使いましたが、今回のテーマは「シンプルなログイン機能のインストール」なので、Seeder
を使った内容にしています。もしFactory
がお好みの方は以下のURLを参考にしてみてください。
📝 Laravel8.x以降でログイン機能をインストールする方法
以下のコマンドを実行してください。
php artisan make:seed UsersTableSeeder
すると、ファイルが作成されるので中身を以下のように変更してください。
database/seeders/UsersTableSeeder.php
<?php namespace Database\Seeders; use App\Models\User; // 👈 ここに注意です use Illuminate\Database\Seeder; class UsersTableSeeder extends Seeder { public function run() { $names = [ 'taro' => '太郎', 'jiro' => '次郎', 'saburo' => '三郎', 'shiro' => '四郎', 'goro' => '五郎', 'rokuro' => '六郎', 'shichiro' => '七郎', 'hachiro' => '八郎', 'kuro' => '九郎' ]; foreach ($names as $name_en => $name_jp) { User::create([ 'name' => $name_jp, // ユーザー名 'email' => $name_en .'@example.com', // 👈 メールアドレス 'password' => bcrypt('xxxxxxxx') // 👈 パスワード ]); } } }
⚠ Laravel 8.x
からは、初期状態のモデルのフォルダが変更になっていますので気をつけてください。
では、Seeder
ファイルが実行されるようにLaravel
に登録しましょう。
database/seeders/DatabaseSeeder.php
<?php namespace Database\Seeders; use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { public function run() { // \App\Models\User::factory(10)->create(); $this->call(UsersTableSeeder::class); // 👈 ここを追加しました } }
これで準備は完了です。
以下のコマンドでDBを初期化&テストデータの追加をしましょう。
php artisan migrate:fresh --seed
コマンドを実行すると、users
テーブルはこのようになります。
テストしてみる
では、実際にログインしてみましょう❗
「https://******/login」にアクセスすると、ログインフォームが表示されるので、先ほど登録したテストデータのメールアドレス&パスワードを入力し、ボタンをクリックします。
すると・・・・・・
はい❗
ログインができました。
成功です😊✨
ちなみに – その1:関連情報
ログインに関連する独自設定のために関連情報をまとめました
ログイン後のリダイレクト先はどこで変更する?
以下の部分で変更できます。
app/Providers/RouteServiceProvider.php
public const HOME = '/dashboard';
※ なお、このリダイレクトURLは通常のログインだけでなく、ミドルウェアなどでいくつかの場所でも使われるURLです。
例:「app/Http/Middleware/RedirectIfAuthenticated.php」 など
ログインのコントローラーはどこにある?
「app/Http/Controllers/Auth/AuthenticatedSessionController.php」になります。なお、各メソッドの意味は次のとおりです。
- create(): ログインフォーム
- store(): ログインの実行
- destroy(): ログアウト
ログアウト後のリダイレクト先を変更するには?
以下の場所で変更できます。
app/Http/Controllers/Auth/AuthenticatedSessionController.php
public function destroy(Request $request) { Auth::logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); return redirect('/'); // 👈 ここを変更してください }
CSSフレームワークは何?
Laravel Jetstream
と同じくTailwind CSSです。
Tailwind(追い風)+ Breeze(そよ風) = 嵐が巻き起こるイメージでしょうか(笑)
ちなみに – その2:日本語化
日本語化するにはJetstream
とほぼ同じなので以下のURLを参考にしてみてください。
※ なお、Laravel Breeze
の場合はすでに「resource/views/auth」フォルダにビューが用意されています。
📝 Laravel Jetstream の各種フォームを日本語化する
ちなみに – その3:Jetstreamにあるその他の機能は?
残念ながら 2020.11.11現在、Laravel Breeze
には2段階認証などの機能はついていません。そのため、そういった機能が必要な場合はLaravel Jetstream
をインストールしてください。
もしかするとLaravel Breeze
も「livewire
・inertia
を使わない用」として今後はもっと高機能になっていくのかもしれませんね👍
おわりに
ということで、今回は「よりシンプルな」ログイン機能を実装できるパッケージLaravel Breeze
のご紹介をしました。
Laravel Jetstream
は、多機能ですがそれを使いこなすにはいろいろと知識が必要なので、こういった選択肢が出てくるのは嬉しい限りです。
ただ、できればBreeze
の方にも2段階認証がほしいかな、なんて思うのですが、それはやはりゼイタクな話ですよね・・・😂
もし今後2段階認証が追加されそうにないなと思ったら、自力で実装する記事を書いてみたいと思います。
ではでは〜❗
「検証用にiPhone 8(中古)を
注文しました(アプリ開発する❓)」