イントロダクション

Laravelのデフォルトアプリケーション構造は、アプリケーションの大小にかかわらず、素晴らしいスタートを切ってもらえることを意図しています。もちろん、アプリケーションは皆さんのお好みに応じ、自由に体系立ててください。クラスがComposerによりオートローディングできる限り、Laravelはクラスをどこに配置するか、あなたに強制することはまずありません。

ルートディレクトリ

新しくインストールしたLaravelのルートディレクトリーには、様々なフォルダーが用意されています。

appディレクトリーは、皆さんが想像している通り、皆さんのアプリケーションのコアコードを配置します。このフォルダーの詳細は、このあと説明します。

bootstrapフォルダーは、フレームワークの初期起動やオートローディングの設定を行うファイルを含んでいます。

configディレクトリーには、名前が示す通り、アプリケーションの全設定ファイルが設置されています。

databaseフォルダーは、データベースのマイグレーションと初期値設定(シーディング)を配置します。

publicディレクトリーは、フロントコントローラーとアセット(画像、JavaScript、CSSなど)を配置します。

resourcesディレクトリーは、ビューやアセットの元ファイル(LESS、SASS、CoffeeScript)、「言語」ファイルを配置します。

storageディレクトリーへは、コンパイルされたBladeテンプレート、ファイルベースのセッション、ファイルキャッシュなど、フレームワークにより生成されるファイルが保存されます。

testsディレクトリーには、皆さんの自動テストを配置します。

vendorディレクトリーへは、Composer依存パッケージが配置されます。

Appディレクトリー

皆さんのアプリケーションの「肉」の部分は、appディレクトリー内に配置します。このディレクトリーはデフォルトで、App名前空間のもとに置かれており、PSR-4オートローディング規約を使い、Composerがオートロードしています。** app:name Artisanコマンドを使用し、この名前空間を変更できます。**

appディレクトリーは、多様なサブディレクトリーを持っています。ConsoleHttpProvidersなどです。ConsoleHttpディレクトリーは、アプリケーションの「コア」へAPIを提供すると考えてください。HTTPプロトコルとCLIは、両方共にアプリケーションと相互に関係するメカニズムですが、実際のアプリケーションロジックではありません。言い換えれば、これらはアプリケーションに指示を出す、2つの方法に過ぎません。Consoleディレクトリーは全Artisanコマンドで構成し、一方のHttpディレクトリーはコントローラーやフィルター、リクエストにより構成します。

Commandsディレクトリーはもちろん、アプリケーションのコマンドを置いておく場所です。Commandsはアプリケーションにより、キューに投入されるジョブを表すと同時に、現在のリクエストのライフサイクル中に、同期的に実行できるタスクを表します。

Eventsディレクトリーは、名前の通りイベントクラスを設置する場所です。もちろん、イベントとして扱うクラスを使用することは必須ではありません。しかし、使用を決めた場合、Artisanコマンドラインにより生成されるクラスは、デフォルトでこのディレクトリーへ設置されます。

Handlersディレクトリーは、コマンドとイベント両方のハンドラークラスで構成されています。ハンドラーは、コマンドかイベントを受け取り、コマンドか発行されたイベントに応じたロジックを実行します。

Servicesディレクトリーは、アプリケーションを機能させるのに必要な、数々の「ヘルパー」サービスで構成します。例えば、Laravelに含まれるRegistrarサービスは、アプリケーションの新しいユーザーのバリデーションと生成の役割を担っています。サービスの他の例には、外部APIやメトリックシステムと連携したりするものや、自分自身のアプリケーションから情報を収集するものまで上げられます。

Exceptionsディレクトリーは、アプリケーションの例外ハンドラーと、さらに自分のアプリケーションから投げられる例外を置いておくには最適でしょう。

注目: appディレクトリー中、多くのクラスがAritsan コマンドにより生成されます。使用できるコマンドを確認するには、端末でphp artisan list makeコマンドを実行してください。

アプリケーションの名前空間付け

上記の通り、デフォルトのアプリケーション名前空間は Appです。しかし、app:name Artisanコマンドにより簡単に変更することもできます。例えば、アプリケーションの名前が"SocialNet"なら、以下のようにコマンドを実行します。

php artisan app:name SocialNet