Laravel5.5 LTS 日本語ドキュメント

このリポジトリはPHP Webアプリフレームワークである、LaravelのLTSバージョンである5.5の公式英文ドキュメントを日本語へ翻訳しています。

This project is maintained by okinaka

ディレクトリ構造

イントロダクション

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

modelsディレクトリはどこにある?

Laravelを学習し始めるとき、多くの開発者はmodelsディレクトリが存在しないことに戸惑います。しかし、意図的にこのディレクトリを用意していません。多くの別々の人達にとって、その意味合いは様々なため、”models”という言葉の定義は曖昧であることに私達は気づきました。ある開発者たちはすべてのビジネスロジックを総称してアプリケーションの「モデル」と呼び、一方で別の人達はリレーショナルデータベースに関連するクラスを「モデル」として参照しています。

このため、私達はEloquentモデルをデフォルトではappディレクトリ下へ設置することを選択し、開発者自分が選んだどこか別の場所へ設置してもらうことにしました。

プロジェクトディレクトリ

appディレクトリ

appディレクトリは名前の示すとおり、アプリケーションのコアコードを配置します。このフォルダの詳細は、このあとに説明します。しかし、アプリケーションのほとんど全部のクラスは、このディレクトリの中に設定されることを覚えておいてください。

bootstrapディレクトリ

bootstrapフォルダは、フレームワークの初期処理を行うapp.phpファイルを含んでいます。その中のcacheディレクトリは、初期処理のパフォーマンスを最適化するため、フレームワークが生成するルートやサービスのキャッシュファイルが保存されるフォルダです。

configディレクトリ

configディレクトリは名前が示す通り、アプリケーションの全設定ファイルが設置されています。全ファイルに目を通し、設定可能なオプションに慣れ親しんでおくのは良い考えでしょう。

databaseディレクトリ

databaseフォルダはデータベースのマイグレーションと初期値設定(シーディング)を配置します。ご希望であれば、このファイルをSQLiteデータベースの設置場所としても利用できます。

publicディレクトリ

publicディレクトリには、アプリケーションへの全リクエストの入り口となり、オートローディングを設定するindex.phpファイルがあります。また、このディレクトリにはアセット(画像、JavaScript、CSSなど)を配置します。

resourcesディレクトリ

resourcesディレクトリはビューやアセットの元ファイル(LESS、SASS、JavaScript)で構成されています。また、すべての言語ファイルも配置します。

routesディレクトリ

ディレクトリはアプリケーションの全ルート定義により構成されています。デフォルトでは、web.phpapi.phpconsole.phpchannels.phpファイルが含まれています。

Web.phpファイルは、RouteServiceProviderwebミドルウェアグループに属するルートで構成します。このミドルウェアは、セッションステート、CSRF保護、クッキーの暗号化機能を提供しています。もしアプリケーションがステートレスではなく、RESTフルなAPIを提供しないのであれば、すべてのルートはweb.phpファイルの中で定義されることになるでしょう。

api.phpファイルは、RouteServiceProviderapiミドルウェアグループに属するルートで構成します。このミドルウェアはアクセス回数制限を提供しています。このファイル中で定義されるルートは、ステートレスであることを意図しています。つまり、これらのルートを通るアプリケーションに対するリクエストは、セッションステートにアクセスする必要がないように、トークンを使って認証されることを意図しています。

console.phpファイルは、クロージャベースの全コンソールコマンドを定義する場所です。それぞれのコマンドのIOメソッドと連携するシンプルなアプローチを提供するコマンドインスタンスと、各クロージャは結合します。厳密に言えば、このファイルはHTTPルートは定義していないのですが、コンソールベースのエントリポイントを定義しているという点で、ルート定義なのです。

channels.phpファイルはアプリケーションでサポートする、全ブロードキャストチャンネルを登録する場所です。

storageディレクトリ

storageディレクトリにはコンパイルされたBladeテンプレート、ファイルベースのセッション、ファイルキャッシュなど、フレームワークにより生成されるファイルが保存されます。このフォルダはappframeworklogsディレクトリに分かれています。appディレクトリはアプリケーションにより生成されるファイルを保存するために利用します。frameworkディレクトリはフレームワークが生成するファイルやキャッシュに利用されます。最後のlogsディレクトリはアプリケーションのログファイルが保存されます。

storage/app/publicディレクトリにはプロファイルのアバターなどのようなユーザーにより生成され、外部からアクセスされるファイルが保存されます。public/storageがこのディレクトリを指すように、シンボリックリンクを張る必要があります。リンクは、php artisan storage:linkコマンドを使い生成できます。

testsディレクトリ

testsディレクトリには皆さんの自動テストを配置します。サンプルのPHPUnitテストが最初に含まれています。各テストクラスはサフィックスとしてTestを付ける必要があります。テストはphpunitか、php vendor/bin/phpunitコマンドにより実行できます。

vendorディレクトリ

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

