このリポジトリはPHP Webアプリフレームワークである、LaravelのLTSバージョンである5.5の公式英文ドキュメントを日本語へ翻訳しています。
This project is maintained by okinaka
Laravelのデフォルトアプリケーション構造はアプリケーションの大小にかかわらず、素晴らしいスタートを切ってもらえることを意図しています。もちろんアプリケーションは皆さんのお好みに応じ、自由に体系立ててください。クラスがComposerによりオートローディングできるならば、Laravelはクラスをどこに配置するか強制することはまずありません。
Laravelを学習し始めるとき、多くの開発者はmodels
ディレクトリが存在しないことに戸惑います。しかし、意図的にこのディレクトリを用意していません。多くの別々の人達にとって、その意味合いは様々なため、”models”という言葉の定義は曖昧であることに私達は気づきました。ある開発者たちはすべてのビジネスロジックを総称してアプリケーションの「モデル」と呼び、一方で別の人達はリレーショナルデータベースに関連するクラスを「モデル」として参照しています。
このため、私達はEloquentモデルをデフォルトではapp
ディレクトリ下へ設置することを選択し、開発者自分が選んだどこか別の場所へ設置してもらうことにしました。
app
ディレクトリは名前の示すとおり、アプリケーションのコアコードを配置します。このフォルダの詳細は、このあとに説明します。しかし、アプリケーションのほとんど全部のクラスは、このディレクトリの中に設定されることを覚えておいてください。
bootstrap
フォルダは、フレームワークの初期処理を行うapp.php
ファイルを含んでいます。その中のcache
ディレクトリは、初期処理のパフォーマンスを最適化するため、フレームワークが生成するルートやサービスのキャッシュファイルが保存されるフォルダです。
config
ディレクトリは名前が示す通り、アプリケーションの全設定ファイルが設置されています。全ファイルに目を通し、設定可能なオプションに慣れ親しんでおくのは良い考えでしょう。
database
フォルダはデータベースのマイグレーションと初期値設定(シーディング)を配置します。ご希望であれば、このファイルをSQLiteデータベースの設置場所としても利用できます。
public
ディレクトリには、アプリケーションへの全リクエストの入り口となり、オートローディングを設定するindex.php
ファイルがあります。また、このディレクトリにはアセット(画像、JavaScript、CSSなど)を配置します。
resources
ディレクトリはビューやアセットの元ファイル(LESS、SASS、JavaScript)で構成されています。また、すべての言語ファイルも配置します。
ディレクトリはアプリケーションの全ルート定義により構成されています。デフォルトでは、web.php
、api.php
、console.php
、channels.php
ファイルが含まれています。
Web.php
ファイルは、RouteServiceProvider
のweb
ミドルウェアグループに属するルートで構成します。このミドルウェアは、セッションステート、CSRF保護、クッキーの暗号化機能を提供しています。もしアプリケーションがステートレスではなく、RESTフルなAPIを提供しないのであれば、すべてのルートはweb.php
ファイルの中で定義されることになるでしょう。
api.php
ファイルは、RouteServiceProvider
のapi
ミドルウェアグループに属するルートで構成します。このミドルウェアはアクセス回数制限を提供しています。このファイル中で定義されるルートは、ステートレスであることを意図しています。つまり、これらのルートを通るアプリケーションに対するリクエストは、セッションステートにアクセスする必要がないように、トークンを使って認証されることを意図しています。
console.php
ファイルは、クロージャベースの全コンソールコマンドを定義する場所です。それぞれのコマンドのIOメソッドと連携するシンプルなアプローチを提供するコマンドインスタンスと、各クロージャは結合します。厳密に言えば、このファイルはHTTPルートは定義していないのですが、コンソールベースのエントリポイントを定義しているという点で、ルート定義なのです。
channels.php
ファイルはアプリケーションでサポートする、全ブロードキャストチャンネルを登録する場所です。
storage
ディレクトリにはコンパイルされたBladeテンプレート、ファイルベースのセッション、ファイルキャッシュなど、フレームワークにより生成されるファイルが保存されます。このフォルダはapp
、framework
、logs
ディレクトリに分かれています。app
ディレクトリはアプリケーションにより生成されるファイルを保存するために利用します。framework
ディレクトリはフレームワークが生成するファイルやキャッシュに利用されます。最後のlogs
ディレクトリはアプリケーションのログファイルが保存されます。
storage/app/public
ディレクトリにはプロファイルのアバターなどのようなユーザーにより生成され、外部からアクセスされるファイルが保存されます。public/storage
がこのディレクトリを指すように、シンボリックリンクを張る必要があります。リンクは、php artisan storage:link
コマンドを使い生成できます。
tests
ディレクトリには皆さんの自動テストを配置します。サンプルのPHPUnitテストが最初に含まれています。各テストクラスはサフィックスとしてTest
を付ける必要があります。テストはphpunit
か、php vendor/bin/phpunit
コマンドにより実行できます。
vendor
ディレクトリには、Composerによる依存パッケージが配置されます。
アプリケーションの主要な部分は、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コマンドを実行するまで存在していません。
{tip} Artisanコマンドにより、
app
ディレクトリ下にたくさんのクラスが生成されます。使用可能なコマンドを確認するには、php artisan list make
コマンドをターミナルで実行してください。
Console
ディレクトリは、アプリケーションの全カスタムArtisanコマンドで構成します。これらのコマンドクラスはmake:command
コマンドにより生成されます。コンソールカーネルもこのディレクトリ内にあり、カスタムArtisanコマンドや、タスクのスケジュールを登録します。
このディレクトリはデフォルトで存在していません。event:generate
かmake:event
Artisanコマンド実行時に作成されます。Events
ディレクトリは名前の通り、イベントクラスを設置する場所です。イベントは特定のアクションが起きたことをアプリケーションの別の部分に知らせるために使われ、柔軟性と分離性を提供しています。
Exceptions
ディレクトリはアプリケーションの例外ハンドラで構成します。また、アプリケーションから投げる例外を用意するにも適した場所でしょう。例外のログやレンダー方法をカスタマイズしたい場合は、このディレクトリのHandler
クラスを修正してください。
Http
ディレクトリはコントローラ、ミドルウェア、フォームリクエストを設置します。アプリケーションへのリクエストを処理するロジックは、ほぼ全てこのディレクトリ内に設置します。
このディレクトリはデフォルトで存在していません。make:job
Artisanコマンドを実行すると作成されます。Jobs
ディレクトリはアプリケーションのキュー投入可能なジョブを置いておく場所です。Jobs
はアプリケーションによりキューに投入されるか、もしくは現在のリクエストサイクル中に同期的に実行されます。現在のリクエストサイクル中に同期的に実行するジョブは、コマンドパターンを実装しているため、時に「コマンド」と呼ばれることがあります。
このディレクトリはデフォルトで存在していません。event:generate
かmake:listener
Artisanコマンドを実行すると、作成されます。Listeners
ディレクトリには、eventsイベントを処理するクラスを設置します。イベントリスナはイベントインスタンスを受け取り、発行されたイベントへ対応するロジックを実行します。たとえば、UserRegistered
(ユーザー登録)イベントは、SendWelcomeEmail
(ウェルカムメール送信)リスナにより処理されることになるでしょう。
このディレクトリはデフォルトでは存在していません。make:mall
Artisanコマンドを実行すると、作成されます。Mail
ディレクトリは、アプリケーションから送信されるメールを表す全クラスで構成します。メールオブジェクトにより、Mail::send
メソッドを使用して送られるメールを組み立てるロジックをすべて、1つのシンプルなクラスへカプセル化できます。
このディレクトリはデフォルトでは存在していません。make:notification
Artisanコマンドを実行すると作成されます。Notifications
ディレクトリは、アプリケーションから送られる全「業務上」の通知、たとえばアプリケーションの中でイベントが発生したことを知らせるシンプルな通知などで構成します。Laravelの通知機能は、メール、Slack、SMS、データベースへの保存などのように、様々なドライバに対する通知の送信を抽象化しています。
このディレクトリはデフォルトでは存在していません。make:policy
Artisanコマンドを実行すると、作成されます。Policies
ディレクトリにはアプリケーションの認可ポリシークラスを設置します。ポリシーは、リソースに対し指定したアクションをユーザーが実行できるかを決定します。詳細は、認可のドキュメントをご覧ください。
Providers
ディレクトリは、アプリケーションの全サービスプロバイダにより構成します。サービスプロバイダは、サービスをコンテナと結合、イベントの登録、もしくはアプリケーションへやってくるリクエストを処理するために必要な用意をするタスクを実行するなど、アプリケーションの事前準備を行います。
インストール直後のアプリケーションでも、このディレクトリは多くのプロパイダーを含んでいます。必要に応じて、自分のプロバイダを自由に追加してください。
このディレクトリは、デフォルトでは存在していません。make:rule
Artisanコマンドを実行すると、作成されます。Rules
ディレクトリは、アプリケーションで使用するバリデーションルールオブジェクトで構成します。ルールは複雑なバリデーションロジックをシンプルなオブジェクトへカプセル化するために使用します。詳細は、バリデーションのドキュメントで確認してください。