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