[Laravel]主要クラスとメソッドをまとめてみた

## 初めに
Laravelには便利なクラスやメソッドがありますよね
始めてLaravelを触る人からすると、どんなクラスやメソッドがあるのか分からないなんて事があると思います（まさに僕がそうだった）
なので、よく使うクラスやメソッドをまとめてみました。
学習中の方はぜひ活用してください〜

---

## 1. FormRequest (Illuminate\Foundation\Http\FormRequest)

**目的**: バリデーションやリクエスト認可 (Authorization) を、コントローラから切り離して管理するためのクラス  
**クラスファイル**: `vendor/laravel/framework/src/Illuminate/Foundation/Http/FormRequest.php`

| **メソッド名**              | **概要・目的**                                                                                                   |
|----------------------------|-------------------------------------------------------------------------------------------------------------------|
| `authorize()`              | リクエストが認可されるかを判定。`false` なら 403 エラーになる。`true` ならリクエストを許可。                       |
| `rules()`                  | バリデーションルールを定義するメソッド。必須/型チェック/文字数制限などを設定。                                     |
| `validated()`              | バリデーションに合格した「安全なデータのみ」を連想配列で取得。余計なパラメータを自動的に排除。                     |
| `messages()`               | バリデーション失敗時のカスタムメッセージを定義。                                                                   |
| `attributes()`             | エラーメッセージ内で使うフォームフィールド名を別ラベルに置き換えたいときに指定。                                   |
| `withValidator($validator)`| バリデーション後に追加の独自チェックを行いたい場合に使うフック。                                                 |
| `prepareForValidation()`   | バリデーションが走る前にデータを整形したい場合に利用。                                                            |
| `passedValidation()`       | バリデーションに合格した直後のタイミングで実行するフック。                                                        |


---

## 2. Request (Illuminate\Http\Request)

**目的**: HTTPリクエストを扱う基底クラス  
FormRequest も最終的にこのクラスを継承している

| **メソッド名**           | **概要・目的**                                                                                        |
|--------------------------|------------------------------------------------------------------------------------------------------|
| `all()`                  | 送信された全入力データを連想配列で取得。                                                             |
| `only(...$keys)`         | 指定したキーのみを抽出して連想配列で返す。                                                           |
| `except(...$keys)`       | 指定したキー以外のすべてを連想配列で返す。                                                           |
| `input($key, $default)`  | 指定キーの入力値を取得。無い場合はデフォルト値を返す。                                               |
| `has($key)`              | 指定したキーが存在するかどうかを判定 (null でも存在すれば true)。                                    |
| `filled($key)`           | 指定したキーに空でない値が入っているかを判定。                                                       |
| `bearerToken()`          | Authorization ヘッダ内の Bearer トークンを取得 (API 認証に便利)。                                     |
| `ip()`                   | クライアントの IP アドレスを取得。                                                                   |
| `header($key, $default)` | 任意の HTTP ヘッダを取得。                                                                           |
| `validate(array $rules)` | 簡易的なバリデーション。失敗時は自動リダイレクト。FormRequest が使えない場合などに利用。             |


---

## 3. Controller (Illuminate\Routing\Controller)

**目的**: ルーティングに紐づくメソッドを定義し、リクエストを受け取ってレスポンスを返す役割を担うクラス

| **使い方 / 機能**          | **概要・目的**                                                                                                      |
|----------------------------|----------------------------------------------------------------------------------------------------------------------|
| シングルアクションコントローラ | 1つのクラスに1つのメソッド (`__invoke()`) のみを定義してシンプルに書く構成。                                           |
| `middleware('auth')`       | 特定のミドルウェア (例: 認証) をコントローラ全体 / 一部アクションに適用できる。                                       |
| `resource()` (ルート定義)   | 7つのアクション (index, create, store, show, edit, update, destroy) を一括生成し、RESTful ルートを提供する。         |
| リダイレクト / ビュー呼び出し | `redirect()->route('...')` / `view('...')` などを活用し、レスポンスを返す。                                         |


---

## 4. Eloquent Model (Illuminate\Database\Eloquent\Model)

**目的**: DB テーブルとクラスを対応させ、ORM で簡単にデータベース操作ができる

| **メソッド / プロパティ**         | **概要・目的**                                                                                          |
|----------------------------------|----------------------------------------------------------------------------------------------------------|
| `::all()`                        | テーブルの全レコードを取得。                                                                             |
| `::find($id)`                    | 主キーで1件検索 (見つからなければ null)。                                                                |
| `::findOrFail($id)`              | 見つからなければ 404 (ModelNotFoundException) を投げる。                                                 |
| `::where($column, $op, $value)`  | 条件検索。チェーンメソッドで `->get()`, `->first()`, `->count()` などを呼び出せる。                       |
| `::create([...])`                | 1レコードを INSERT し、モデルインスタンスを返す。                                                        |
| `$model->fill([...])->save()`    | 既存インスタンスにまとめて値を埋めて保存 (INSERT / UPDATE)。                                             |
| `$model->delete()`               | レコード削除。                                                                                           |
| `$fillable`, `$primaryKey`, `$table` | モデルの挙動をカスタマイズ (一括代入可能フィールド、主キー名、テーブル名など)。                      |
| リレーション (belongsTo, hasMany等) | テーブル間の関係を定義し、関連データを Eloquent が自動で処理。                                          |
| アクセサ / ミューテタ            | `getXxxAttribute()`, `setXxxAttribute()` でカラム取得・設定時に加工。                                     |