appディレクトリ

アプリケーションの主要な部分は、appディレクトリ内に配置します。このディレクトリはデフォルトで、App名前空間のもとに置かれており、PSR-4オートローディング規約を使い、Composerがオートロードしています。

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

クラス生成のためのmake Artisanコマンドを使用することで、様々なディレクトリがappディレクトリ内に作成されます。たとえば、app/Jobsディレクトリは、ジョブクラスを生成するmake:job Artisanコマンドを実行するまで存在していません。

{tip} Artisanコマンドにより、appディレクトリ下にたくさんのクラスが生成されます。使用可能なコマンドを確認するには、php artisan list makeコマンドをターミナルで実行してください。

Consoleディレクトリ

Consoleディレクトリは、アプリケーションの全カスタムArtisanコマンドで構成します。これらのコマンドクラスはmake:commandコマンドにより生成されます。コンソールカーネルもこのディレクトリ内にあり、カスタムArtisanコマンドや、タスクのスケジュールを登録します。

Eventsディレクトリ

このディレクトリはデフォルトで存在していません。event:generatemake:event Artisanコマンド実行時に作成されます。Eventsディレクトリは名前の通り、イベントクラスを設置する場所です。イベントは特定のアクションが起きたことをアプリケーションの別の部分に知らせるために使われ、柔軟性と分離性を提供しています。

Exceptionsディレクトリ

Exceptionsディレクトリはアプリケーションの例外ハンドラで構成します。また、アプリケーションから投げる例外を用意するにも適した場所でしょう。例外のログやレンダー方法をカスタマイズしたい場合は、このディレクトリのHandlerクラスを修正してください。

Httpディレクトリ

Httpディレクトリはコントローラ、ミドルウェア、フォームリクエストを設置します。アプリケーションへのリクエストを処理するロジックは、ほぼ全てこのディレクトリ内に設置します。

Jobsディレクトリ

このディレクトリはデフォルトで存在していません。make:job Artisanコマンドを実行すると作成されます。Jobsディレクトリはアプリケーションのキュー投入可能なジョブを置いておく場所です。Jobsはアプリケーションによりキューに投入されるか、もしくは現在のリクエストサイクル中に同期的に実行されます。現在のリクエストサイクル中に同期的に実行するジョブは、コマンドパターンを実装しているため、時に「コマンド」と呼ばれることがあります。

Listenersディレクトリ

このディレクトリはデフォルトで存在していません。event:generatemake:listener Artisanコマンドを実行すると、作成されます。Listenersディレクトリには、eventsイベントを処理するクラスを設置します。イベントリスナはイベントインスタンスを受け取り、発行されたイベントへ対応するロジックを実行します。たとえば、UserRegistered(ユーザー登録)イベントは、SendWelcomeEmail(ウェルカムメール送信)リスナにより処理されることになるでしょう。

Mailディレクトリ

このディレクトリはデフォルトでは存在していません。make:mall Artisanコマンドを実行すると、作成されます。Mailディレクトリは、アプリケーションから送信されるメールを表す全クラスで構成します。メールオブジェクトにより、Mail::sendメソッドを使用して送られるメールを組み立てるロジックをすべて、1つのシンプルなクラスへカプセル化できます。

Notificationsディレクトリ

このディレクトリはデフォルトでは存在していません。make:notification Artisanコマンドを実行すると作成されます。Notificationsディレクトリは、アプリケーションから送られる全「業務上」の通知、たとえばアプリケーションの中でイベントが発生したことを知らせるシンプルな通知などで構成します。Laravelの通知機能は、メール、Slack、SMS、データベースへの保存などのように、様々なドライバに対する通知の送信を抽象化しています。

Policiesディレクトリ

このディレクトリはデフォルトでは存在していません。make:policy Artisanコマンドを実行すると、作成されます。Policiesディレクトリにはアプリケーションの認可ポリシークラスを設置します。ポリシーは、リソースに対し指定したアクションをユーザーが実行できるかを決定します。詳細は、認可のドキュメントをご覧ください。

Providersディレクトリ

Providersディレクトリは、アプリケーションの全サービスプロバイダにより構成します。サービスプロバイダは、サービスをコンテナと結合、イベントの登録、もしくはアプリケーションへやってくるリクエストを処理するために必要な用意をするタスクを実行するなど、アプリケーションの事前準備を行います。

インストール直後のアプリケーションでも、このディレクトリは多くのプロパイダーを含んでいます。必要に応じて、自分のプロバイダを自由に追加してください。

Rulesディレクトリ

このディレクトリは、デフォルトでは存在していません。make:rule Artisanコマンドを実行すると、作成されます。Rulesディレクトリは、アプリケーションで使用するバリデーションルールオブジェクトで構成します。ルールは複雑なバリデーションロジックをシンプルなオブジェクトへカプセル化するために使用します。詳細は、バリデーションのドキュメントで確認してください。