「Laravel - Laravelの構造」の版間の差分

ナビゲーションに移動 検索に移動
64行目: 64行目:
|}
|}
</center>
</center>
<br><br>
== appディレクトリ (コアディレクトリ) ==
appディレクトリは、アプリケーションの中核となるコードを格納する場所である。<br>
アプリケーションの主要なビジネスロジックの多くがここに配置される。<br>
<br>
以下に示すような構造により、コードの組織化と保守性が向上して、チーム開発においても明確な役割分担が可能となる。<br>
また、テストパターンの記述にも考慮された設計となっている。<br>
<br>
==== Consoleディレクトリ ====
Consoleディレクトリには、Artisanコマンドに関連するファイルが格納される。<br>
Kernel.phpでは、定期実行するスケジュールタスクを定義でき、カスタムコマンドもここに配置する。<br>
<br>
<syntaxhighlight lang="php">
// app/Console/Commands/SendDailyReport.phpファイル
class SendDailyReport extends Command
{
    protected $signature  = 'report:daily';
    protected $description = '日次レポートを送信する';
    public function handle()
    {
      // レポート送信ロジック
    }
}
</syntaxhighlight>
<br>
==== Exceptionsディレクトリ ====
Exceptionsディレクトリには、アプリケーション固有の例外処理クラスを配置する。<br>
Handler.phpで、例外処理の方法をカスタマイズできる。<br>
<br>
==== Httpディレクトリ ====
最も頻繁に作業するディレクトリの1つである。<br>
以下に示すような重要なコンポーネントが含まれる。<br>
<br>
* Controllersディレクトリ
*: リクエストの処理ロジックを担当
* Middlewareディレクトリ
*: リクエスト / レスポンスの前後処理を実装
* Requests
*: フォームリクエストのバリデーションルールを定義
* Resources
*: APIレスポンスの整形を担当
<br>
==== Modelsディレクトリ ====
データベースとのやり取りを担当するEloquentモデルクラスが配置される。<br>
リレーションシップやスコープ等のデータ操作ロジックを定義する。<br>
<br>
<syntaxhighlight lang="php">
// app/Models/User.phpファイル
class User extends Model
{
    protected $fillable = ['name', 'email'];
    public function posts()
    {
      return $this->hasMany(Post::class);
    }
}
</syntaxhighlight>
<br>
==== Providersディレクトリ ====
サービスプロバイダはアプリケーションの起動時に実行される重要なクラスである。<br>
サービスの登録やイベントの設定等を行う。<br>
<br>
==== Servicesディレクトリ ====
これは標準では存在しないが、多くの開発者が作成する慣習的なディレクトリである。<br>
ビジネスロジックを分離して、再利用可能なサービスクラスを配置する。<br>
<br>
==== Eventsディレクトリ / Listenersディレクトリ ====
イベント駆動プログラミングをサポートするためのディレクトリである。<br>
イベントクラスとそれを処理するリスナークラスを配置する。<br>
<br>
==== Policiesディレクトリ ====
認可ロジックを定義する場所である。<br>
特定のモデルに対する操作権限をきめ細かく制御できる。<br>
<br>
==== カスタマイズと拡張 ====
Laravelでは、これらの基本構造に加えて、必要に応じて独自のディレクトリを作成することが推奨されている。<br>
<br>
以下に例を示す。<br>
* Repositories
*: データアクセス層を分離する場合
* Actions
*: 単一責任の原則に基づいたビジネスロジック
* DTOs
*: データ転送オブジェクト
* Enums
*: 列挙型クラス
<br><br>
<br><br>


案内メニュー