Laravel

Laravelディレクトリ構造入門|MVC構造とフォルダの役割

Laravelをインストールすると多数のフォルダやファイルが自動生成されます。最初は「どのフォルダに何を書けばいいのか」が分からず戸惑いがちですが、Laravelは MVC(Model-View-Controller)アーキテクチャに基づいた構造を持っており、それぞれのフォルダには明確な役割があります。この記事では、開発でよく使うフォルダとファイルの役割を整理して解説します。

MVC構造とは

MVCとは、アプリケーションの処理を「Model(データ)」「View(画面)」「Controller(制御)」の3つの役割に分離する設計パターンです。Laravelではこのパターンに沿ってディレクトリが構成されているため、コードの見通しがよくなり、チーム開発にも適しています。

リクエストからレスポンスまでの流れは以下のようになります。

MVCの処理フロー
1. ユーザーがブラウザからURLにアクセス(リクエスト)
2. routes/web.php でURLに対応するコントローラーを特定
3. app/Http/Controllers のコントローラーがリクエストを処理
4. app/Models のモデルがデータベースとやり取り
5. resources/views のビューがHTMLを生成
6. ユーザーのブラウザにHTMLを返却(レスポンス)

主要なフォルダとファイル

Laravelプロジェクトの中で、開発中に頻繁に触れるフォルダとファイルを紹介します。

.env(環境設定ファイル)

アプリケーションの基本的な設定を行うファイルです。データベース接続情報、アプリケーション名、デバッグモードなどの環境変数を設定します。

.env
APP_NAME=MyApp
APP_ENV=local
APP_DEBUG=true
APP_URL=http://localhost

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=my_database
DB_USERNAME=root
DB_PASSWORD=secret
注意

.envファイルにはパスワードなどの機密情報が含まれるため、Gitなどのバージョン管理には含めません(.gitignoreに記載済み)。チーム開発では.env.exampleを雛形として共有します。

routes/web.php(ルーティング)

ブラウザからアクセスされたURLとコントローラーを紐付けるファイルです。どのURLにアクセスしたとき、どの処理を実行するかをここで定義します。

routes/web.php
use App\Http\Controllers\HomeController;

Route::get('/home', [HomeController::class, 'index']);

app/Http/Controllers(コントローラー)

ユーザーからのリクエストを処理し、レスポンスを返すコントローラークラスを格納するフォルダです。MVCのC(Controller)に該当し、モデルからデータを取得してビューに渡す役割を持ちます。

app/Models(モデル)

データベースのテーブルとPHPオブジェクトをマッピングするファイルを格納するフォルダです。MVCのM(Model)に該当し、Eloquent ORMを使ってデータの取得・保存・更新・削除を行います。

resources/views(ビュー)

画面に表示するテンプレートファイルを格納するフォルダです。MVCのV(View)に該当し、Bladeテンプレートエンジンを使用した.blade.phpファイルを配置します。

database/migrations(マイグレーション)

データベースのテーブル構造をPHPコードで管理するフォルダです。テーブルの作成、変更、削除などの操作履歴がファイルとして残るため、データベースのバージョン管理が可能になります。

ターミナル
# マイグレーション実行
php artisan migrate

app/Providers(サービスプロバイダ)

アプリケーションの起動時に実行される処理を定義するフォルダです。データベース接続、キャッシュ、認証など、アプリ全体に共通するサービスの初期化を行います。

public(公開フォルダ)

CSS、JavaScript、画像などの静的ファイルを格納するフォルダです。Webサーバーのドキュメントルートとして設定される唯一の公開フォルダで、アプリケーションのエントリーポイント(index.php)もここにあります。

その他のフォルダ一覧

上記のほかにも、Laravelプロジェクトには以下のようなフォルダがあります。

ディレクトリ構造
laravel-project/
├── app/
│   ├── Http/
│   │   ├── Controllers/    ... コントローラー
│   │   └── Middleware/      ... リクエスト前後の処理
│   ├── Models/              ... モデル(DB連携)
│   └── Providers/           ... サービスプロバイダ
├── config/                  ... 設定ファイル
├── database/
│   ├── migrations/          ... テーブル定義
│   └── seeders/             ... 初期データ投入
├── public/                  ... 静的ファイル(CSS/JS/画像)
├── resources/
│   ├── views/               ... Bladeテンプレート
│   ├── js/                  ... JavaScriptソース
│   └── css/                 ... CSSソース
├── routes/
│   ├── web.php              ... Webルート定義
│   └── api.php              ... APIルート定義
├── storage/                 ... ログ・キャッシュ等
├── tests/                   ... テストコード
└── .env                     ... 環境設定
ポイント

開発初期に頻繁に触れるのはroutes/app/Http/Controllers/app/Models/resources/views/の4つです。まずはこの4つの役割を理解すれば、Laravel開発をスムーズに始められます。

まとめ

  • LaravelはMVC(Model-View-Controller)アーキテクチャに基づいた構造を持つ
  • routes/web.phpでURLとコントローラーを紐付ける
  • app/Http/Controllers/でリクエスト処理を行う
  • app/Models/でデータベースとのやり取りを定義する
  • resources/views/でBladeテンプレートを使って画面を作成する
  • .envファイルは機密情報を含むためGit管理しない