laravel学んで2か月で自サービスを開発した話 Part2


みなさん、こんにちは。
早速ですが自サービスの開発記録を残していこうと思います。

サービス作成の背景および要件定義はこちらへ
https://qiita.com/k-hayack884/items/e571138e8bf7f35f7502

さすがにインストールやマイグレーション作成などの設定は省きます。

## ログイン機能の作成
管理機能のライブラリはLaravel/ui,Breeze,Jetstreamなどがある。
ただし、Laravel/uiのcssはBootstrap,Breeze,Jetstreamはtailwindcssが初期設定されている模様
学習サイトや技術ブログなどの文献ではLaravel/uiを使っているものが多かったが、あえてBreeze,Jetstreamに行く。  
理由は
- laravel8以降ではtailwindcssが推奨されていること。
- bootstrapでは自由なデザインをするのが難しいこと
- モダンなtailwind cssを使うワイ、カッコいい（ここ重要）


２段階認証などのセキュリティの機能面を考慮すれば、Jetstreamなんだが、とても難しいご様子。
公式にも
#### Laravelを初めて使用する場合は、Laravel Jetstreamへ進む前に、Laravel Breezeで勘所を掴むことをおすめします。
<a href="https://readouble.com/laravel/8.x/ja/starter-kits.html">
Laravel 8.x スターターキット
</a>  

そりゃ、公式が言っているんだからBreezeにすればいいやん！

#### あと、フロントエンドも決めないといけないね！せっかく学習したんだしvue.jsをインストールするぞ！

<a href="https://readouble.com/laravel/8.x/ja/starter-kits.html">
Laravel 8.x スターターキット
</a>  
  
#### Laravel Breezeでは、VueやReactを使ったInertia.jsのフロントエンド実装も提供しています。Inertiaスタックを使用するには、breeze:install Artisanコマンドを実行する際に、希望するスタックとしてvueまたはreactを指定します。
![question_head_boy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2281946/3bd93b77-d509-3944-59a6-9a7e8129f89b.png)
### Inertia.js??

とりあえず、インストールしてみたところ
```
    public function index()
    {
        return Inertia::render('User/Index',['users' => User::all()]);        
    }
```
えっ、いろんなlaravelのコード見たんだが、こんなコード見たの初めてなんだが・・・

もちろん、最初の３日はInertia.jsを使って開発してみたんだけど・・・
さっぱりわからん・・・
![fusagikomu_man.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2281946/760c617f-dd95-4688-0bb1-7410151e138d.png)

#### このままだと、開発速度が遅れちゃうのでInertia.jsは断念します。
vue.jsは直接インストールして使います。

## マルチログイン機能の準備
breezeをインストールすれば、
![スクリーンショット (1636).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2281946/9d37c4ac-9d74-e872-3291-89c7a27d17fc.png)
![スクリーンショット (1642).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2281946/6d5b3efc-4d06-d2b5-541d-b464aaaec0fd.png)

このようにログインや新規登録機能、パスワードリセット機能のコントローラーやviewが自動生成される
しかし、このままでは単一ログインはできるけれど、管理者とユーザーを分けてそれぞれの役割ごとにページを表示する必要がある
### 管理者用のテーブル、モデルの作成
まずは管理者のテーブルが必要なのでササっと作成
```2022_01_14_153851_create_admins_table.php
    public function up()
    {
        Schema::create('admins', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }
```
最初からあるcreate_admins_table.phpをコピペして終了
今度はModelにAdmin.phpを作成 これも最初からあるUser.phpをコピーして終了
※注意  
php artisan make:Model  
で直接作ってもいいけれど、Authクラスを継承していないので、ちゃんと継承させる
```Admin.php
class Admin extends Authenticatable //ModelからAuthenticatableに変更
```
おとなしくUsep.phpをコピペしたほうが確実

あとはhttp/ControllersにUserフォルダ、Adminフォルダを作成し、Authフォルダをそれぞれに突っ込む
![スクリーンショット (1638).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2281946/d8ead40c-3266-9c6f-e81b-0da6a16557d7.png)

同じく、viewsフォルダにuser,adminのフォルダを作り、Authフォルダをそれぞれに突っ込む
Userフォルダ、Adminフォルダを作成し、Authフォルダをそれどれに突っ込む
![スクリーンショット (1640).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2281946/abf3b3f1-bb43-8ac0-73f1-5c4e0e2d51e0.png)

これで、マルチログインの準備はできた。  
次はマルチログインの設定に行こうと思う。