Laravel 8.x ディレクトリ構造

イントロダクション

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

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

appディレクトリ

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

bootstrapディレクトリ

bootstrapディレクトリには、フレームワークを初期起動処理するapp.phpファイルを設置しています。このディレクトリには、ルートやサービスのキャッシュファイルなど、パフォーマンスを最適化するためのフレームワークで生成されたファイルを含むcacheディレクトリも含んでいます。通常、このディレクトリ内のファイルを変更する必要はありません。

configディレクトリ

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

databaseディレクトリ

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

publicディレクトリ

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

resourcesディレクトリ

resourcesディレクトリには、ビューと、CSSやJavaScriptなどの未加工のコンパイルされていないアセットを含んでいます。このディレクトリには、すべての言語ファイルも格納しています。

routesディレクトリ

routesディレクトリは、アプリケーションのすべてのルート定義を配置しています。デフォルトでルートファイルをいくつかLaravelは用意しています。web.phpapi.phpconsole.phpchannels.php

web.phpファイルは、RouteServiceProviderwebミドルウェアグループへ配置するルートを記述します。これにより、セッション状態、CSRF保護、およびクッキー暗号化が提供されます。アプリケーションがステートレスのRESTful 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 Artisanコマンドを使用してリンクを作成できます。

testsディレクトリ

testsディレクトリには自動テストを設置します。たとえば、PHPUnitユニットテストと機能テストは、はじめから提供されています。各テストクラスには、Testという接尾辞を付ける必要があります。phpunitまたはphpvendor/bin/phpunitコマンドを使用してテストを実行できます。または、テスト結果をより詳細で美しい表現にしたい場合は、php artisan test Artisanコマンドを使用してテストを実行してください。

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コマンドをターミナルで実行してください。

Broadcastingディレクトリ

Broadcastingディレクトリは、アプリケーションの全ブロードキャストチャンネルクラスで構成します。これらのクラスは、make:channelコマンドで生成されます。このディレクトリはデフォルトでは存在しませんが、最初にチャンネルを生成したときに作成されます。チャンネルについての詳細は、イベントブロードキャストのドキュメントで確認してください。

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: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ディレクトリは、アプリケーションが使用するバリデーションルールオブジェクトで構成します。ルールは複雑なバリデーションロジックをシンプルなオブジェクトへカプセル化するために使用します。詳細は、バリデーションのドキュメントで確認してください。

ドキュメント章別ページ

ヘッダー項目移動

注目:アイコン:ページ内リンク設置(リンクがないヘッダーへの移動では、リンクがある以前のヘッダーのハッシュをURLへ付加します。

移動

クリックで即時移動します。

設定

適用ボタンクリック後に、全項目まとめて適用されます。

カラーテーマ
和文指定 Pagination
和文指定 Scaffold
Largeスクリーン表示幅
インデント
本文フォント
コードフォント
フォント適用確認

フォントの指定フィールドから、フォーカスが外れると、当ブロックの内容に反映されます。EnglishのDisplayもPreviewしてください。

フォント設定時、表示に不具合が出た場合、当サイトのクッキーを削除してください。

バックスラッシュを含むインライン\Code\Blockの例です。

以下はコードブロックの例です。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * ユーザに関連する電話レコードを取得
     */
    public function phone()
    {
        return $this->hasOne('App\Phone');
    }
}

設定を保存する前に、表示が乱れないか必ず確認してください。CSSによるフォントファミリー指定の知識がない場合は、フォントを変更しないほうが良いでしょう。

キーボード・ショートカット

オープン操作

PDC

ページ(章)移動の左オフキャンバスオープン

HA

ヘッダー移動モーダルオープン

MS

移動/設定の右オフキャンバスオープン

ヘッダー移動

T

最初のヘッダーへ移動

E

最後のヘッダーへ移動

NJ

次ヘッダー(H2〜H4)へ移動

BK

前ヘッダー(H2〜H4)へ移動

その他

?

このヘルプページ表示
閉じる