# Laravel Framework 12.x コードリーディングガイドライン

## はじめに

このガイドラインは、Laravel Framework 12.xのコードベースを効率的に理解するための手引きです。
PHPに精通していないエンジニアでも、段階的に学習できるよう構成されています。

**対象読者:**
- プロジェクトに新規参画するエンジニア
- 他言語からの経験者
- コードレビューを行う担当者

---

## 1. 言語基礎

> このセクションでは、PHPの基本構文と概念を解説します。

### 1.1 プログラム構造

PHPファイルは `<?php` タグで始まります。Laravelでは名前空間（namespace）を使用してクラスを整理しています。

```php
// ファイル: src/Illuminate/Foundation/Application.php:1-5
<?php

namespace Illuminate\Foundation;

use Closure;
```

- `namespace`: クラスの論理的なグループ化。ディレクトリ構造と対応
- `use`: 他の名前空間からクラスをインポート

### 1.2 データ型と変数

PHPは動的型付け言語ですが、Laravelでは型宣言を積極的に使用しています。

```php
// ファイル: src/Illuminate/Foundation/Application.php:48-56
/**
 * The Laravel framework version.
 *
 * @var string
 */
const VERSION = '12.53.0';

/**
 * The base path for the Laravel installation.
 *
 * @var string
 */
protected $basePath;
```

**主要なデータ型:**
- `string`: 文字列
- `int`: 整数
- `float`: 浮動小数点数
- `bool`: 真偽値
- `array`: 配列
- `object`: オブジェクト
- `mixed`: 任意の型
- `?Type`: null許容型

### 1.3 制御構造

```php
// ファイル: src/Illuminate/Support/helpers.php:49-76
function blank($value): bool
{
    if (is_null($value)) {
        return true;
    }

    if (is_string($value)) {
        return trim($value) === '';
    }

    if (is_numeric($value) || is_bool($value)) {
        return false;
    }

    return empty($value);
}
```

**主要な制御構造:**
- `if/elseif/else`: 条件分岐
- `foreach`: 配列のループ
- `while`: 条件付きループ
- `switch/match`: 複数条件分岐（PHP 8以降は`match`推奨）

### 1.4 関数/メソッド定義

```php
// ファイル: src/Illuminate/Container/Container.php:65-68
/**
 * Create a new class instance.
 *
 * @param  \Illuminate\Contracts\Container\Container|null  $container
 */
public function __construct(?Container $container = null)
{
    $this->container = $container;
}
```

**アクセス修飾子:**
- `public`: どこからでもアクセス可能
- `protected`: 自身と継承クラスからアクセス可能
- `private`: 自身のクラスのみからアクセス可能

### 1.5 モジュール/インポート

Laravelはオートローディング（Composer PSR-4）を使用します。

```php
// ファイル: src/Illuminate/Foundation/Application.php:5-35
use Closure;
use Composer\Autoload\ClassLoader;
use Illuminate\Container\Container;
use Illuminate\Contracts\Console\Kernel as ConsoleKernelContract;
use Illuminate\Contracts\Foundation\Application as ApplicationContract;
```

`composer.json`で定義されたオートロード設定:
```json
"psr-4": {
    "Illuminate\\": "src/Illuminate/"
}
```

---

## 2. プロジェクト固有の概念

> このセクションでは、Laravel Framework特有の概念を解説します。

### 2.1 フレームワーク固有の概念

#### サービスコンテナ（IoC Container）

Laravelの中核となる依存性注入コンテナです。

```php
// ファイル: src/Illuminate/Container/Container.php:25-26
class Container implements ArrayAccess, ContainerContract
{
    use ReflectsClosures;
```

**主要機能:**
- サービスの登録（bind/singleton）
- 依存性の自動解決
- サービスのインスタンス化

#### サービスプロバイダ

サービスをコンテナに登録する仕組みです。

```php
// ファイル: src/Illuminate/Support/ServiceProvider.php:17-24
abstract class ServiceProvider
{
    /**
     * The application instance.
     *
     * @var \Illuminate\Contracts\Foundation\Application
     */
    protected $app;
```

**ライフサイクル:**
1. `register()`: サービスをコンテナにバインド
2. `boot()`: すべてのサービス登録後に実行

#### ファサード（Facades）

静的メソッド風のAPIを提供するラッパーパターンです。

