ディレクトリ構造¶
はじめに¶
Laravelのデフォルトアプリケーション構造は、大規模なアプリケーションと小規模なアプリケーションの両方にとって素晴らしい出発点を提供することを目的としています。ただし、アプリケーションをどのように整理するかは自由です。Laravelは、Composerがクラスを自動ロードできる限り、どこにクラスが配置されているかについてほとんど制限を課しません。
Note
Laravelを初めて使う方は、Laravel Bootcampをチェックしてください。フレームワークのハンズオンツアーを通じて、最初のLaravelアプリケーションを構築する方法を学ぶことができます。
ルートディレクトリ¶
appディレクトリ¶
appディレクトリには、アプリケーションのコアコードが含まれています。このディレクトリについては後ほど詳しく説明しますが、アプリケーションのほとんどのクラスがこのディレクトリに配置されます。
bootstrapディレクトリ¶
bootstrapディレクトリには、フレームワークをブートストラップするapp.phpファイルが含まれています。また、このディレクトリには、ルートやサービスのキャッシュファイルなど、パフォーマンス最適化のためにフレームワークが生成するファイルを含むcacheディレクトリもあります。
configディレクトリ¶
configディレクトリには、アプリケーションのすべての設定ファイルが含まれています。これらのファイルをすべて読んで、利用可能なオプションをすべて理解することをお勧めします。
databaseディレクトリ¶
databaseディレクトリには、データベースのマイグレーション、モデルファクトリ、シードが含まれています。必要に応じて、SQLiteデータベースをこのディレクトリに保存することもできます。
publicディレクトリ¶
publicディレクトリには、すべてのリクエストがアプリケーションに入るエントリーポイントであるindex.phpファイルが含まれています。また、このディレクトリには画像、JavaScript、CSSなどのアセットも保存されます。
resourcesディレクトリ¶
resourcesディレクトリには、ビューや、未コンパイルのアセット(CSSやJavaScriptなど)が含まれています。
routesディレクトリ¶
routesディレクトリには、アプリケーションのすべてのルート定義が含まれています。デフォルトでは、web.phpとconsole.phpの2つのルートファイルがLaravelに含まれています。
web.phpファイルには、Laravelがwebミドルウェアグループに配置するルートが含まれています。このグループは、セッション状態、CSRF保護、およびクッキーの暗号化を提供します。アプリケーションがステートレスなRESTful APIを提供しない場合、ほとんどのルートはweb.phpファイルで定義されるでしょう。
console.phpファイルは、すべてのクロージャーベースのコンソールコマンドを定義する場所です。各クロージャーはコマンドインスタンスにバインドされており、各コマンドのIOメソッドと簡単にやり取りできるようになっています。このファイルはHTTPルートを定義しませんが、アプリケーションへのコンソールベースのエントリーポイント(ルート)を定義します。また、console.phpファイルでスケジュールタスクを定義することもできます。
必要に応じて、install:apiおよびinstall:broadcasting Artisanコマンドを介して、APIルート(api.php)とブロードキャストチャンネル(channels.php)の追加のルートファイルをインストールできます。
api.phpファイルには、ステートレスであることを意図したルートが含まれています。したがって、これらのルートを通じてアプリケーションに入るリクエストは、トークンを介して認証され、セッション状態にアクセスできないことを意図しています。
channels.phpファイルは、アプリケーションがサポートするすべてのイベントブロードキャストチャンネルを登録する場所です。
storageディレクトリ¶
storageディレクトリには、ログ、コンパイルされたBladeテンプレート、ファイルベースのセッション、ファイルキャッシュ、およびフレームワークによって生成されたその他のファイルが含まれています。このディレクトリは、app、framework、およびlogsディレクトリに分けられています。appディレクトリは、アプリケーションによって生成されたファイルを保存するために使用できます。frameworkディレクトリは、フレームワークによって生成されたファイルとキャッシュを保存するために使用されます。最後に、logsディレクトリには、アプリケーションのログファイルが含まれています。
storage/app/publicディレクトリは、プロフィールアバターなど、ユーザーが生成したファイルを保存するために使用できます。これらのファイルは公開されるべきです。このディレクトリへのシンボリックリンクをpublic/storageに作成する必要があります。このリンクは、php artisan storage:link Artisanコマンドを使用して作成できます。
testsディレクトリ¶
testsディレクトリには、自動テストが含まれています。PestまたはPHPUnitのユニットテストと機能テストの例がデフォルトで提供されています。各テストクラスには、Testという単語を接尾辞として付ける必要があります。テストは、/vendor/bin/pestまたは/vendor/bin/phpunitコマンドを使用して実行できます。また、テスト結果をより詳細で美しい表現で表示したい場合は、php artisan test Artisanコマンドを使用してテストを実行できます。
vendorディレクトリ¶
vendorディレクトリには、Composerの依存関係が含まれています。
Appディレクトリ¶
アプリケーションの大部分は、appディレクトリに配置されます。デフォルトでは、このディレクトリはApp名前空間の下にあり、ComposerによってPSR-4自動ロード規格を使用して自動ロードされます。
デフォルトでは、appディレクトリにはHttp、Models、およびProvidersディレクトリが含まれています。ただし、時間が経つにつれて、make Artisanコマンドを使用してクラスを生成すると、appディレクトリ内にさまざまなディレクトリが生成されます。たとえば、app/Consoleディレクトリは、make:command Artisanコマンドを実行してコマンドクラスを生成するまで存在しません。
ConsoleディレクトリとHttpディレクトリについては、後ほどそれぞれのセクションで詳しく説明しますが、ConsoleディレクトリとHttpディレクトリは、アプリケーションのコアに対するAPIを提供すると考えてください。HTTPプロトコルとCLIは、どちらもアプリケーションとやり取りするためのメカニズムですが、実際のアプリケーションロジックは含まれていません。言い換えれば、これらはアプリケーションにコマンドを発行する2つの方法です。Consoleディレクトリには、すべてのArtisanコマンドが含まれていますが、Httpディレクトリには、コントローラー、ミドルウェア、およびリクエストが含まれています。
Note
appディレクトリ内の多くのクラスは、Artisanコマンドを介して生成できます。利用可能なコマンドを確認するには、ターミナルでphp artisan list makeコマンドを実行してください。
Broadcastingディレクトリ¶
Broadcastingディレクトリには、アプリケーションのすべてのブロードキャストチャンネルクラスが含まれています。これらのクラスは、make:channelコマンドを使用して生成されます。このディレクトリはデフォルトでは存在しませんが、最初のチャンネルを作成するときに作成されます。チャンネルの詳細については、イベントブロードキャストのドキュメントを確認してください。
Consoleディレクトリ¶
Consoleディレクトリには、アプリケーションのすべてのカスタムArtisanコマンドが含まれています。これらのコマンドは、make:commandコマンドを使用して生成できます。
Eventsディレクトリ¶
このディレクトリはデフォルトでは存在しませんが、event:generateおよびmake:event Artisanコマンドによって作成されます。Eventsディレクトリには、イベントクラスが含まれています。イベントは、特定のアクションが発生したことをアプリケーションの他の部分に通知するために使用され、柔軟性とデカップリングを提供します。
Exceptionsディレクトリ¶
Exceptionsディレクトリには、アプリケーションのすべてのカスタム例外が含まれています。これらの例外は、make:exceptionコマンドを使用して生成できます。
Httpディレクトリ¶
Httpディレクトリには、コントローラー、ミドルウェア、およびフォームリクエストが含まれています。アプリケーションに入るほとんどのリクエストを処理するロジックは、このディレクトリに配置されます。
Jobsディレクトリ¶
Jobsディレクトリには、アプリケーションのすべてのジョブが含まれています。ジョブは、アプリケーションのキューに入れられるか、現在のリクエストサイクル内で同期的に実行される可能性があります。デフォルトでは、このディレクトリは存在しませんが、make:job Artisanコマンドを使用して最初のジョブを生成すると作成されます。
Listenersディレクトリ¶
Listenersディレクトリには、イベントを処理するクラスが含まれています。リスナーは、イベントが発生したときにロジックを実行するように登録されます。デフォルトでは、このディレクトリは存在しませんが、event:generateまたはmake:listener Artisanコマンドを使用して最初のリスナーを生成すると作成されます。
Mailディレクトリ¶
Mailディレクトリには、アプリケーションが送信するメールを表すクラスが含まれています。メールは、make:mail Artisanコマンドを使用して生成できます。
Modelsディレクトリ¶
Modelsディレクトリには、すべてのEloquentモデルクラスが含まれています。Eloquent ORMは、データベースとやり取りするための美しくシンプルなActiveRecord実装を提供します。デフォルトでは、このディレクトリは存在しませんが、make:model Artisanコマンドを使用して最初のモデルを生成すると作成されます。
Notificationsディレクトリ¶
Notificationsディレクトリには、アプリケーション内で発生するすべての「トランザクション」通知が含まれています。通知は、メール、Slack、SMSなどのチャネルを介してユーザーに情報を送信する方法を表します。デフォルトでは、このディレクトリは存在しませんが、make:notification Artisanコマンドを使用して最初の通知を生成すると作成されます。
Policiesディレクトリ¶
Policiesディレクトリには、アプリケーションの認可ポリシークラスが含まれています。ポリシーは、ユーザーが特定のリソースに対してアクションを実行できるかどうかを判断するために使用されます。デフォルトでは、このディレクトリは存在しませんが、make:policy Artisanコマンドを使用して最初のポリシーを生成すると作成されます。
Providersディレクトリ¶
Providersディレクトリには、アプリケーションのすべてのサービスプロバイダが含まれています。サービスプロバイダは、アプリケーションの起動プロセス中にサービスをブートストラップし、コンテナへのサービスの登録、イベントのリッスン、その他のタスクを実行します。
Rulesディレクトリ¶
Rulesディレクトリには、アプリケーションのカスタムバリデーションルールオブジェクトが含まれています。ルールは、複雑なバリデーションロジックをシンプルなオブジェクトにカプセル化するために使用されます。デフォルトでは、このディレクトリは存在しませんが、make:rule Artisanコマンドを使用して最初のルールを生成すると作成されます。
このディレクトリはデフォルトでは存在しませんが、make:job Artisanコマンドを実行すると作成されます。Jobsディレクトリには、アプリケーションのキュー可能なジョブが格納されます。ジョブはアプリケーションによってキューに入れられるか、現在のリクエストのライフサイクル内で同期的に実行されます。現在のリクエスト中に同期的に実行されるジョブは、コマンドパターンの実装であるため、「コマンド」と呼ばれることもあります。
Listenersディレクトリ¶
このディレクトリはデフォルトでは存在しませんが、event:generateまたはmake:listener Artisanコマンドを実行すると作成されます。Listenersディレクトリには、イベントを処理するクラスが含まれます。イベントリスナーはイベントインスタンスを受け取り、イベントが発生したことに対応してロジックを実行します。例えば、UserRegisteredイベントはSendWelcomeEmailリスナーによって処理されるかもしれません。
Mailディレクトリ¶
このディレクトリはデフォルトでは存在しませんが、make:mail Artisanコマンドを実行すると作成されます。Mailディレクトリには、アプリケーションによって送信されるメールを表すクラスがすべて含まれます。メールオブジェクトを使用すると、メールの構築に関するすべてのロジックをMail::sendメソッドを使用して送信できる単一のシンプルなクラスにカプセル化できます。
Modelsディレクトリ¶
Modelsディレクトリには、すべてのEloquentモデルクラスが含まれます。Laravelに含まれるEloquent ORMは、データベースを操作するための美しくシンプルなActiveRecord実装を提供します。各データベーステーブルには、そのテーブルと対話するために使用される対応する「モデル」があります。モデルを使用すると、テーブル内のデータをクエリしたり、新しいレコードをテーブルに挿入したりできます。
Notificationsディレクトリ¶
このディレクトリはデフォルトでは存在しませんが、make:notification Artisanコマンドを実行すると作成されます。Notificationsディレクトリには、アプリケーション内で発生するイベントに関するシンプルな通知など、アプリケーションによって送信されるすべての「トランザクション」通知が含まれます。Laravelの通知機能は、メール、Slack、SMS、またはデータベースに保存されるなど、さまざまなドライバーを介して通知を送信することを抽象化します。
Policiesディレクトリ¶
このディレクトリはデフォルトでは存在しませんが、make:policy Artisanコマンドを実行すると作成されます。Policiesディレクトリには、アプリケーションの認可ポリシークラスが含まれます。ポリシーは、ユーザーがリソースに対して特定のアクションを実行できるかどうかを判断するために使用されます。
Providersディレクトリ¶
Providersディレクトリには、アプリケーションのすべてのサービスプロバイダが含まれます。サービスプロバイダは、サービスコンテナにサービスをバインドしたり、イベントを登録したり、その他のタスクを実行して、アプリケーションを受信リクエストに備えるためにアプリケーションをブートストラップします。
新しいLaravelアプリケーションでは、このディレクトリにはすでにAppServiceProviderが含まれています。必要に応じて、独自のプロバイダをこのディレクトリに自由に追加できます。
Rulesディレクトリ¶
このディレクトリはデフォルトでは存在しませんが、make:rule Artisanコマンドを実行すると作成されます。Rulesディレクトリには、アプリケーションのカスタムバリデーションルールオブジェクトが含まれます。ルールは、複雑なバリデーションロジックをシンプルなオブジェクトにカプセル化するために使用されます。詳細については、バリデーションドキュメントを確認してください。