PHP
初心者
laravel
laravel5
PHP7

Laravelのディレクトリ構造と、お役立ちTips

More than 1 year has passed since last update.

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(クロスサイトリクエストフォージェリ)チェック。

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、「入り口」)はアプリケーションのサービスコンテナに登録したクラスへ、「静的」なインターフェイスを提供します。

まとめ

これからも気づいたこと、指摘いただいたことは記事に反映して学んでいきたいので、ツッコミどころ、足りない部分多々あると思いますが、ビシバシご指導いただけたらと思います。