```php
// ファイル: src/Illuminate/Support/Facades/Facade.php:19-40
abstract class Facade
{
    /**
     * The application instance being facaded.
     *
     * @var \Illuminate\Contracts\Foundation\Application|null
     */
    protected static $app;

    /**
     * The resolved object instances.
     *
     * @var array
     */
    protected static $resolvedInstance;
```

### 2.2 プロジェクト独自のパターン

#### トレイト（Traits）の活用

Laravelは機能を再利用可能なトレイトとして提供します。

```php
// ファイル: src/Illuminate/Database/Eloquent/Model.php:40-52
abstract class Model implements Arrayable, ArrayAccess, ...
{
    use Concerns\HasAttributes,
        Concerns\HasEvents,
        Concerns\HasGlobalScopes,
        Concerns\HasRelationships,
        Concerns\HasTimestamps,
        Concerns\HasUniqueIds,
        Concerns\HidesAttributes,
        Concerns\GuardsAttributes,
        Concerns\PreventsCircularRecursion,
        Concerns\TransformsToResource,
        ForwardsCalls;
```

#### Macroable パターン

実行時にメソッドを追加できる機能です。

```php
// ファイル: src/Illuminate/Routing/Router.php:40-43
class Router implements BindingRegistrar, RegistrarContract
{
    use Macroable {
        __call as macroCall;
    }
```

---

## 3. 命名規則

> このセクションでは、プロジェクト全体で使用される命名規則を解説します。

### 3.1 ファイル・ディレクトリ命名

| パターン | 意味 | 例 |
|---------|------|-----|
| PascalCase | クラスファイル | `Application.php`, `ServiceProvider.php` |
| ディレクトリ名 | 名前空間と一致 | `Illuminate/Foundation/` |
| Concerns/ | トレイト集約 | `Database/Eloquent/Concerns/` |
| Contracts/ | インターフェース定義 | `Contracts/Container/` |
| Facades/ | ファサードクラス | `Support/Facades/` |
| Events/ | イベントクラス | `Routing/Events/` |
| Middleware/ | ミドルウェア | `Routing/Middleware/` |
| Exceptions/ | 例外クラス | `Database/Exceptions/` |

### 3.2 クラス・関数・変数命名

| プレフィックス/サフィックス | 意味 | 例 |
|---------------------------|------|-----|
| Interface | インターフェース | `ContainerContract`, `DispatcherContract` |
| ServiceProvider | サービス登録 | `RoutingServiceProvider`, `EventServiceProvider` |
| Exception | 例外クラス | `BindingResolutionException`, `ModelNotFoundException` |
| Trait | トレイトクラス | `Macroable`, `Tappable`, `Conditionable` |
| $camelCase | インスタンス変数 | `$container`, `$bindings` |
| UPPER_CASE | 定数 | `VERSION`, `SUCCESS` |
| is/has/can | 真偽値メソッド | `isBooted()`, `hasBeenBootstrapped()` |
| get/set | アクセサ/ミューテータ | `getBindings()`, `setInstance()` |

### 3.3 プログラム分類一覧

| 分類 | 説明 | 主要クラス |
|-----|------|-----------|
| Core | フレームワーク中核 | `Application`, `Container` |
| Routing | ルーティング処理 | `Router`, `Route`, `RouteCollection` |
| Database | データベース操作 | `Connection`, `Builder`, `Model` |
| Http | HTTPリクエスト/レスポンス | `Request`, `Response`, `Middleware` |
| Events | イベント処理 | `Dispatcher`, `Event` |
| Queue | ジョブキュー | `Job`, `Queue`, `Worker` |
| Console | CLIコマンド | `Command`, `Artisan` |
| Support | ユーティリティ | `Collection`, `Str`, `Arr` |

---

## 4. ディレクトリ構造

> このセクションでは、プロジェクトのディレクトリ構造を解説します。

