ディレクトリ構造¶
はじめに¶
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
ディレクトリには、アプリケーションのカスタムバリデーションルールオブジェクトが含まれます。ルールは、複雑なバリデーションロジックをシンプルなオブジェクトにカプセル化するために使用されます。詳細については、バリデーションドキュメントを確認してください。