---

## 5. Route (Illuminate\Support\Facades\Route)

**目的**: URL とコントローラ・アクションの紐付けを管理

| **メソッド / 使い方**                             | **概要・目的**                                                                                                  |
|--------------------------------------------------|------------------------------------------------------------------------------------------------------------------|
| `Route::get('uri', [Controller::class, 'method'])`   | GET リクエスト用のルート定義。POST / PUT / DELETE なども同様の書式で定義。                                       |
| `Route::resource('posts', PostController::class)`     | 7つの代表的アクション (index, create, store, show, edit, update, destroy) を一括生成する RESTful ルートを提供。   |
| `Route::name('prefix.')->group(function(){...})`      | ルート名に共通のプレフィックスを付与。                                                                           |
| `Route::prefix('admin')->group(function(){...})`      | URI に共通のプレフィックス (例: /admin) を付けるルートをまとめて定義。                                           |
| `Route::middleware(['auth'])->group(function(){...})`  | グループ単位でミドルウェアを適用。認証必須のパスをまとめたい場合などに便利。                                     |


---

## 6. Migration (Illuminate\Database\Migrations\Migration)

**目的**: データベーススキーマ (テーブル構造) をバージョン管理  
`php artisan migrate` で実行・ロールバック可能

| **メソッド名**          | **概要・目的**                                                                                              |
|-------------------------|------------------------------------------------------------------------------------------------------------|
| `up()`                  | マイグレーション実行時に呼ばれ、テーブル新規作成やカラム追加などの操作を行う。                             |
| `down()`                | ロールバック時に呼ばれ、up() で作ったテーブルやカラムを削除・変更を元に戻す操作を行う。                    |
| `Schema::create()`      | テーブルを新規作成。                                                                                       |
| `Schema::table()`       | 既存テーブルのカラム追加・変更。                                                                           |
| `Schema::dropIfExists('table')` | 指定したテーブルが存在すれば削除。                                                                 |


---

## 7. DB / Query Builder (Illuminate\Support\Facades\DB)

**目的**: Eloquent よりも低レベルなクエリや生SQLを実行したい場合に利用

| **メソッド名**              | **概要・目的**                                                                                      |
|----------------------------|----------------------------------------------------------------------------------------------------|
| `DB::table('table')`       | クエリビルダの開始。`->select()`, `->where()`, `->get()` などをチェーンで実行。                      |
| `->select(...)`            | 取得するカラムの指定。                                                                             |
| `->where(...)`             | 条件指定。Eloquent に近い形でチェーンメソッドとして利用可能。                                       |
| `->insert([...])`          | テーブルへレコードを INSERT。                                                                      |
| `->update([...])`          | テーブルの既存レコードを UPDATE。                                                                   |
| `->delete()`               | レコードを削除。                                                                                   |
| `DB::select('SQL', [...])` | 生SQLで SELECT を実行し、結果を取得。                                                               |
| `DB::statement('SQL')`     | 生SQLを実行 (INSERT/UPDATE/DROP など) し、結果は返さない。                                          |


---

## 8. その他 よく使うファサード / クラス

| **クラス / ファサード名**                  | **代表的な機能**                                                                 |
|-------------------------------------------|----------------------------------------------------------------------------------|
| Hash (Illuminate\Support\Facades\Hash)    | パスワードハッシュ (bcrypt, argon2 など)。                                       |
| Auth (Illuminate\Support\Facades\Auth)    | ログインユーザー情報の取得、ログイン・ログアウト処理など。                       |
| Gate (Illuminate\Support\Facades\Gate)    | 認可(Authorization)を定義。Policy と組み合わせて権限チェックを行う。            |
| Storage (Illuminate\Support\Facades\Storage) | ローカル / S3 / その他ストレージへのファイル保存・取得を行う。               |
| Str (Illuminate\Support\Str)              | 文字列操作ユーティリティ (UUID 生成、ランダム文字列生成、スネークケース/ケバブケース変換など)。 |
| Arr (Illuminate\Support\Arr)              | 配列操作ユーティリティ (get(), except(), add() など多機能)。                   |
| Carbon (Carbon\Carbon)                    | 日付操作ライブラリ。日時の加算、差分計算、フォーマット変更など強力な機能を提供。|


---

### まとめ
- **FormRequest** でバリデーションやリクエスト認可を分離するとコントローラがシンプルになる  
- **Request** は HTTP 入力データ取得の基盤クラス  
- **Eloquent Model** はテーブル操作を直感的に行える  
- **Controller** はルーティングと連携し、ビジネスロジックの呼び出しやレスポンスを返す要  
- **Migration** で DB スキーマをバージョン管理し、ロールバックや複数環境での同期を容易に  
- **Query Builder (DB ファサード)** は Eloquent では対応しきれない複雑クエリや生SQLが必要な場合に活用  
- 各種 **ファサード (Hash, Auth, Gate, Storage, Str, Arr, Carbon)** などを組み合わせると、高機能かつ保守しやすい開発が可能