ディレクトリ構造
はじめに
デフォルトのLaravelアプリケーション構造は、大小を問わず、あらゆるアプリケーションの優れた出発点を提供することを目的としています。ただし、アプリケーションを自由に編成できます。Laravelは、Composerがクラスをオートロードできる限り、特定のクラスがどこに配置されるかについて、ほとんど制限を課しません。
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
ディレクトリには、アプリケーションのすべてのルート定義が含まれています。デフォルトでは、Laravelには2つのルートファイル(`web.php`と`console.php`)が含まれています。
web.php
ファイルには、Laravelが`web`ミドルウェアグループに配置するルートが含まれており、セッション状態、CSRF保護、およびCookieの暗号化を提供します。アプリケーションがステートレスな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`という名前空間の下にあり、PSR-4オートロード標準を使用してComposerによってオートロードされます。
デフォルトでは、app
ディレクトリには Http
、Models
、および Providers
ディレクトリが含まれています。ただし、Artisan の `make` コマンドを使用してクラスを生成するにつれて、時間の経過とともに `app` ディレクトリ内に他のさまざまなディレクトリが生成されます。たとえば、`make:command` Artisan コマンドを実行してコマンドクラスを生成するまで、app/Console
ディレクトリは存在しません。
Console
ディレクトリと Http
ディレクトリの両方は、以下のそれぞれのセクションで詳しく説明しますが、Console
ディレクトリと Http
ディレクトリは、アプリケーションのコアへのAPIを提供するものと考えてください。HTTPプロトコルとCLIはどちらもアプリケーションと対話するためのメカニズムですが、実際にはアプリケーションロジックは含まれていません。言い換えれば、これらはアプリケーションにコマンドを発行する2つの方法です。Console
ディレクトリにはすべてのArtisanコマンドが含まれ、Http
ディレクトリにはコントローラー、ミドルウェア、およびリクエストが含まれます。
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ディレクトリ
このディレクトリはデフォルトでは存在しませんが、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
が含まれています。必要に応じて、このディレクトリに独自のprovidersを追加できます。
Rulesディレクトリ
このディレクトリはデフォルトでは存在しませんが、 `make:rule` Artisanコマンドを実行すると作成されます。 `Rules`ディレクトリには、アプリケーションのカスタム検証ルールオブジェクトが含まれています。ルールは、複雑な検証ロジックを単純なオブジェクトにカプセル化するために使用されます。詳細については、検証に関するドキュメントを参照してください。