```
framework-12.x/
├── src/
│   └── Illuminate/           # フレームワークコア
│       ├── Auth/             # 認証機能
│       ├── Broadcasting/     # ブロードキャスト
│       ├── Bus/              # コマンドバス
│       ├── Cache/            # キャッシュ
│       ├── Collections/      # コレクション
│       ├── Concurrency/      # 並行処理
│       ├── Config/           # 設定管理
│       ├── Console/          # Artisanコマンド
│       ├── Container/        # DIコンテナ
│       ├── Contracts/        # インターフェース定義
│       ├── Cookie/           # クッキー
│       ├── Database/         # データベース・Eloquent
│       ├── Encryption/       # 暗号化
│       ├── Events/           # イベントディスパッチャ
│       ├── Filesystem/       # ファイル操作
│       ├── Foundation/       # アプリケーション基盤
│       ├── Hashing/          # ハッシュ化
│       ├── Http/             # HTTPレイヤー
│       ├── Log/              # ロギング
│       ├── Mail/             # メール送信
│       ├── Notifications/    # 通知
│       ├── Pagination/       # ページネーション
│       ├── Pipeline/         # パイプライン
│       ├── Process/          # プロセス実行
│       ├── Queue/            # キュー処理
│       ├── Redis/            # Redis操作
│       ├── Routing/          # ルーティング
│       ├── Session/          # セッション
│       ├── Support/          # ユーティリティ・ヘルパー
│       ├── Testing/          # テストヘルパー
│       ├── Translation/      # 翻訳
│       ├── Validation/       # バリデーション
│       └── View/             # ビュー・Blade
├── config/                   # デフォルト設定ファイル
└── composer.json             # パッケージ定義
```

### 各ディレクトリの役割

| ディレクトリ | 役割 | 主要ファイル |
|-------------|------|-------------|
| `Foundation/` | アプリケーションの起動・ライフサイクル | `Application.php`, `helpers.php` |
| `Container/` | 依存性注入コンテナ | `Container.php`, `BoundMethod.php` |
| `Routing/` | HTTPルーティング | `Router.php`, `Route.php`, `Middleware/` |
| `Database/` | DB操作・ORM | `Connection.php`, `Eloquent/Model.php` |
| `Http/` | HTTP抽象化 | `Request.php`, `Response.php` |
| `Support/` | ユーティリティクラス | `Collection.php`, `Str.php`, `Facades/` |
| `Contracts/` | インターフェース定義 | 各コンポーネントのContract |
| `Events/` | イベントシステム | `Dispatcher.php`, `Event.php` |
| `Queue/` | 非同期ジョブ処理 | `Queue.php`, `Jobs/Job.php` |

---

## 5. アーキテクチャ

> このセクションでは、プロジェクトのアーキテクチャパターンを解説します。

### 5.1 全体アーキテクチャ

Laravel Frameworkはサービス指向アーキテクチャ（SOA）とパイプラインパターンを組み合わせています。

```
┌─────────────────────────────────────────────────────────────────┐
│                        Application                               │
│  ┌─────────────────────────────────────────────────────────────┐ │
│  │                    Service Container                        │ │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐        │ │
│  │  │   Service   │  │   Service   │  │   Service   │        │ │
│  │  │  Provider   │  │  Provider   │  │  Provider   │        │ │
│  │  └─────────────┘  └─────────────┘  └─────────────┘        │ │
│  └─────────────────────────────────────────────────────────────┘ │
│                              ↓                                    │
│  ┌─────────────────────────────────────────────────────────────┐ │
│  │                 Pipeline (Middleware Stack)                  │ │
│  │  Request → [Middleware1] → [Middleware2] → ... → Handler    │ │
│  │  Response ← [Middleware1] ← [Middleware2] ← ... ← Handler   │ │
│  └─────────────────────────────────────────────────────────────┘ │
│                              ↓                                    │
│  ┌─────────────────────────────────────────────────────────────┐ │
│  │                    Core Components                           │ │
│  │  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐       │ │
│  │  │ Router  │  │Database │  │  Queue  │  │ Events  │       │ │
│  │  └─────────┘  └─────────┘  └─────────┘  └─────────┘       │ │
│  └─────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
```

### 5.2 レイヤー構成

| レイヤー | 責務 | 代表的なファイル |
|---------|------|-----------------|
| Application | アプリケーション起動・設定 | `Foundation/Application.php` |
| HTTP | リクエスト/レスポンス処理 | `Http/Request.php`, `Http/Response.php` |
| Routing | URL解決・コントローラーディスパッチ | `Routing/Router.php` |
| Middleware | 横断的関心事の処理 | `Pipeline/Pipeline.php` |
| Business Logic | ビジネスロジック（アプリ側で実装） | - |
| Data Access | データベース操作 | `Database/Eloquent/Model.php` |
| Infrastructure | 外部サービス連携 | `Mail/`, `Queue/`, `Cache/` |

