Skip to content

ディレクトリ構造

はじめに

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.phpconsole.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テンプレート、ファイルベースのセッション、ファイルキャッシュ、およびフレームワークによって生成されたその他のファイルが含まれています。このディレクトリは、appframework、および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ディレクトリにはHttpModels、および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ディレクトリには、アプリケーションのカスタムバリデーションルールオブジェクトが含まれます。ルールは、複雑なバリデーションロジックをシンプルなオブジェクトにカプセル化するために使用されます。詳細については、バリデーションドキュメントを確認してください。

ユーザーノート