Directory Structure
Table of Contents
Introduction
default の Laravelapplication 構造は、大規模でも小規模でも application の開始点として非常に適しています。しかし、あなたの application をどのように整理するかは自由です。Laravel は、Composer が class を自動的に読み込むことができる限り、特定の class がどこに配置されているかにほとんど制限を設けていません。
NOTE
Laravel に初めて触れるなら、Laravel Bootcamp をチェックしてみてください。フレームワークの操作方法を手取り足取り教えつつ、あなたが初めての Laravel application を build するお手伝いをします。
The Root Directory
App ディレクトリ
app
ディレクトリには、 application の中心となる code が含まれています。このディレクトリはもうすぐ詳しく見ていきますが、 application のほとんどすべてのクラスはこのディレクトリに存在します。
ブートストラップディレクトリ
bootstrap
ディレクトリには、フレームワークをブートストラップするapp.php
ファイルが含まれています。また、このディレクトリには、 route や services cache ファイルなど、パフォーマンス最適化のためのフレームワーク生成ファイルを格納するcache
ディレクトリも併設されています。
Config ディレクトリ
config
ディレクトリは、その名前が示す通り、アプリケーションのすべての設定ファイルを含んでいます。これらのファイルをすべて読んで、あなたに利用可能なすべての options について理解するのは素晴らしいアイデアです。
Database ディレクトリ
database
ディレクトリには、 database migrations 、 model ファクトリー、およびシードが含まれています。ご希望であれば、このディレクトリを SQLite の database を保管するためにも使用することができます。
Public ディレクトリ
public
ディレクトリには、すべての requests のエントリポイントであるindex.php
ファイルが含まれており、オートローディングを設定します。このディレクトリには、images や、JavaScript、CSS などのアセットも格納されています。
Resources ディレクトリ
resources
ディレクトリには、あなたのviewsだけでなく、 CSS や JavaScript などの未コンパイルの素材も含まれています。
Routes ディレクトリ
routes
ディレクトリには、あなたの application のすべての route の定義が含まれています。 default では、 Laravel には web.php
と console.php
の 2 つの route ファイルが含まれています。
web.php
ファイルには、web
の middleware グループに Laravel が配置する routes が含まれており、これにより session state 、 CSRF protection 、および cookie encryption が提供されます。あなたの application がステートレスな、RESTful な API を提供しない場合、すべての routes はおそらくweb.php
ファイルで定義されるでしょう。
console.php
ファイルは、すべてのクロージャベースの console コマンドを定義できる場所です。各クロージャは、各コマンドの IO メソッドと対話する簡単なアプローチを可能にする command インスタンスにバインドされています。このファイルは HTTP routes を定義していませんが、 console ベースのエントリーポイント( routes )を application に定義します。また、 console.php
ファイルでscheduleタスクも可能です。
オプションとして、 API routes (api.php
)や broadcasting チャンネル(channels.php
)の追加の route ファイルを、install:api
とinstall:broadcasting
の Artisan コマンドを使用してインストールすることができます。
api.php
ファイルには、ステートレスを目指す routes が含まれているため、これらの routes を通じて application に入る requests は、tokens を介したauthentication を目指し、 session state へのアクセスは持ちません。
channels.php
ファイルは、あなたの application がサポートするすべてのevent 放送channels を登録する場所です。
Storage ディレクトリ
storage
ディレクトリには、ログ、コンパイル済みの Blade templates 、ファイルベースの session、ファイル cache、およびフレームワークによって生成されるその他のファイルが格納されています。このディレクトリは、app
、framework
、そしてlogs
ディレクトリに分割されています。 app
ディレクトリは、あなたの application によって生成される任意のファイルを保存するために使用することができます。framework
ディレクトリは、フレームワークによって生成されるファイルと cache を保存するために使用されます。最後に、logs
ディレクトリには、あなたのアプリケーションの log ファイルが格納されています。
storage/app/public
ディレクトリは、公にアクセス可能であるべきプロフィールのアバターやユーザーが生成したファイルを保存するために利用されます。このディレクトリを指すシンボリックリンクを public/storage
に作成するべきです。php artisan storage:link
Artisan command を使用してリンクを作成することが可能です。
テストディレクトリ
tests
ディレクトリには自動化テストが含まれています。例えば、Pest または PHPUnit のユニットテストや feature テストが既に提供されています。各テストの class は、単語 Test
を接尾辞にすべきです。テストは /vendor/bin/pest
または /vendor/bin/phpunit
command を使って実行できます。また、tests
結果をより詳細で美しい表現で見たい場合は、php artisan test
Artisan command を使ってテストを実行することもできます。
Vendor ディレクトリ
vendor
ディレクトリには、あなたのComposer の依存関係が含まれています。
The App Directory
あなたの application の大半は、App
ディレクトリに収容されています。 default では、このディレクトリは app
という名前空間であり、 Composer がPSR-4 オートローディングスタンダード を使って自動的にロードされます。
default で、app
ディレクトリには、Http
、Models
、およびProviders
ディレクトリが含まれています。しかし、時間の経過とともに、クラスを生成するために Artisan コマンドを使用すると、 app ディレクトリ内にさまざまな他のディレクトリが生成されます。例えば、app/Console
ディレクトリは、 command class を生成するためにmake:command
Artisan command を実行するまで存在しません。
Console
と Http
ディレクトリは、それぞれ以下のセクションで詳しく説明されていますが、Console
と Http
ディレクトリをあなたの application の中核への API と考えてみて下さい。 HTTP プロトコルと CLI は両方ともあなたの application と対話する手段ですが、実際の application のロジックを含んでいるわけではありません。言い換えれば、それらはあなたの application への命令を出す 2 つの方法です。Console
ディレクトリには、あなたの Artisan commands がすべて含まれており、Http
ディレクトリには、あなたのコントローラー、 middleware 、そして request が含まれています。
NOTE
app
ディレクトリ内の多くのクラスは、Artisan のコマンドを介して生成することができます。利用可能なコマンドを確認するには、ターミナルでphp artisan list make
command を実行してください。
Broadcasting ディレクトリ
Broadcasting
ディレクトリには、application のすべての broadcast チャンネル classes が含まれています。これらの classes は、make:channel
command を使用して生成されます。このディレクトリは default では存在しませんが、最初の channel を作成するときに作成されます。チャンネルについて詳しく知りたい場合は、eventbroadcastのドキュメンテーションをチェックしてください。
Console ディレクトリ
Console
ディレクトリには、 application のすべての custom Artisan コマンドが含まれています。これらのコマンドは、make:command
command を使用して生成することができます。
Events ディレクトリ
このディレクトリは、 default では存在しませんが、event:generate
と make:event
の Artisan コマンドによって作成されます。Events
ディレクトリにはevent クラスが格納されています。 Events は、特定の action が発生したことをあなたの application の他の部分に alert するために使用することができ、大きな柔軟性とデクープリングを提供します。
Exceptions ディレクトリ
Exceptions
ディレクトリは、application の全ての custom 例外を含んでいます。これらの例外は、make:exception
command を使用して生成することができます。
Http ディレクトリ
Http
ディレクトリには、コントローラー、 middleware 、そしてフォームリクエストが含まれています。 application に入るリクエストを handle するためのほぼ全てのロジックは、このディレクトリに配置されます。
Jobs ディレクトリ
このディレクトリは、default では存在しませんが、make:job
Artisan command を実行すると、あなたのために作成されます。Jobs
ディレクトリは、あなたの application のためのqueueable jobsを収容しています。jobs は、あなたの application によって queue に入れられるか、または現在の request ライフサイクル内で同期的に実行されることがあります。現在の request 中に同期的に実行される jobs は、command pattern の実装であるため、"commands"と呼ばれることもあります。
Listeners ディレクトリ
このディレクトリは default では存在しないが、event:generate
またはmake:listener
という Artisan コマンドを実行すると作成されます。Listeners
ディレクトリには、あなたのeventsを handle するクラスが含まれています。 Event listeners は event のインスタンスを受け取り、 event が発火された response にロジックを実行します。例えば、UserRegistered
という event はSendWelcomeEmail
リスナーによって処理されるかもしれません。
Mail ディレクトリ
このディレクトリは default としては存在しませんが、make:mail
Artisan command を実行すると作成されます。Mail
ディレクトリには、あなたの application から送信される電子メールを表すクラスがすべて含まれています。 Mail オブジェクトを使用すると、 email の構築に関するすべてのロジックを、 single でシンプルな class にカプセル化して、Mail::send
method を使用して送信することができます。
Models ディレクトリ
Models
ディレクトリには、すべてのEloquent model classが含まれています。 Laravel に含まれている Eloquent ORM は、あなたの database で作業するための美しくシンプルな ActiveRecord の実装を提供します。各 database のテーブルには、そのテーブルと対話するための対応する"Model"があります。 Models は、テーブル内の data の query と、テーブルへの新しいレコードの insert を可能にします。
Notifications ディレクトリ
このディレクトリは default では存在しませんが、make:notification
Artisan command を実行すると作成されます。Notifications
ディレクトリには、あなたの application から送信される"transactional" notificationsが全て含まれています。これらは、あなたの application 内で発生する events についてのシンプルな notifications などです。Laravel の notification feature は、 email 、 Slack 、SMS、または database に保存されるなど、さまざまなドライバーを介して notifications を送信することを抽象化します。
Policies ディレクトリ
このディレクトリは default としては存在しませんが、make:policy
の Artisan command を実行すると作成されます。Policies
ディレクトリは、あなたの application のためのauthorization policy classesを含んでいます。 Policies は、 user が resource に対して特定の action を実行できるかどうかを決定するために使用されます。
Providers ディレクトリ
Providers
ディレクトリには、あなたの application のためのすべてのservice providersが含まれています。 service providers は、service container ー内に services をバインドしたり、events を登録したり、またはその他のタスクを実行して、あなたの application が受信 request を受け入れる準備をします。
新たな Laravel application では、このディレクトリには既にAppServiceProvider
が含まれています。必要に応じて、自分自身の providers をこのディレクトリに追加することができます。
ルールディレクトリ
このディレクトリは default では存在しませんが、make:rule
Artisan command を実行すると作成されます。Rules
ディレクトリには、application の customvalidation ルール object が含まれています。ルールは、複雑な validation ロジックをシンプルな object にカプセル化するために使用されます。詳細については、validation ドキュメンテーションをご覧ください。