### 5.3 データフロー

1. **HTTPリクエスト受信**: `Request::capture()` でリクエストをキャプチャ
2. **アプリケーション起動**: `Application` がサービスプロバイダをブート
3. **ミドルウェア通過**: `Pipeline` でリクエストを順次処理
4. **ルート解決**: `Router` が適切なコントローラー/アクションを決定
5. **コントローラー実行**: ビジネスロジック実行
6. **レスポンス生成**: `Response` オブジェクトを構築
7. **ミドルウェア逆順通過**: レスポンスを加工
8. **クライアントへ送信**

---

## 6. 主要コンポーネント

> このセクションでは、主要なコンポーネントとその連携を解説します。

### 6.1 エントリーポイント

`Application`クラスがフレームワークの中心です。

```php
// ファイル: src/Illuminate/Foundation/Application.php:39-48
class Application extends Container implements ApplicationContract, CachesConfiguration, CachesRoutes, HttpKernelInterface
{
    use Macroable;

    /**
     * The Laravel framework version.
     *
     * @var string
     */
    const VERSION = '12.53.0';
```

**主要メソッド:**
- `bootstrap()`: アプリケーション初期化
- `boot()`: サービスプロバイダの起動
- `handle()`: HTTPリクエストの処理
- `terminate()`: リクエスト終了処理

### 6.2 ビジネスロジック

Eloquent Modelがデータ操作の中核を担います。

```php
// ファイル: src/Illuminate/Database/Eloquent/Model.php:38-52
abstract class Model implements Arrayable, ArrayAccess, ...
{
    use Concerns\HasAttributes,
        Concerns\HasEvents,
        Concerns\HasGlobalScopes,
        Concerns\HasRelationships,
        ...
```

**主要機能:**
- アクティブレコードパターン
- リレーションシップ（HasOne, HasMany, BelongsTo, etc.）
- スコープ、アクセサ、ミューテータ
- イベント（creating, created, updating, etc.）

### 6.3 データアクセス

Eloquent Builderがクエリ構築を担当します。

```php
// ファイル: src/Illuminate/Database/Eloquent/Builder.php
// 主要メソッド: where(), orderBy(), with(), paginate()
```

**クエリ構築例:**
```php
Model::query()
    ->where('status', 'active')
    ->with('relations')
    ->orderBy('created_at', 'desc')
    ->paginate(15);
```

### 6.4 ユーティリティ/共通機能

`Support`名前空間に多数のヘルパーが存在します。

```php
// ファイル: src/Illuminate/Support/helpers.php:17-36
function append_config(array $array): array
{
    $start = 9999;

    foreach ($array as $key => $value) {
        if (is_numeric($key)) {
            $start++;
            $array[$start] = Arr::pull($array, $key);
        }
    }

    return $array;
}
```

**主要ユーティリティ:**
- `Collection`: 流暢な配列操作
- `Str`: 文字列操作
- `Arr`: 配列操作
- `Carbon`（外部）: 日時操作

---

## 7. よく使われるパターン

> このセクションでは、コード内で頻出するパターンを解説します。

### パターン一覧

| パターン | 説明 | 出現頻度 | 代表的なファイル |
|---------|------|---------|-----------------|
| Service Container | 依存性注入 | 高 | `Container/Container.php` |
| Pipeline | チェーン処理 | 高 | `Pipeline/Pipeline.php` |
| Facade | 静的アクセス | 高 | `Support/Facades/` |
| Repository | データアクセス抽象化 | 中 | `Cache/Repository.php` |
| Factory | オブジェクト生成 | 中 | `Database/Eloquent/Factories/` |
| Observer | イベント監視 | 中 | `Events/Dispatcher.php` |

### 各パターンの詳細

#### パターン1: Pipeline

**目的:** リクエストやデータを一連の処理ステップ（パイプ）を通じて変換する

