0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Laravel勉強 その4 Laravelのディレクトリ構造

Posted at

前回記事

Laravel勉強 その3 Laravelに関する設定

目的

  • 勉強のため、Laravel 7.xの公式ドキュメントを読み解いていく。
  • 今回は、公式ドキュメントの「ドキュメント構造」の章を扱う。

参考

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コマンドを使いシンボリックリンクを張る必要がある。
  • frameworkディレクトリ
    フレームワークが生成するファイルやキャッシュに利用される。

  • logsディレクトリ
    アプリケーションのログファイルが保存される。

testsディレクトリ

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

vendorディレクトリ

Composerによる依存パッケージが配置される。

わかったような、わからないような。
第4回はここまで。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?