コンテンツにスキップ

ディレクトリ構造

はじめに

デフォルトのLaravelアプリケーション構造は、大小を問わず、あらゆるアプリケーションの優れた出発点を提供することを目的としています。ただし、アプリケーションを自由に編成できます。Laravelは、Composerがクラスをオートロードできる限り、特定のクラスがどこに配置されるかについて、ほとんど制限を課しません。

lightbulb

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 ディレクトリには HttpModels、および Providers ディレクトリが含まれています。ただし、Artisan の `make` コマンドを使用してクラスを生成するにつれて、時間の経過とともに `app` ディレクトリ内に他のさまざまなディレクトリが生成されます。たとえば、`make:command` Artisan コマンドを実行してコマンドクラスを生成するまで、app/Console ディレクトリは存在しません。

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

lightbulb

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