Laravel

Laravel

【Laravel】Unit Testでモデル・サービスクラスをテストする

こんにちは、かつコーチです。前回はFeature Testで、コントローラを含めた機能全体の動作を検証する方法を解説しました。今回は、モデルやサービスクラスといった「単体のロジック」を検証するUnit Testを解説します。Unit Tes...
Laravel

【Laravel】Feature Testでコントローラの動作をテストする

こんにちは、かつコーチです。前回はPHPUnitの基本と、テストの書き方の土台を解説しました。今回は、Laravel独自の仕組みであるFeature Testを使って、コントローラやルーティングを含めた「機能全体」をテストする方法を解説しま...
Laravel

【Laravel】PHPUnitの基本:Laravelでテストを書く準備

こんにちは、かつコーチです。前回はロール・権限管理の実装パターンを解説し、認証・セキュリティ編を締めくくりました。今回からは新章、「テスト」編に入ります。初回となる今回は、Laravelのテストの土台になっているPHPUnitの基本を扱いま...
Laravel

【Laravel】ロール・権限管理の実装パターン

こんにちは、かつコーチです。前回はパスワードハッシュ化(bcrypt)の仕組みを解説しました。ログイン機能ができると、次にぶつかるのが「管理者だけがこの画面を見られるようにしたい」という要望です。今回はLaravelにおけるロール・権限管理...
Laravel

【Laravel】パスワードハッシュ化(bcrypt)の仕組み

こんにちは、かつコーチです。ここまでSanctumによるAPI認証、Policy・Gateによる認可、CSRF対策、XSS対策と、Laravelのセキュリティ機能を順番に見てきました。今回はその締めくくりとして、認証の土台となるパスワードの...
Laravel

【Laravel】XSS対策:Bladeのエスケープ処理を理解する

こんにちは、かつコーチです。前回はCSRF対策について解説しました。今回は、もう一つの代表的なWeb脆弱性であるXSS(クロスサイトスクリプティング)と、Laravelの標準テンプレートエンジンBladeがどう対策しているかを見ていきます。...
Laravel

【Laravel】CSRF対策の仕組みとLaravelでの実装

こんにちは、かつコーチです。前回はPolicy・Gateを使った認可の仕組みを扱いました。今回は、Webアプリのセキュリティで必ず押さえておきたいCSRF(クロスサイトリクエストフォージェリ)対策について解説します。Laravelは標準でC...
Laravel

【Laravel】Policy・Gateで認可(権限チェック)を実装する

こんにちは、かつコーチです。前回はSanctumを使ったAPI認証を紹介しました。「誰なのか」を確認するのが認証だとすると、今回のテーマは「その人に何ができるのか」を確認する認可です。Laravelでは、この認可のロジックをPolicyとG...
Laravel

【Laravel】Laravel SanctumでAPI認証を実装する

こんにちは、かつコーチです。前回はBreeze・Jetstream・Fortify・Sanctumの違いを整理して、「どの認証機能を選べばいいか」の判断軸を紹介しました。今回はその中でも、SPA連携やモバイルアプリのバックエンドでよく使われ...
Laravel

【Laravel】Laravel Breeze・Jetstream・Fortify・Sanctumの違いを整理する:認証機能はどれを選ぶべき?

こんにちは、かつコーチです。前回はEloquentのキャスト・アクセサ・ミューテタの使い分けを解説しました。今回からは新しいテーマ、「認証・セキュリティ」に入っていきます。Laravelで会員登録・ログイン機能を作ろうとすると、必ずぶつかる...
Laravel

【Laravel】Livewire3.0の機能を解説

こんにちは、かつコーチです。2023年8月にLivewire3.0がリリースされました。Livewire 3.0は、以前のバージョンから大きな進化を遂げ、多くの新機能と改善点が導入されました。このバージョンは、パフォーマンスの向上や開発者の...
Laravel

【Laravel】Eloquentのキャスト・アクセサ・ミューテタの使い分け

こんにちは、かつコーチです。前回はソフトデリートによる安全な削除の仕組みを解説しました。今回は、Eloquentモデルの値を「取得するとき」「保存するとき」に自動加工できる3つの機能、キャスト・アクセサ・ミューテタを扱います。似たような役割...
CakePHP

【Laravel】ソフトデリート(SoftDeletes)の使い方

こんにちは、かつコーチです。前回はトランザクションでデータ整合性を守る方法を解説しました。今回は、削除処理を「取り消せる形」にしておくための機能、SoftDeletes(ソフトデリート)を扱います。「うっかり削除してしまった」というミスは、...
Laravel

【Laravel】トランザクション(DB::transaction)でデータ整合性を守る

こんにちは、かつコーチです。前回はページネーションの実装方法を解説しました。今回は、複数のテーブルを更新する処理で必ず意識しておきたい「トランザクション」を扱います。「一部だけ更新が成功して、一部だけ失敗する」という状態は、データベースの整...
Laravel

【Laravel】LengthAwarePaginatorでページネーションを実装する

こんにちは、かつコーチです。前回はN+1問題とeager loadingについて解説しました。今回は、一覧画面を作るときに必ずと言っていいほど必要になる「ページネーション」を扱います。Laravelにはpaginate()という便利なメソッ...
Laravel

【Laravel】N+1問題とは?eager loading(with)で解決する

こんにちは、かつコーチです。前回はQuery Builderの基本を扱い、Eloquentとの使い分けを紹介しました。今回は、Eloquentでリレーションを扱う人が必ずと言っていいほど一度は踏む落とし穴、N+1問題を取り上げます。「画面表...
Laravel

【Laravel】Query Builderの基本:Eloquentを使わないクエリの書き方

こんにちは、かつコーチです。前回はFactoryでテストデータを効率よく作る方法を紹介しました。これまでの記事では Article::where(...) のようにEloquentモデルを経由してデータを取得してきましたが、実はLarave...
Laravel

【Laravel】Factoryでダミーデータを効率よく作る

こんにちは、かつコーチです。前回はSeederの3つの実装方法を紹介し、大量データにはFactoryとの組み合わせが向いていると触れました。今回はそのFactoryを詳しく掘り下げていきます。「テストデータを100件作りたいけど、1件ずつ書...
Laravel

【Laravel】Seederでテストデータを入れる3つの方法

こんにちは、かつコーチです。前回は多対多リレーション(belongsToMany)を扱いました。実際にリレーションの動きを確認しようとすると、記事・タグ・中間テーブルにそれぞれデータを手入力するのは大変ですよね。そこで今回は、テストデータを...
Laravel

【Laravel】多対多リレーション(belongsToMany)を実装する

こんにちは、かつコーチです。前回は hasMany と belongsTo を使って、1対多のリレーションを扱いました。今回は、Eloquentのリレーションの中でもつまずく人が多い「多対多(belongsToMany)」を扱います。「1つ...