はじめに

デフォルトのLaravelアプリケーション構造は、大規模および小規模アプリケーションの両方にとって素晴らしい出発点を提供することを目的としています。しかし、アプリケーションをどのように整理するかは自由です。Laravelは、Composerがクラスを自動ロードできる限り、特定のクラスがどこにあるかについてほとんど制限を課しません。

Laravelに不慣れですか?最初のLaravelアプリケーションを構築する際にフレームワークを体験できるLaravel Bootcampをチェックしてください。

ルートディレクトリ

アプリディレクトリ

appディレクトリには、アプリケーションのコアコードが含まれています。このディレクトリについては、後で詳しく探りますが、アプリケーション内のほとんどすべてのクラスはこのディレクトリにあります。

ブートストラップディレクトリ

bootstrapディレクトリには、フレームワークをブートストラップするapp.phpファイルが含まれています。このディレクトリには、ルートやサービスキャッシュファイルなど、パフォーマンス最適化のためにフレームワークが生成したファイルを含むcacheディレクトリもあります。

設定ディレクトリ

configディレクトリには、アプリケーションのすべての設定ファイルが含まれています。これらのファイルをすべて読み通し、利用可能なすべてのオプションに慣れることは素晴らしいアイデアです。

データベースディレクトリ

databaseディレクトリには、データベースマイグレーション、モデルファクトリ、およびシードが含まれています。必要に応じて、このディレクトリをSQLiteデータベースを保持するために使用することもできます。

パブリックディレクトリ

publicディレクトリには、アプリケーションに入るすべてのリクエストのエントリポイントであり、自動ロードを構成するindex.phpファイルが含まれています。このディレクトリには、画像、JavaScript、CSSなどのアセットも含まれています。

リソースディレクトリ

resourcesディレクトリには、ビューや、CSSやJavaScriptなどの未コンパイルの生アセットが含まれています。

ルートディレクトリ

routesディレクトリには、アプリケーションのすべてのルート定義が含まれています。デフォルトでは、Laravelには2つのルートファイルが含まれています:web.phpconsole.php

web.phpファイルには、Laravelがwebミドルウェアグループに配置するルートが含まれており、セッション状態、CSRF保護、およびクッキー暗号化を提供します。アプリケーションがステートレスなRESTful APIを提供しない場合、すべてのルートはおそらくweb.phpファイルで定義されます。

console.phpファイルでは、すべてのクロージャベースのコンソールコマンドを定義できます。各クロージャはコマンドインスタンスにバインドされ、各コマンドのIOメソッドと対話するためのシンプルなアプローチを提供します。このファイルはHTTPルートを定義しませんが、アプリケーションへのコンソールベースのエントリポイント(ルート)を定義します。console.phpファイルでタスクをスケジュールすることもできます。

オプションで、APIルート(api.php)やブロードキャストチャネル(channels.php)のための追加のルートファイルをinstall:apiおよびinstall:broadcasting Artisanコマンドを介してインストールできます。

api.phpファイルには、ステートレスであることを意図したルートが含まれているため、これらのルートを介してアプリケーションに入るリクエストは、トークンを介して認証されることを意図しており、セッション状態にはアクセスできません。

channels.phpファイルでは、アプリケーションがサポートするすべてのevent broadcastingチャネルを登録できます。

ストレージディレクトリ

storageディレクトリには、ログ、コンパイルされたBladeテンプレート、ファイルベースのセッション、ファイルキャッシュ、およびフレームワークによって生成されたその他のファイルが含まれています。このディレクトリは、appframework、およびlogsディレクトリに分けられています。appディレクトリは、アプリケーションによって生成されたファイルを保存するために使用できます。frameworkディレクトリは、フレームワークによって生成されたファイルとキャッシュを保存するために使用されます。最後に、logsディレクトリには、アプリケーションのログファイルが含まれています。

storage/app/publicディレクトリは、公開アクセス可能なユーザー生成ファイル(プロフィールアバターなど)を保存するために使用できます。このディレクトリを指すシンボリックリンクをpublic/storageで作成する必要があります。php artisan storage:link Artisanコマンドを使用してリンクを作成できます。

テストディレクトリ

testsディレクトリには、自動化されたテストが含まれています。例として、PestPHPUnitのユニットテストや機能テストが標準で提供されています。各テストクラスはTestという単語でサフィックスされるべきです。/vendor/bin/pestまたは/vendor/bin/phpunitコマンドを使用してテストを実行できます。また、テスト結果の詳細で美しい表現を希望する場合は、php artisan test Artisanコマンドを使用してテストを実行できます。

ベンダーディレクトリ

vendorディレクトリには、Composerの依存関係が含まれています。

アプリディレクトリ

アプリケーションの大部分はappディレクトリに格納されています。デフォルトでは、このディレクトリはAppの名前空間にあり、PSR-4自動ロード標準を使用してComposerによって自動ロードされます。

デフォルトでは、appディレクトリにはHttpModels、およびProvidersディレクトリが含まれています。しかし、時間が経つにつれて、make Artisanコマンドを使用してクラスを生成する際に、アプリディレクトリ内にさまざまな他のディレクトリが生成されます。たとえば、app/Consoleディレクトリは、make:command Artisanコマンドを実行してコマンドクラスを生成するまで存在しません。

