前回記事
目的
- 勉強のため、Laravel 7.xの公式ドキュメントを読み解いていく。
- 今回は、公式ドキュメントの「ドキュメント構造」の章を扱う。
参考
イントロダクション
Laravelのデフォルトアプリケーション構造はアプリケーションの大小にかかわらず、素晴らしいスタートを切ってもらえることを意図しています。
アプリケーションは皆さんのお好みに応じ、自由に体系立ててください。
クラスがComposerによりオートローディングできるならば、Laravelはクラスをどこに配置するか強制することはまずありません。
はい。
modelsディレクトリはどこにある?
Laravelを学習し始めるとき、多くの開発者はmodelsディレクトリが存在しないことに戸惑います。しかし、意図的にこのディレクトリを用意していません。
多くの別々の人達にとって、その意味合いはさまざまなため、"models"という言葉の定義は曖昧であることに私達は気づきました。
ある開発者たちはすべてのビジネスロジックを総称してアプリケーションの「モデル」と呼び、一方で別の人達はリレーショナルデータベースに関連するクラスを「モデル」として参照しています。
このため、私達はEloquentモデルをデフォルトではappディレクトリ下へ設置することを選択し、開発者自分が選んだどこか別の場所へ設置してもらうことにしました。
modelsディレクトリはなくて、appディレクトリに置くそう。
プロジェクトディレクトリ
appディレクトリ
アプリケーションの主要な部分を配置する。
クラス生成のためのmake Artisanコマンドを使用することで、様々なディレクトリがappディレクトリ内に作成される。
例:make:jobコマンドでapp/Jobsディレクトリが作成される。
使用可能なコマンドを確認するには、php artisan list makeコマンドを実行する。
# php artisan list make
Laravel Framework 7.12.0
Usage:
command [options] [arguments]
Options:
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
--env[=ENV] The environment the command should run under
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Available commands for the "make" namespace:
make:cast Create a new custom Eloquent cast class
make:channel Create a new channel class
make:command Create a new Artisan command
make:component Create a new view component class
make:controller Create a new controller class
make:event Create a new event class
make:exception Create a new custom exception class
make:factory Create a new model factory
make:job Create a new job class
make:listener Create a new event listener class
make:mail Create a new email class
make:middleware Create a new middleware class
make:migration Create a new migration file
make:model Create a new Eloquent model class
make:notification Create a new notification class
make:observer Create a new observer class
make:policy Create a new policy class
make:provider Create a new service provider class
make:request Create a new form request class
make:resource Create a new resource
make:rule Create a new validation rule
make:seeder Create a new seeder class
make:test Create a new test class
以下は、app以下のディレクトリについて。
Bloadcastingディレクトリ
デフォルトでは作成されず、make:channelコマンドで作成される。
アプリケーションの全ブロードキャストチャンネルクラスで構成する。
Consoleディレクトリ
make:commandコマンドにより作成される。
Consloeディレクトリは、全Artisanコマンドで構成される。
コンソールカーネルもこのディレクトリ内にあり、カスタムArtisanコマンドや、タスクのスケジュールを登録する。
Eventsディレクトリ
デフォルトでは作成されず、event:generateかmake:event Artisanコマンドで作成される。
イベントクラスを設置する場所で、イベントは特定のアクションが起きたことをアプリケーションの別の部分へ知らせるために使われる。
Exceptionsディレクトリ
アプリケーションの例外ハンドラで構成され、アプリケーションから投げる例外を用意するにも適している。
例外のログやレンダー方法をカスタマイズしたい場合は、このディレクトリのHandlerクラスを修正する。
Httpディレクトリ
コントローラ、ミドルウェア、フォームリクエストを設置する。
アプリケーションへのリクエストを処理するロジックは、ほぼすべてこのディレクトリ内に設置する。
Jobsディレクトリ
デフォルトでは作成されず、make:job Artisanコマンドで作成される。
アプリケーションのキュー投入可能なジョブを置いておく場所で、アプリケーションによりキューに投入されるか、もしくは現在のリクエストサイクル中に同期的に実行される。
Listenersディレクトリ
デフォルトでは作成されず、event:generateかmake:listener Artisanコマンドで作成される。
eventsイベントを処理するクラスが設置される。
イベントリスナはイベントインスタンスを受け取り、発行されたイベントへ対応するロジックを実行する。
Mailディレクトリ
デフォルトでは作成されず、make:mail Artisanコマンドで作成される。
アプリケーションから送信されるメールを表す全クラスで構成される。
メールオブジェクトにより、Mail::sendメソッドを使用して送られるメールを組み立てるロジックをすべて、1つのシンプルなクラスへカプセル化できる。
Notificationsディレクトリ
デフォルトでは作成されず、make:notification Artisanコマンドで作成される。
アプリケーションから送られる全「業務上」の通知、たとえばアプリケーションの中でイベントが発生したことを知らせるシンプルな通知などで構成される。
Laravelの通知機能は、メール、Slack、SMS、データベースへの保存などのように、さまざまなドライバに対する通知の送信を抽象化している。
Policiesディレクトリ
デフォルトでは作成されず、make:policy Artisanコマンドで作成される。
アプリケーションの認可ポリシークラスを設置する。
ポリシーは、リソースに対し指定したアクションをユーザーが実行できるかを決定する。
Providesディレクトリ
アプリケーションの全サービスプロバイダにより構成される。
サービスプロバイダは、サービスをコンテナと結合、イベントの登録、もしくはアプリケーションへやってくるリクエストを処理するために必要な用意をするタスクを実行するなど、アプリケーションの事前準備を行う。
Rulesディレクトリ
デフォルトでは作成されず、make:rule Artisanコマンドで作成される。
アプリケーションが使用するバリデーションルールオブジェクトで構成される。
ルールは複雑なバリデーションロジックをシンプルなオブジェクトへカプセル化するために使用する。
bootstrapディレクトリ
フレームワークの初期処理を行うapp.phpファイルを含んでいる。
中のcacheディレクトリは、初期処理のパフォーマンスを最適化するため、フレームワークが生成するルートやサービスのキャッシュファイルが保存されるフォルダとなっている。
configディレクトリ
アプリケーションの全設定ファイルが設置されている。
databaseディレクトリ
データベースのマイグレーションとモデルファクトリ、初期値設定(シーディング)を配置する。
publicディレクトリ
アプリケーションへの全リクエストの入り口となり、オートローディングを設定するindex.phpファイルがある。
このディレクトリには、画像・JavaScript・CSSなどのアセットを配置する。
resourcesディレクトリ
ビューやアセットの元ファイル(LESS、SASS、JavaScript)、すべての言語ファイルを配置する。
routesディレクトリ
アプリケーションの全ルート定義により構成されており、デフォルトでは、web.php、api.php、console.php、channels.phpファイルが含まれている。
-
web.php
RouteServiceProviderのwebミドルウェアグループに属するルートで構成される。
このミドルウェアは、セッションステート、CSRF保護、クッキーの暗号化機能を提供している。 -
api.php
RouteServiceProviderのapiミドルウェアグループに属するルートで構成される。
このミドルウェアはアクセス回数制限を提供している。
これらのルートを通るアプリケーションに対するリクエストは、セッションステートにアクセスする必要がないように、トークンを使って認証されることを意図している。 -
console.php
クロージャベースの全コンソールコマンドを定義する。
それぞれのコマンドのIOメソッドと連携するシンプルなアプローチを提供するコマンドインスタンスと、各クロージャは結合する。 -
channels.php
アプリケーションでサポートする、全ブロードキャストチャンネルを登録する。
storageディレクトリ
コンパイルされたBladeテンプレート、ファイルベースのセッション、ファイルキャッシュなど、フレームワークにより生成されるファイルが保存される。
-
appディレクトリ
アプリケーションにより生成されるファイルを保存するために利用する。- publicディレクトリ
プロファイルのアバターなどのようなユーザーにより生成され、外部からアクセスされるファイルが保存される。
public/storageがこのディレクトリを指すように、php artisan storage:linkコマンドを使いシンボリックリンクを張る必要がある。
- publicディレクトリ
-
frameworkディレクトリ
フレームワークが生成するファイルやキャッシュに利用される。 -
logsディレクトリ
アプリケーションのログファイルが保存される。
testsディレクトリ
各自の自動テストを配置する。(サンプルのPHPUnitテストが最初に含まれている)
各テストクラスはサフィックスとしてTestを付ける必要があり、テストはphpunitか、php vendor/bin/phpunitコマンドにより実行できる。
vendorディレクトリ
Composerによる依存パッケージが配置される。
わかったような、わからないような。
第4回はここまで。