- 投稿日:2020-06-25T17:24:46+09:00
ElasticBeanstalkのWorkerサーバーでLaravelのスケジューラを実行する
ElasticBeankTalk及び、Workerサーバー、またLaravelについての説明はしないので知らない人は対象外です。
まず、Laravelのタスクスケジューラですが、一般的にはcronを以下のように設定して利用します。
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1ElasrticBeanstalkで利用する場合にどの様にcronを設定するのが良いでしょうか。
また、オートスケールなどでインスタンスが増えても1台だけが実行されることを守るにはどうしたら良いでしょう。そんなときはElasticBeanstalkの機能を利用すると実現できます。
まずはcron.yaml
というファイルをアプリケーションのルートディレクトリに作成します。
※このとき、cron.yml
というファイル拡張子だと何故かEBで認識されませんでしたcron.yamlversion: 1 cron: - name: "backup-job" url: "/backup" schedule: "0 */12 * * *" - name: "audit" url: "/audit" schedule: "0 23 * * *"こちらは公式開発者ガイドの例です。
scheduleにcronの時間設定、urlにその際に実行してほしいHTTPエンドポイントが設定できることが見てわかります。これだけではHTTPエンドポイントが利用されるのでLaravelのタスクスケジューラは利用できません。
なので、以下のライブラリを導入しましょう。https://github.com/dusterio/laravel-aws-worker
導入方法はリポジトリを参照してください。先程のcron.yamlは以下のように設定しましょう。
cron.yamlversion: 1 cron: - name: "schedule" url: "/worker/schedule" schedule: "* * * * *"これだけです。
これでEBでは毎分/worker/schedule
を実行するQueueを発行します。オートスケール時などは、EBはDynamoDBを利用してcronを実行するインスタンスのリーダーを選出しているそうです。
リーダーのインスタンスが利用できない状態になると、別のインスタンスがリーダーに再選出される仕組みになっています。これで安心してタスクスケジューラを利用できますね。
- 投稿日:2020-06-25T16:38:46+09:00
composerの調子が悪かったがなんとか解決
Debugbarをインストールしようとしたんですがプロンプトが途中で止まって返ってこなくなりました。
$ composer require barryvdh/laravel-debugbar --dev問題
調子が悪い時は以下のコマンドでどこが悪いかを調べるそうです。
$ composer diagnoseしかし、私の場合以下の場所でフリーズしました。
$ composer diagnose composer diagnoseChecking composer.json: OK Checking platform settings: OK Checking git settings: OK Checking http connectivity to packagist:対策
$ composer self-update --preview $ composer update -v $ composer diagnoseDebugbarの設定の続き
やっとインストールできたので設定を追記して動作確認
config/app.php'providers' => [ + Barryvdh\Debugbar\ServiceProvider::class, ], 'aliases' => [ + 'Debugbar' => Barryvdh\Debugbar\Facade::class, ]参考
- 投稿日:2020-06-25T13:44:23+09:00
Can't open /home/laradock/.nvm/nvm.sh がでたとき
/etc/hosts に以下を追記
(具体的なIPアドレスはhttps://githubusercontent.com.ipaddress.com/raw.githubusercontent.com ここで調べられる)199.232.68.133 raw.githubusercontent.com
Windowsユーザの場合は、ローカルにあるhostsファイルも編集が必要
C:\Windows\System32\drivers\etc\hosts
- 投稿日:2020-06-25T12:03:16+09:00
【Laravel】Herokuでメール送れるようにする
問題
Laravelってユーザー認証とか用意してくれてありがたいよね
laravel new で作ったアプリにAuth入れてユーザー登録はうまくいった
ただ、パスワードリセット用のメールを送ろうとしたら、エラー500が出て何時間も詰まった
環境変数とか設定してないから、そりゃエラーは出るだろうけど、それだけじゃなかったので備忘録として記しておこう前提
Laravel6です
なので、laravel/uiをインストールするところから始めます
初心者にとってはおまじないですが、以下を実行// laravel/uiをインストール % composer require laravel/ui // Auth関連ファイル(基本的なスキャフォールド)を生成 % php artisan ui vue --auth // フロントエンドに必要なパッケージをインストール&必要なファイルをコンパイル・ビルド % npm install && npm run devこのようにしてAuth機能を使えるようになっていることが前提です
解決法
解決法というかメール送れるようにする方法
今回は、GメールのSMTPを使ってメールを送れるようにしたいと思います
行うことは以下のリスト
- Gメール側でアプリパスワードを生成
- Herokuの環境変数設定
- mail.phpの編集
では順にやっていきましょう
アプリパスワードの生成
Googleアカウントからセキュリティ→Googleへログインパネルのアプリパスワード
※2段階認証をオンにしないとアプリパスワードは出てこない
パスワード聞かれるので入力
デバイス名をその他でアプリ名(何でも良さそう?)を記入→生成
基本、生成したパスワードは覚えておく必要がないが、これをあとで環境変数に設定するのでメモしておくHerokuの環境変数を設定
% heroku config:set MAIL_MAILER=smtp % heroku config:set MAIL_HOST=smtp.gmail.com % heroku config:set MAIL_PORT=587 % heroku config:set MAIL_USERNAME=自分のGmailアドレス % heroku config:set MAIL_PASSWORD=アプリパスワード(16桁) % heroku config:set MAIL_ENCRYPTION=tls % heroku config:set MAIL_FROM_ADDRESS=自分のGmailアドレス % heroku config:set MAIL_FROM_NAME=アプリ名TLSの代わりにSSLを使う場合は以下農用に設定してください
% heroku config:set MAIL_PORT=465 % heroku config:set MAIL_ENCRYPTION=sslローカル環境でメール送信を行いたい場合は、これと同様の環境設定を.envファイルに書き込む
mail.phpの編集
デフォルトで設定してあるなら編集する必要はないですね
確認してくださいconfig/mail.php'default' => env('MAIL_MAILER', 'smtp')smtpの設定は、さらに下の方でデフォルトで設定してあるので、そのまま使いましょう
おわり
3つのことを行うだけで、Heroku実環境でLaravelアプリからメールが送れるようになります
簡単ですね
もし、これでもエラーが出てしまった場合は、エラーをしっかり読んで調べましょう
エラー500などのページしか出てこない場合は、Herokuの環境変数にAPP_DEBUG=trueを設定してみましょう
エラーを確認した後は必ずAPP_DEBUG=falseに戻しておきましょう
- 投稿日:2020-06-25T11:53:37+09:00
【Laravel7でユーザー認証_8】メールアドレス変更時にメール認証を行う
はじめに
Laravelのユーザー認証機能を利用する際、会員がメールアドレスを変更したら、メール認証を実行する手順をまとめます。
環境
XAMPP環境でLaravelが使えるように設定してあります。
- Windows10 Pro 64bit
- PHP 7.3.18
- Laravel 7.12.0
- MariaDB 10.1.32
また、Laravelプロジェクトは以下の手順で作業を進めており、会員登録時にメール認証を行う段階までできている状態です。
- 【Laravel7でユーザー認証_1】基本のき
- 【Laravel7でユーザー認証_2】ユーザー認証を日本語化
- 【Laravel7でユーザー認証_3】ユーザー認証をメールアドレスからユーザー名に変更する
- 【Laravel7でユーザー認証_4】パスワード変更フォームを作成する
- 【Laravel7でユーザー認証_5】ユーザーを倫理削除(SoftDelete)する
- 【Laravel7でユーザー認証_6】ユーザーの情報を表示・変更する設定画面を作成する
- 【Laravel7でユーザー認証_7】会員登録時にメール認証を行う
実装手順
メールアドレス変更時、メール認証をリセットする
メールアドレスを変更する処理の中に、メール認証をリセットする処理(
email_verified_at
をNULLにする)を追加します。app/Http/Controllers/SettingController.phppublic function changeEmail(ChangeEmailRequest $request) { //ValidationはChangeUsernameRequestで処理 //メールアドレス変更処理 $user = Auth::user(); $user->email = $request->get('email'); + $user->email_verified_at = null; $user->save(); //homeにリダイレクト return redirect()->route('setting')->with('status', __('Your email address has been changed.')); } }
認証メールを送信する
メール認証のリセット処理の後、引き続き認証用のメールを送信します。
ユーザー登録時の処理をなぞってみると、認証用のメールはUsers
クラスのsendEmailVerificationNotification
メソッドで送れるようです。
notify
を使って$user->notify(new VerifyEmail());
という書き方もできそうです。
その場合はuse Illuminate\Auth\Notifications\VerifyEmail;
を忘れずに。処理完了のメッセージも変更しておきます。
app/Http/Controllers/SettingController.phppublic function changeEmail(ChangeEmailRequest $request) { //ValidationはChangeUsernameRequestで処理 //メールアドレス変更処理 $user = Auth::user(); $user->email = $request->get('email'); $user->email_verified_at = null; $user->save(); + $user->sendEmailVerificationNotification(); //homeにリダイレクト - return redirect()->route('setting')->with('status', __('Your email address has been changed.')); + return redirect()->route('setting')->with('status', __('A confirmation email for changing the email address has been sent.')); } }同じメールアドレスの場合、何も処理せずに完了表示とする
メールアドレスの変更処理を行った際、同じメールアドレスであれば特に処理せずに「完了しました」と表示させたいと思います。
(エラー表示にしたい場合は、FormRequest
でwithValidator
を定義するとよさそうです。)app/Http/Controllers/SettingController.phppublic function changeEmail(ChangeEmailRequest $request) { //ValidationはChangeUsernameRequestで処理 //メールアドレス変更処理 $user = Auth::user(); + + if ($user->email == $request->get('email')){ + return redirect()->route('setting')->with('status', __('Your email address has been changed.')); + } + $user->email = $request->get('email'); $user->email_verified_at = null; $user->save(); $user->sendEmailVerificationNotification(); //homeにリダイレクト return redirect()->route('setting')->with('status', __('A confirmation email for changing the email address has been sent.')); } }
日本語対応
resources/lang/ja.json+ "A confirmation email for changing the email address has been sent.": "メールアドレス変更の確認メールを送信しました。" }
未認証の場合もメールアドレス変更フォームを使えるよう変更
認証が通っていないユーザーも、メールアドレス変更のフォーム表示
showChangeEmailForm
と処理changeEmail
ができるように、__construct
の定義を変更します。
(ここで表示部分だけ許可したがために、ハマりました……。)
->except
で複数指定したいので、配列にして渡します。app/Http/Controllers/SettingController.phppublic function __construct() { $this->middleware('auth'); - $this->middleware('verified')->except('index'); + $this->middleware('verified')->except(['index', 'showChangeEmailForm', 'changeEmail']); }viewについても、リンクが切れないように修正します。
resources/views/setting/index.blade.php<a href="{{ route('email.form') }}" - @if ($auth->email_verified_at) class="list-group-item list-group-item-action d-flex justify-content-between align-items-center" - @else - class="list-group-item list-group-item-action d-flex justify-content-between align-items-center disabled" tabindex="-1" aria-disabled="true" - @endif > <dl class="mb-0"> <dt>{{ __('E-Mail Address') }}</dt> <dd class="mb-0">{{ $auth->email }}</dd> </dl> - @if ($auth->email_verified_at) <div><i class="fas fa-chevron-right"></i></div> - @endif </a>動作確認
▼メールアドレスを変更した直後の表示。認証ができていなくても、アカウント削除とメールアドレス変更は利用可能。
▼認証済ユーザーが、同じメールアドレスで変更処理した場合、特に処理せず完了メッセージ表示。
参考サイト
- 投稿日:2020-06-25T11:36:27+09:00
【laravel-admin】 インストール&画面作成まで 編
こんにちは。バックエンドエンジニアの佐和です。
案件でしばらくlaravel-adminという管理画面を作成するためのライブラリを使っていたので、調べたことやつまづいたところも含めて少しずつ書き起こそうと思います。
まずはインストール編です。簡単に管理画面を確認できるところまで見ていきたいと思います。laravel-adminとは
laravelで簡単にDBの管理画面を作成することができるライブラリです。
ドキュメントやデモサイトなど使用するために必要な資料が充実しており、難しいカスタムを行う必要がなければものすごく簡単に管理画面が構築できます。Laravel-admin(ドキュメント)
GitHubページ基本的な使用方法は上記でカバーし、カスタマイズして使用したい際には直接ソースコードを読んで適宜書き換えていく形になります。
主観ですが、コード内のコメントも(おそらく書き換える前提の部分は)丁寧に書かれているので、しっかり読み解けば問題ないかと思います。プロジェクトの作成
既に開発しているlaravelプロジェクトに追加する場合は、この章は飛ばしてもらって大丈夫です。
何もないところからlaravel-adminを試したい方は、まずlaravelプロジェクトを作成するところから始めましょう。
公式によると、現在のバージョンでは以下の環境が推奨されるようです。
- PHP 7+
- laravel 5.5+
This package requires PHP 7+ and Laravel 5.5, for old versions please refer to 1.4
laravel-admin install$ composer create-project --prefer-dist "laravel/laravel=5.5.*" <project-name>DBも必要になってくるので、.envにDBの情報も書き足しておきましょう。
インストール
laravelの準備ができたら早速laravel-adminをインストールします。
$composer require encore/laravel-admin
インストールが終わったら下記コマンドを実行します。
$php artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider" $php artisan admin:installこれらを実行すると、
app/Admin
ディレクトリが作られます。これからの実装はこのディレクトリ配下で行うことになります。
ファイルの初期配置は以下。app/Admin ├── Controllers │ ├── ExampleController.php │ └── HomeController.php ├── bootstrap.php └── routes.phpフロント周りのファイルは
/public/packages/admin
に置かれています。
構成ファイルはconfig/admin.php
です。後々触ることになります。ここまでで既にダッシュボードは作成されているので、
php artisan serve
などをして、http://localhost:8000/admin にアクセスしてみましょう。
ID・PASSどちらにもadmin
と入力し、無事ダッシュボードが表示されれば成功です。
早速DBテーブルの管理画面を作成していきましょう。モデル・コントローラ作成
laravelでDBテーブルを認識するためにモデルを作成します。
$php artisan make:model Recipe
モデルが作成されたのを確認したら、それを利用してAdmin用のコントローラを作成します。
$php artisan admin:make RecipeController --model=App\\Recipe成功すると、作成したコントローラのルーティング情報がターミナルに出力されます。
これをapp/Admin/routes.php
に記述しましょう。$router->resource('admin/recipes', RecipeController::class);上記ルーティング情報のURLを叩くと、それらしい画面が表示されていると思います。
あとは作成したAdmin用のコントローラを、ドキュメントを参考にしながら更新していく流れになります。現在仕様として提供されているのは以下のページです。
- 一覧画面(
grid
関数)- 詳細画面(
show
関数)- 新規作成・編集画面(
form
関数)それぞれドキュメントに基本の使用方法からカスタマイズ方法まで乗っていますので、一通り目を通すことをお勧めします。
まとめ
とても簡単に導入できるので、気になっている方は一度試して見ると面白いかも知れません。
その他、主にカスタマイズ部分でつまづくことが多かったので、少しずつ記事にして行こうかと思います。参考
- 投稿日:2020-06-25T09:23:18+09:00
【Laravelで個人開発】ユーザー認証系の機能を導入する
はじめに
このドキュメントは、Laravel初心者の方が、ユーザー登録、ログインを必要とするサービスを作るために、Laravelから標準的に提供されているパッケージを用いてサクッと実装することをゴールに定め書いています。
ゴールの具体的な状態
- 以下の機能を提供できる
- 会員登録
- ログイン/ログアウト
- パスワードリマインダー
- 上記機能における各種メッセージが日本語で提供される
インストールするソフトウェア・パッケージ
今回は、
laravel/ui
を導入するのみです。最新のバージョンは2.xですが、今回インストールしたLaravelのバージョンは6.xなので、1.xを指定してインストールします。導入手順
vesselを用いた環境で作業を進めます。
1.
laravel/ui
のインストール./vessel comp require laravel/ui "^1.0" --dev2. 認証機能のセットアップ
# 認証用のスキャフォールド生成 ./vessel art ui vue --auth # マイグレーション ./vessel art migrate3. ローカライズ設定
config/app.php# タイムゾーンを以下の値に変更 'timezone' => 'Asia/Tokyo', # ロケールを以下の値に変更 'locale' => 'ja', # fakerロケールを以下の値に変更(テストデータを作るときに必須の設定) 'faker_locale' => 'ja_JP',4. 言語ファイルの追加
プロジェクトのルートディレクトリに移動して以下を実行します。成功すれば、
resources/lang/ja
というディレクトリが新たに作成されています。php -r "copy('https://readouble.com/laravel/6.x/ja/install-ja-lang-files.php', 'install-ja-lang.php');" php -f install-ja-lang.php php -r "unlink('install-ja-lang.php');"7. テストデータのセットアップ
下記のファイルのコメントアウトを解除し、UserTableSeederを作リます。これにより、認証用のユーザーテーブルに、テストデータを作成することができるようになります。
databese/seeds/DatabaseSeeder.phppublic function run() { // $this->call(UsersTableSeeder::class); $this->call(UsersTableSeeder::class); }以下は内容をそのままコピペします。
databese/seeds/UsersTableSeeder.php<?php use Illuminate\Database\Seeder; class UsersTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { factory(App\User::class, 30)->create(); } }新しいクラスを追加したのでdump-autoloadを実行する
./vessel comp dump-autoload7. テストデータを作成する
seedコマンドで、usersテーブルにテストデータを作成します。
./vessel art db:seed # mysqlコンテナにアクセスする ./vessel mysql # usersテーブルをカウントする(30件入っているはず) select count(*) from users;8. 画面を確認する
localhostにアクセスするとトップページに認証用のメニューが追加されています。
また、そのメニューからログイン画面に遷移し、適当な文字列を入力してログインを試みると、日本語でエラーメッセージが出力されます。
- 投稿日:2020-06-25T08:32:42+09:00
【Laravel】migrationで複数テーブルの共通カラム定義を1か所に共通化する方法
はじめに
複数のテーブルに同じカラムを持たせるとき、
migrationでテーブル1つ1つに同じカラム定義を記述するのは面倒です。例えば、よく使われるのは
created_at、created_by、updated_at、updated_by、deleted_at、deleted_byなどです。普通にやると各テーブルごとに上記カラム定義を記述することになりますね。
public function up() { Schema::create('foo_table', function (Blueprint $table) { $table->id(); $table->timestamp('created_at')->nullable(); $table->unsignedBigInteger('created_by')->nullable(); $table->timestamp('updated_at')->nullable(); $table->unsignedBigInteger('updated_by')->nullable(); $table->timestamp('deleted_at')->nullable(); $table->unsignedBigInteger('deleted_by')->nullable(); }); Schema::create('bar_table', function (Blueprint $table) { $table->id(); $table->timestamp('created_at')->nullable(); $table->unsignedBigInteger('created_by')->nullable(); $table->timestamp('updated_at')->nullable(); $table->unsignedBigInteger('updated_by')->nullable(); $table->timestamp('deleted_at')->nullable(); $table->unsignedBigInteger('deleted_by')->nullable(); }); Schema::create('baz_table', function (Blueprint $table) { $table->id(); $table->timestamp('created_at')->nullable(); $table->unsignedBigInteger('created_by')->nullable(); $table->timestamp('updated_at')->nullable(); $table->unsignedBigInteger('updated_by')->nullable(); $table->timestamp('deleted_at')->nullable(); $table->unsignedBigInteger('deleted_by')->nullable(); }); }※Laravelは
$table->timestamps();
という機能を提供しており、created_atとupdated_atだけは共通で定義可能ですこのように全テーブルに毎回共通カラム定義を羅列するのは面倒です。
共通コード1か所だけにそのカラム定義を記述し、
migrationではそれを利用するだけの形が望ましいです。
こんなイメージ。public function up() { Schema::create('foo_table', function (Blueprint $table) { $table->id(); $table->systemColumns(); // 共通カラム定義 }); Schema::create('bar_table', function (Blueprint $table) { $table->id(); $table->systemColumns(); // 共通カラム定義 }); Schema::create('baz_table', function (Blueprint $table) { $table->id(); $table->systemColumns(); // 共通カラム定義 }); }
$table->systemColumns();
を呼ぶだけで6つの共通カラムが定義できる状態です。Laravelではmacroという機能を利用してBlueprintクラスを拡張することで
いい感じにできるので、今回はその方法を紹介します。macroとは
macroとは、Laravelフレームワーク自体が提供しているクラスに
好きなメソッドを追加することができる機能です。例えば、
Requestクラスにユーザーエージェントを判定するメソッドを追加してみたり、
Carbonクラスに特定のフォーマットに変換するメソッドを追加してみたり、
Laravelのクラスに自由にメソッドを追加できます。macroの詳しい使い方や
macro利用可能なクラスなどについては
こちらの記事が非常にわかりやすく解説していますのでご参考に。今回は、migrationで利用されている
Blueprintクラスにこのmacroで機能追加することによって
共通カラムのコード共通化を行います。Blueprintにmacro追加
まずはBlueprintのmacroを定義するために
サービスプロバイダを新しく作ります。makeコマンド実行。
php artisan make:provider BlueprintServiceProviderすると下記のようにBlueprintServiceProviderのクラスが生成されます。
app/Providers/BlueprintServiceProvider.php<?php namespace App\Providers; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\ServiceProvider; class BlueprintServiceProvider extends ServiceProvider { /** * Bootstrap services. * * @return void */ public function boot() { // } /** * Register services. * * @return void */ public function register() { // } }このbootメソッドに、macro定義を記述します。
app/Providers/BlueprintServiceProvider.phppublic function boot() { Blueprint::macro('systemColumns', function () { $this->timestamp('created_at')->nullable(); $this->unsignedBigInteger('created_by')->nullable(); $this->timestamp('updated_at')->nullable(); $this->unsignedBigInteger('updated_by')->nullable(); $this->timestamp('deleted_at')->nullable(); $this->unsignedBigInteger('deleted_by')->nullable(); }); }これでBlueprintクラスに
systemColumns
というメソッドが追加されました。このサービスプロバイダを有効にするため、
config/app.php
に登録します。config/app.php'providers' => [ // 中略 App\Providers\BlueprintServiceProvider::class, ];これでBulueprintへのmacro定義完了です。
migrationでmacroを利用
あとは、冒頭で見せたように、
migrationでこのmacroを呼び出すだけです。public function up() { Schema::create('foo_table', function (Blueprint $table) { $table->id(); $table->systemColumns(); // 共通カラム定義 }); Schema::create('bar_table', function (Blueprint $table) { $table->id(); $table->systemColumns(); // 共通カラム定義 }); Schema::create('baz_table', function (Blueprint $table) { $table->id(); $table->systemColumns(); // 共通カラム定義 }); }migrationでは
$table->systemColumns();
と書いているだけですが、
内部的には先ほど定義したmacroのsystemColumns
メソッドが呼び出されていて
created_at、created_by、updated_at、updated_by、deleted_at、deleted_by
の6つのカラムを定義してくれています。参考
https://public-constructor.com/laravel-add-method-to-collection-or-facade/
- 投稿日:2020-06-25T00:45:33+09:00
【Laravel】日本語で指定されたFakerから英語のFakerを使う
はじめに
モデルファクトリをつかってテスト用のデータを生成する際、氏名は日本語でFakerを使いたい、でもIDとかは英語で使いたい・・・ってなった時に、コンフィグで日本語設定をしつつ、使いたいときだけ英語のFakerを使う方法です。
標準言語設定
app.php/* |-------------------------------------------------------------------------- | Faker Locale |-------------------------------------------------------------------------- | | This locale will be used by the Faker PHP library when generating fake | data for your database seeds. For example, this will be used to get | localized telephone numbers, street address information and more. | */ 'faker_locale' => 'ja_JP',この状態でFakerを使うとこんな感じなる。
Factory.php$factory->defineAs(User::class, 'user', function (Faker $faker) { return [ 'login_id' => $faker->unique()->firstName . '_' . $faker->unique()->lastName, //例)山口_真綾 'firstname' => $faker->firstName, // 例)津田 'lastname' => $faker->lastName, //例)裕樹 ]; });氏名はいいけどlogin_idは英語にしたい時
Factory.php$factory->defineAs(User::class, 'user', function (Faker $faker) { $faker_en = \Faker\Factory::create('en_US'); return [ 'login_id' => $faker_en->unique()->firstName . '_' . $faker_en->unique()->lastName, //例)Brannon_Donnelly 'firstname' => $faker->firstName, // 例)津田 'lastname' => $faker->lastName, //例)裕樹 ]; });configはデフォルトの言語を設定してくれるだけなので、他言語を使うときはfaker オブジェクトをインスタンス化する際に引数に指定するだけでよかった。
調べてみて
Laravelにデフォルトでついている機能なだけあって、他にも簡単に設定ができて柔軟に対応できる機能が沢山あった。
ただLogin_idの値とfirstname,lastnameでの値が変わってくるのはどうしようもないのか・・・。
テストでのみ使うと割り切ればいいのかな。