#Laravelのディレクトリ構造
Laravelを触り始めて一ヶ月が経ちましたが、Laravelで作るアプリがどう生成されているのか、よくわからないファイルやディレクトリだらけでした。
ですので、これから始める方のためになれば、そして自分の索引として活用できたらなと思い、ディレクトリ構造を、勉強になった記事と一緒に、ある程度わかりやすくまとめてみました。
Composer 1.5.2/Laravel5系(5.5)/PHP7.1環境でlaravel new ~~した場合に生成されるファイルたちです。
##直下ファイル
####.env
環境設定ファイル。1環境<=>1envファイル。
DB NAMEやらHOSTのIP,PORT,PASSWORDなど、動作環境、環境変数に関する記述をする。
PHP dotenv (phpdotenv) 環境変数を本番、検証、開発環境毎に分ける
####.gitattributes,.gitignore
git利用に関する記述。アプリケーション内の特定ファイルをgitでバージョン管理したくない場合、.gitignoreに詳細を記載したりする。
Laravel Recipes日本語版 | Gitを使ってプロジェクトを管理する
####artisan
artisanコマンドについての記述
####composer.json
composerの利用に関するもの。周辺技術パッケージのバージョン参照などに困ったらここに書いてある。
composer.json、composer.lockって何なの?という人向けのまとめ
composer.json=>composer update
の時に読み込む。
composer.lock=>composer install
の時に読み込む。
####package.json
npm(Node.jsで書かれたJavaScriptのパッケージ管理ツール)で利用するプログラム。
####phpunit.xml
**
PHPUnit(ユニットテスト)に関する記述。
####server.php
ビルトインサーバー起動時に使用されるプログラム。
####webpack.mix.js
JavaScriptパッケージ管理ツールwebpackに関する記述。
####yarn.lock
yarnというフロントエンドパッケージマネージャに関する自動生成ファイル。
メインディレクトリ群
#app
アプリケーションのプログラム部分、いわば主軸になるもの。アプリ開発時において、ここをメインにスクリプトファイルを追加していく。
####Console
コンソールプログラム群。
php artisan make:command data_init
などとすると、自分でartisanコマンドを追加作成でき、ここに生成されます。
#####- Kernel.php
=>作ったコマンドを登録するファイル。
####Exception
例外処理に関する記述。
Laravel 5.3 エラーとログ
#####- Handler.php
=>report(例外をログするか、外部サービスに送信するために使う)とrender(例外をブラウザーに送り返すHTTPレスポンスへ変換)の、二つのメソッドで構成されている。
####Http
アプリケーションにアクセスした時に実行される処理をまとめたところ。Laravelの心臓部。
#####- Controllers
**MVCアーキテクチャ**の根幹。Webページの具体的な処理が記述されます。
全体を統制し、Modelでデータのやり取りをしたり、Viewを呼び出す処理をします。
MVC、本当にわかってますか?
#####- Middleware
コントローラーが動く前か後に、アプリケーションへ送信されたHTTPリクエストをフィルタリングする、特定の処理を行う仕組み。
アクセスがあった時に毎度何かを実行するための機能。
Laravel5のミドルウェアの使い方
#####- Kernel.php
あるミドルウェアをアプリケーションの全リクエストで実行したい場合は、このファイルの**$middleware**プロパティへ追加する。
【デフォルトのグローバルミドルウェア[Webグループ]】
CheckForMaintenanceMode
=>メンテナンスモードかどうかをチェックする。メンテナンスモードだったら503を返す。
EncryptCookies
=>クッキー暗号化。
AddQueuedCookiesToResponse
=>クッキーを使わなければいらないもの
StartSession
=>セッションを使わなければいらないもの
ShareErrorsFromSession
=>セッションにerrorsという名前で登録された内容をすべてのビューで共有している
VerifyCsrfToken
=>[CSRF(クロスサイトリクエストフォージェリ)](https://www.trendmicro.com/ja_jp/security-
intelligence/research-reports/threat-solution/csrf.html)チェック。
SubstituteBindings
Route Model Binding(今までモデルのIDを受け取っていた箇所で、代わりにIDに対応するモデルのインスタンスを受け取れる) を実行する機能(Laravel5.3から追加)
他に、apiグループもあります。
気になる方は以下の記事、参照ください。
[Laravel]ミドルウェアを整理してLaravelを軽くする
これらを整理すると、アプリケーションがかなり軽くなるみたいです。
####Providers
ビューにビジネスロジックをもたせたいとき、ビューコンポーザ機能(ビューレンダリングの際の、自動実行処理)を利用するための、プロバイダと呼ばれるプログラムが配置される。
#####- ServiceProvider
bootメソッド(アプリケーションが実行される前に割り込んで実行される、ブートストラップ処理)に関する記述
####User.php
ユーザー認証に関する、Userモデルのスクリプトファイル
モデルはデフォルトだとphp artisan make:model ~~
した時にこの階層(app直下)に生成される。Laravelはモデルの置き場所がデフォルトだと、ありません。言葉の定義の問題だそうです。
以下が、そのモデルディレクトリがない理由です。
Laravel 5.3 ディレクトリ構造
Laravelを学習し始めるとき、多くの開発者はmodelsディレクトリが存在しないことに戸惑います。しかし、意図的にこのディレクトリを用意していません。多くの別々の人達にとって、その意味合いは様々なため、"models"という言葉の定義は曖昧であることに私達は気づきました。ある開発者たちはすべてのビジネスロジックを総称してアプリケーションの「モデル」と呼び、一方で別の人達はリレーショナルデータベースに関連するクラスを「モデル」として参照しています。
このため、私達はEloquentモデルをデフォルトではappディレクトリ下へ設置することを選択し、開発者自分が選んだどこか別の場所へ設置してもらうことにしました。
#bootstrap
アプリケーション実行時に、同時に行われる最初の処理がまとめられている。
####cache
初期処理のパフォーマンス最適化のため、ルートやサービスのキャッシュファイルが保存されるフォルダ。
####app.php
初期起動やオートローディングの設定
#config
アプリケーションの全設定ファイルがまとまっている。
Laravel 5.3 設定
#####app.php
->アプリ主要情報、タイムゾーンや地理情報の設定。
#####auth.php
->認証設定
#####broadcasting.php
->イベントブロードキャストの設定
#####cache.php
->キャッシュ設定
#####database.php
->データベース使用設定。
#####filesystems.php
->ファイルストレージなどの設定
それはそれは素晴らしい『Laravel』のファイルシステムについて語りたい
#####mail.php
->メールサーバーの設定
洗練された『Laravel』のメール送信機能を使ってみる
#####queue.php
->ジョブキューの設定
#####services.php
->MailgunやSparkPostなどのAPIベースドライバ設定
#####session.php
->セッションドライバ設定
#####view.php
->ビューテンプレート設定
#database
データベース関連のファイルのまとまり。
####factories
Eloquentモデルの各属性にデフォルトを設定できる。ランダムデータを生成するFakerに関するもの。
Fakerで自動テスト用のダミーデータ作成を自動化する
####migrations
データベースのマイグレーションファイル置き場
####seeds
初期値設定(シーディング)。
Laravel 5.1 データベース:シーディング
#public
外部にそのまま公開されるフォルダ。CSSやJavaScriptが配置される。
####css
####js
#####.htaccess
.htaccessとは?.htaccessで、できる事と設定手順についてまとめてみた
#####favicon.ico
favicon.icoとは?
#####index.php
初期ビュー
#####robots.txt
Webクローラーに対して、特定のページをインデックスに登録しないように指定するファイルです。
#resources
リソース関係の配置場所。プログラムが必要とするテンプレートやアセットが用意されます。
リソース (resource)とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
####assets
ここにあるファイルは、自動的にElixir(CSS,Javascriptプリプロセッサー)がpublic/cssやpublic/jsへコピーしてくれます。
####lang
言語仕様。
####views
ビューファイルの置き場所です。
#routes
アクセスするアドレスに割り当てられるプログラムの情報。ルーティング。
#####api.php
APIのルーティング。プログラム内から利用する、APIのアドレスを割り当てるのに利用する。
#####channels.php
ブロードキャストチャンネルのためのルーティング。
#####console.php
コンソールプログラムのためのルーティング。
#####web.php
一般的なWebページとしてアクセスするためのルーティング。主にここを編集する。
#storage
ファイルの保存場所。アプリケーションのログファイルや画像などが保存される。
####app
####framework
####logs
#test
ユニットテストに関するファイル群。
####Feature
機能(Feature)テストは、多くのオブジェクトがそれぞれどのように関係しているなど、コードの幅広い範囲をテストします。
####Unit
ユニットテストは、コードの独立した一部をテストする。
#####CreatesApplication.php
,Testcase.php
テスト環境用スクリプトファイル
#vendor
Laravelフレームワークの司るライブラリを構成するファイル群。Composerによる依存パッケージが配置される。
ここは多すぎるので、省略します。
継承元のクラスを参照したいときは**laravel/framework/src/illuminate
**以下を辿るといいでしょう。
また、状況によりますが、Facadesを使うと、コードがより簡潔になり、チーム開発でクラスを共有しやすくなったりと、有利に働きます。
ファサード(facade、「入り口」)はアプリケーションのサービスコンテナに登録したクラスへ、「静的」なインターフェイスを提供します。
#まとめ
これからも気づいたこと、指摘いただいたことは記事に反映して学んでいきたいので、ツッコミどころ、足りない部分多々あると思いますが、ビシバシご指導いただけたらと思います。