**実装例:**
```php
// ファイル: src/Illuminate/Pipeline/Pipeline.php:128-143
public function then(Closure $destination)
{
    $pipeline = array_reduce(
        array_reverse($this->pipes()),
        $this->carry(),
        $this->prepareDestination($destination)
    );

    try {
        return $this->withinTransaction !== false
            ? $this->getContainer()->make('db')
                  ->connection($this->withinTransaction)
                  ->transaction(fn () => $pipeline($this->passable))
            : $pipeline($this->passable);
    } finally {
        if ($this->finally) {
            ($this->finally)($this->passable);
        }
    }
}
```

**解説:** HTTPミドルウェアの実行やイベントハンドリングに使用。各パイプは`$next`クロージャを呼び出して次のパイプに処理を渡します。

#### パターン2: Facade

**目的:** 静的メソッド風のAPIでサービスコンテナから解決されたインスタンスのメソッドを呼び出す

**実装例:**
```php
// ファイル: src/Illuminate/Support/Facades/Facade.php:48-59
public static function resolved(Closure $callback)
{
    $accessor = static::getFacadeAccessor();

    if (static::$app->resolved($accessor) === true) {
        $callback(static::getFacadeRoot(), static::$app);
    }

    static::$app->afterResolving($accessor, function ($service, $app) use ($callback) {
        $callback($service, $app);
    });
}
```

**解説:** `Cache::get()` のような呼び出しが、実際には `app('cache')->get()` に変換されます。

#### パターン3: Middleware

**目的:** HTTPリクエスト/レスポンスの前後処理を行う

**実装例:**
```php
// ファイル: src/Illuminate/Routing/Middleware/ThrottleRequests.php:73-80
/**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Closure  $next
 * @param  int|string  $maxAttempts
 * @param  float|int  $decayMinutes
 * @param  string  $prefix
 * @return \Symfony\Component\HttpFoundation\Response
 */
```

**解説:** `handle($request, $next)` メソッドで処理を行い、`$next($request)` で次のミドルウェアへ渡します。

---

## 8. 業務フロー追跡の実践例

> このセクションでは、実際の業務フローをコードで追跡する方法を解説します。

### 8.1 フロー追跡の基本手順

1. エントリーポイントを特定
2. 処理の流れを追跡（呼び出し関係を追う）
3. データの変換を確認
4. 最終的な出力を確認

### 8.2 フロー追跡の実例

#### 例1: サービス解決フロー

**概要:** コンテナからサービスを解決する処理の流れ

**処理フロー:**
```
Container::make() → resolve() → build() → インスタンス生成
```

**詳細な追跡:**

1. **make呼び出し** (`src/Illuminate/Container/Container.php`)
   ```php
   public function make($abstract, array $parameters = [])
   {
       return $this->resolve($abstract, $parameters);
   }
   ```

2. **resolve実行** (`src/Illuminate/Container/Container.php`)
   - バインディングの確認
   - シングルトンの場合はキャッシュから返却
   - 新規インスタンスの場合はbuild()を呼び出し

3. **build実行**
   - リフレクションでコンストラクタを解析
   - 依存関係を再帰的に解決
   - インスタンスを生成して返却

#### 例2: イベントディスパッチフロー

**概要:** イベントを発火してリスナーを実行する処理

**処理フロー:**
```
Event::dispatch() → Dispatcher::dispatch() → リスナー実行
```

**詳細な追跡:**

1. **ファサード呼び出し** (`src/Illuminate/Support/Facades/Event.php`)
   ```php
   // Event::dispatch($event) は以下に変換される
   app('events')->dispatch($event);
   ```

2. **Dispatcher::dispatch** (`src/Illuminate/Events/Dispatcher.php:30-46`)
   ```php
   class Dispatcher implements DispatcherContract
   {
       use Macroable, ReflectsClosures;

       protected $container;
       protected $listeners = [];
   ```

3. **リスナー実行**
   - 登録されたリスナーを順次呼び出し
   - Queueableの場合はジョブとしてキューに投入

### 8.3 フロー追跡チェックリスト

- [ ] エントリーポイントを特定したか
- [ ] 呼び出し関係を把握したか
- [ ] データの変換ポイントを確認したか
- [ ] エラーハンドリングを確認したか
- [ ] 最終的な出力を確認したか

---

## 9. 設計書の参照順序

> このセクションでは、プロジェクト理解のための設計書参照順序を案内します。

### 9.1 目的別ロードマップ

#### 全体像を把握したい場合
1. README.md
2. アーキテクチャ設計書
3. 機能一覧