ConsoleおよびHttpディレクトリは、それぞれのセクションでさらに説明されますが、ConsoleおよびHttpディレクトリは、アプリケーションのコアへのAPIを提供するものと考えてください。HTTPプロトコルとCLIは、アプリケーションと対話するためのメカニズムですが、実際にはアプリケーションロジックを含んでいません。言い換えれば、アプリケーションにコマンドを発行する2つの方法です。Consoleディレクトリには、すべてのArtisanコマンドが含まれ、Httpディレクトリには、コントローラー、ミドルウェア、およびリクエストが含まれています。

appディレクトリ内の多くのクラスは、コマンドを介してArtisanによって生成できます。利用可能なコマンドを確認するには、ターミナルでphp artisan list makeコマンドを実行してください。

ブロードキャスティングディレクトリ

Broadcastingディレクトリには、アプリケーションのすべてのブロードキャストチャネルクラスが含まれています。これらのクラスはmake:channelコマンドを使用して生成されます。このディレクトリはデフォルトでは存在しませんが、最初のチャネルを作成するときに作成されます。チャネルについて詳しく知りたい場合は、イベントブロードキャスティングに関するドキュメントを確認してください。

コンソールディレクトリ

Consoleディレクトリには、アプリケーションのすべてのカスタムArtisanコマンドが含まれています。これらのコマンドはmake:commandコマンドを使用して生成できます。

イベントディレクトリ

このディレクトリはデフォルトでは存在しませんが、event:generateおよびmake:event Artisanコマンドによって作成されます。Eventsディレクトリにはevent classesが格納されています。イベントは、特定のアクションが発生したことをアプリケーションの他の部分に通知するために使用され、柔軟性と疎結合を提供します。

例外ディレクトリ

Exceptionsディレクトリには、アプリケーションのすべてのカスタム例外が含まれています。これらの例外はmake:exceptionコマンドを使用して生成できます。

HTTPディレクトリ

Httpディレクトリには、コントローラー、ミドルウェア、およびフォームリクエストが含まれています。アプリケーションに入るリクエストを処理するためのほとんどすべてのロジックは、このディレクトリに配置されます。

ジョブディレクトリ

このディレクトリはデフォルトでは存在しませんが、make:job Artisanコマンドを実行すると作成されます。Jobsディレクトリには、アプリケーションのキュー可能なジョブが格納されています。ジョブはアプリケーションによってキューに入れられるか、現在のリクエストライフサイクル内で同期的に実行されます。現在のリクエスト中に同期的に実行されるジョブは、コマンドパターンの実装であるため、時々「コマンド」と呼ばれます。

リスナーディレクトリ

このディレクトリはデフォルトでは存在しませんが、event:generateまたはmake:listener Artisanコマンドを実行すると作成されます。Listenersディレクトリには、イベントを処理するクラスが含まれています。イベントリスナーは、イベントインスタンスを受け取り、発火したイベントに応じてロジックを実行します。たとえば、UserRegisteredイベントはSendWelcomeEmailリスナーによって処理されるかもしれません。

メールディレクトリ

このディレクトリはデフォルトでは存在しませんが、make:mail Artisanコマンドを実行すると作成されます。Mailディレクトリには、アプリケーションによって送信されるすべてのメールを表すクラスが含まれています。メールオブジェクトは、メールを構築するロジックを単一のシンプルなクラスにカプセル化し、Mail::sendメソッドを使用して送信できるようにします。

モデルディレクトリ

Modelsディレクトリには、すべてのEloquentモデルクラスが含まれています。Laravelに含まれるEloquent ORMは、データベースと連携するための美しくシンプルなActiveRecord実装を提供します。各データベーステーブルには、そのテーブルと対話するために使用される「モデル」が対応しています。モデルを使用すると、テーブル内のデータをクエリしたり、新しいレコードをテーブルに挿入したりできます。

通知ディレクトリ

このディレクトリはデフォルトでは存在しませんが、make:notification Artisanコマンドを実行すると作成されます。Notificationsディレクトリには、アプリケーションによって送信されるすべての「トランザクショナル」通知が含まれています。これには、アプリケーション内で発生するイベントに関する単純な通知が含まれます。Laravelの通知機能は、メール、Slack、SMS、またはデータベースに保存するなど、さまざまなドライバーを介して通知を送信することを抽象化します。

ポリシーディレクトリ

このディレクトリはデフォルトでは存在しませんが、make:policy Artisanコマンドを実行すると作成されます。Policiesディレクトリには、アプリケーションの認可ポリシークラスが含まれています。ポリシーは、ユーザーがリソースに対して特定のアクションを実行できるかどうかを判断するために使用されます。

プロバイダーディレクトリ

Providersディレクトリには、アプリケーションのすべてのサービスプロバイダーが含まれています。サービスプロバイダーは、サービスコンテナにサービスをバインドしたり、イベントを登録したり、アプリケーションを受信リクエストの準備をするためのその他のタスクを実行したりします。

新しいLaravelアプリケーションでは、このディレクトリにはすでにAppServiceProviderが含まれています。必要に応じて、自分のプロバイダーをこのディレクトリに追加することができます。

ルールディレクトリ

このディレクトリはデフォルトでは存在しませんが、make:rule Artisanコマンドを実行すると作成されます。Rulesディレクトリには、アプリケーションのカスタムバリデーションルールオブジェクトが含まれています。ルールは、複雑なバリデーションロジックをシンプルなオブジェクトにカプセル化するために使用されます。詳細については、バリデーションドキュメントを確認してください。