イントロダクション
Laravelのデフォルトアプリケーション構造はアプリケーションの大小にかかわらず、素晴らしいスタートを切ってもらえることを意図しています。アプリケーションは皆さんのお好みに応じ、自由に体系立ててください。クラスがComposerによりオートローディングできるならば、Laravelはクラスをどこに配置するか強制することはまずありません。
Note: Laravelは初めてですか?Laravel Bootcampでは、Laravelのフレームワークを実際に体験しながら、Laravelアプリケーションを構築することができます。
プロジェクトディレクトリ
appディレクトリ
app
ディレクトリは、アプリケーションのコアコードを配置します。このフォルダの詳細は、この後に説明します。しかし、アプリケーションのほとんど全部のクラスは、このディレクトリの中に設定されることを覚えておいてください。
bootstrapディレクトリ
bootstrap
ディレクトリには、フレームワークを初期起動処理するapp.php
ファイルを設置しています。このディレクトリには、ルートやサービスのキャッシュファイルなど、パフォーマンスを最適化するためのフレームワークで生成されたファイルを含むcache
ディレクトリも含んでいます。通常、このディレクトリ内のファイルを変更する必要はありません。
configディレクトリ
config
ディレクトリは名前が示す通り、アプリケーションの全設定ファイルを設置しています。全ファイルに目を通し、設定可能なオプションに慣れ親しんでおくのは良い考えでしょう。
databaseディレクトリ
database
フォルダはデータベースのマイグレーションとモデルファクトリ、初期値設定(シーディング)を配置しています。ご希望であれば、このディレクトリをSQLiteデータベースの設置場所としても利用できます。
langディレクトリ
lang
ディレクトリには、アプリケーションのすべての言語ファイルを格納します。
publicディレクトリ
public
ディレクトリには、アプリケーションへの全リクエストの入り口となり、オートローディングを設定するindex.php
ファイルがあります。また、このディレクトリにはアセット(画像、JavaScript、CSSなど)を配置します。
resourcesディレクトリ
resources
ディレクトリには、ビューや、CSS、JavaScriptなどのコンパイルしていない、素のアセットを格納します。
routesディレクトリ
routes
ディレクトリは、アプリケーションのすべてのルート定義を配置しています。デフォルトでルートファイルをいくつかLaravelは用意しています。web.php
、api.php
、console.php
、channels.php
。
web.php
ファイルは、RouteServiceProvider
がweb
ミドルウェアグループへ配置するルートを記述します。これにより、セッション状態、CSRF保護、およびクッキー暗号化が提供されます。アプリケーションがステートレスのRESTful
APIを提供しない場合は、すべてのルートがweb.php
ファイルでほぼ定義されるでしょう。
api.php
ファイルは、RouteServiceProvider
がapi
ミドルウェアグループへ配置するルートを記述します。これらのルートはステートレスであることが意図されているため、これらのルートを介してアプリケーションに入るリクエストは、トークンを介してで認証されることを意図しており、セッション状態にアクセスできません。
console.php
ファイルは、クロージャベースのコンソールコマンドをすべて定義する場所です。各クロージャはコマンドインスタンスと結合されるため、各コマンドのIOメソッドを操作する簡単なアプローチが可能です。このファイルはHTTPルートを定義しませんが、アプリケーションへのコンソールベースのエントリポイント(ルート)を定義しています。
channels.php
ファイルは、アプリケーションがサポートするすべてのイベントブロードキャストチャンネルを登録できる場所です。
storageディレクトリ
storage
ディレクトリには、ログ、コンパイル済みBladeテンプレート、ファイルベースのセッション、ファイルキャッシュ、およびフレームワークが作成したその他のファイルが含まれます。このディレクトリは、app
、framework
、logs
ディレクトリに分離されています。app
ディレクトリは、アプリケーションが作成したファイルを保存するために使用できます。framework
ディレクトリは、フレームワークが作成したファイルとキャッシュを保存するために使用します。最後に、logs
ディレクトリにはアプリケーションのログファイルを保存しています。
storage/app/public
ディレクトリは、プロファイルアバターなど、一般にアクセス可能である必要のあるユーザー生成ファイルを保存するために使用します。このディレクトリを指すシンボリックリンクをpublic/storage
に作成する必要があります。php artisan storage:link
Artisanコマンドを使用してリンクを作成できます。
testsディレクトリ
tests
ディレクトリには自動テストを設置します。たとえば、PHPUnitユニットテストと機能テストは、はじめから提供されています。各テストクラスには、Test
という接尾辞を付ける必要があります。phpunit
またはphpvendor/bin/phpunit
コマンドを使用してテストを実行できます。または、テスト結果をより詳細で美しい表現にしたい場合は、php artisan test
Artisanコマンドを使用してテストを実行してください。
vendorディレクトリ
vendor
ディレクトリには、Composerによる依存パッケージが配置されます。
appディレクトリ
アプリケーションの主要な部分は、app
ディレクトリ内に配置します。このディレクトリはデフォルトで、App
名前空間のもとに置かれており、PSR-4オートローディング規約を使い、Composerがオートロードしています。
app
ディレクトリは多様なサブディレクトリを持っています。Console
、Http
、Providers
などです。Console
とHttp
ディレクトリは、アプリケーションの「コア」へAPIを提供していると考えてください。HTTPプロトコルとCLIは両方共にアプリケーションと相互に関係するメカニズムですが、実際のアプリケーションロジックではありません。言い換えれば、これらはアプリケーションに指示を出す、2つの方法に過ぎません。Console
ディレクトリは全Artisanコマンドで構成され、一方のHttp
ディレクトリはコントローラやフィルター、リクエストにより構成されています。
クラス生成のためのmake
Artisanコマンドを使用することで、さまざまなディレクトリがapp
ディレクトリ内に作成されます。たとえば、app/Jobs
ディレクトリは、ジョブクラスを生成するmake:job
Artisanコマンドを実行するまで存在していません。
Note: Artisanコマンドにより、
app
ディレクトリ下にたくさんのクラスが生成されます。使用可能なコマンドを確認するには、php artisan list make
コマンドをターミナルで実行してください。
Broadcastingディレクトリ
Broadcasting
ディレクトリは、アプリケーションの全ブロードキャストチャンネルクラスで構成します。これらのクラスは、make:channel
コマンドで生成されます。このディレクトリはデフォルトでは存在しませんが、最初にチャンネルを生成したときに作成されます。チャンネルについての詳細は、イベントブロードキャストのドキュメントで確認してください。
Consoleディレクトリ
Console
ディレクトリは、アプリケーションの全カスタムArtisanコマンドで構成します。これらのコマンドクラスはmake:command
コマンドにより生成されます。コンソールカーネルもこのディレクトリ内にあり、カスタムArtisanコマンドや、タスクのスケジュールを登録します。
Eventsディレクトリ
このディレクトリはデフォルトで存在していません。event:generate
かmake:event
Artisanコマンド実行時に作成されます。Events
ディレクトリは、イベントクラスを設置する場所です。イベントは特定のアクションが起きたことをアプリケーションの別の部分へ知らせるために使われ、柔軟性と分離性を提供しています。
Exceptionsディレクトリ
Exceptions
ディレクトリはアプリケーションの例外ハンドラで構成します。また、アプリケーションから投げる例外を用意するにも適した場所でしょう。例外のログやレンダ方法をカスタマイズしたい場合は、このディレクトリのHandler
クラスを修正してください。
Httpディレクトリ
Http
ディレクトリはコントローラ、ミドルウェア、フォームリクエストを設置します。アプリケーションへのリクエストを処理するロジックは、ほぼすべてこのディレクトリ内に設置します。
Jobsディレクトリ
このディレクトリはデフォルトで存在していません。make:job
Artisanコマンドを実行すると作成されます。Jobs
ディレクトリはアプリケーションのキュー投入可能なジョブを置いておく場所です。Jobs
はアプリケーションによりキューに投入されるか、もしくは現在のリクエストサイクル中に同期的に実行されます。現在のリクエストサイクル中に同期的に実行するジョブは、コマンドパターンを実装しているため、時に「コマンド」と呼ばれることがあります。
Listenersディレクトリ
このディレクトリはデフォルトで存在していません。event:generate
かmake:listener
Artisanコマンドを実行すると、作成されます。Listeners
ディレクトリには、eventsイベントを処理するクラスを設置します。イベントリスナはイベントインスタンスを受け取り、発行されたイベントへ対応するロジックを実行します。たとえば、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
ディレクトリは、アプリケーションの全サービスプロバイダにより構成します。サービスプロバイダは、サービスをコンテナと結合、イベントの登録、もしくはアプリケーションへやってくるリクエストを処理するために必要な用意をするタスクを実行するなど、アプリケーションの事前準備を行います。
インストール直後のアプリケーションでも、このディレクトリは多くのプロパイダーを含んでいます。必要に応じて、自分のプロバイダを自由に追加してください。
Rulesディレクトリ
このディレクトリは、デフォルトでは存在していません。make:rule
Artisanコマンドを実行すると、作成されます。Rules
ディレクトリは、アプリケーションが使用するバリデーションルールオブジェクトで構成します。ルールは複雑なバリデーションロジックをシンプルなオブジェクトへカプセル化するために使用します。詳細は、バリデーションのドキュメントで確認してください。