#### 特定機能を理解したい場合
1. 機能一覧
2. 機能設計書
3. 関連ソースコード（`src/Illuminate/{機能名}/`）

#### 改修作業を行う場合
1. 対象機能の設計書
2. 単体テストケース一覧
3. 影響範囲の確認（依存関係を追跡）

### 9.2 ドキュメント一覧

| ドキュメント | 概要 | 参照タイミング |
|-------------|------|---------------|
| README.md | プロジェクト概要 | 最初に参照 |
| アーキテクチャ設計書 | システム構造 | 全体設計の理解時 |
| 機能設計書 | 各機能の詳細 | 機能開発・改修時 |
| API設計書 | API仕様 | API実装・利用時 |
| データベース設計書 | DB構造 | データ操作時 |
| 単体テストケース一覧 | テスト仕様 | テスト作成時 |

---

## 10. トラブルシューティング

> このセクションでは、コードリーディング時によくある問題と解決法を解説します。

### よくある疑問と回答

#### Q: ファサードの実体クラスはどこにある？
A: 各ファサードクラスの`getFacadeAccessor()`メソッドを確認してください。返される文字列がコンテナへのキーです。

```php
// 例: src/Illuminate/Support/Facades/Cache.php
protected static function getFacadeAccessor()
{
    return 'cache';
}
```

#### Q: サービスプロバイダはどこで登録される？
A: アプリケーション側の`config/app.php`の`providers`配列、または各パッケージの`composer.json`のextra設定で自動発見されます。

#### Q: トレイトの定義場所は？
A: 同じディレクトリ内の`Concerns/`サブディレクトリ、または`Support/Traits/`ディレクトリを確認してください。

#### Q: インターフェースの定義場所は？
A: `Contracts/`ディレクトリに機能別のサブディレクトリとして整理されています。

### デバッグのヒント

1. **依存関係の追跡**: `Container::make()`の呼び出しを追跡してサービスの解決過程を確認
2. **イベントの確認**: `Dispatcher::dispatch()`にブレークポイントを設定
3. **ミドルウェアの順序**: `Kernel::$middlewarePriority`を確認
4. **Eloquentクエリ**: `DB::enableQueryLog()`でSQLを確認
5. **サービス一覧**: `php artisan about`コマンドで登録サービスを確認

---

## 付録

### A. 用語集

| 用語 | 説明 |
|-----|------|
| IoC | Inversion of Control - 制御の反転 |
| DI | Dependency Injection - 依存性注入 |
| Service Container | サービスのインスタンス管理を行うコンテナ |
| Service Provider | サービスをコンテナに登録するクラス |
| Facade | 静的メソッド風APIを提供するラッパー |
| Middleware | HTTPリクエスト/レスポンスの前後処理 |
| Eloquent | LaravelのORM（Object-Relational Mapping） |
| Artisan | LaravelのCLIツール |
| Pipeline | データを一連の処理ステップで変換するパターン |
| Trait | PHPの水平方向のコード再利用機構 |
| Macroable | 実行時にメソッドを追加できる機能を提供するトレイト |

### B. ファイル一覧

| ファイル/ディレクトリ | 説明 | 主な内容 |
|---------------------|------|---------|
| `src/Illuminate/Foundation/Application.php` | アプリケーション中核 | ライフサイクル管理 |
| `src/Illuminate/Container/Container.php` | DIコンテナ | サービス解決・バインディング |
| `src/Illuminate/Routing/Router.php` | ルーター | URL解決・ディスパッチ |
| `src/Illuminate/Database/Eloquent/Model.php` | ORMベース | データ操作・リレーション |
| `src/Illuminate/Http/Request.php` | HTTPリクエスト | 入力取得・検証 |
| `src/Illuminate/Support/Facades/` | ファサード群 | 静的API提供 |
| `src/Illuminate/Contracts/` | インターフェース | 契約定義 |
| `config/` | 設定ファイル | デフォルト設定 |

### C. 参考資料

- [Laravel 公式ドキュメント](https://laravel.com/docs)
- [PHP 公式ドキュメント](https://www.php.net/docs.php)
- [PSR（PHP Standards Recommendations）](https://www.php-fig.org/psr/)
- [Laracasts（動画学習）](https://laracasts.com)
- [Laravel News](https://laravel-news.com)
