【Laravel】Laravelのディレクトリ構造を理解する

laravelアイキャッチ Laravel

こんにちは、かつコーチです。

前回、Laravel SailかXAMPPかで環境を作り、初期画面を表示するところまで進みました。

作成されたプロジェクトフォルダを開くと、大量のフォルダとファイルが並んでいて、最初は面食らった方も多いのではないでしょうか。

私も初めてLaravelのプロジェクトを開いたとき、「どこに何を書けばいいの…」と固まってしまった記憶があります。

今回は、最初に押さえておきたい主要なディレクトリを整理していきます。

Laravelのディレクトリ構造、全体像

自作フレームワークとの違い

PHP基礎編の最後で、簡単な自作ミニフレームワークを作りました。

あのとき、フォルダを「index.php」「Controller」「View」くらいのシンプルな構成にしたと思います。

Laravelのディレクトリ構造は、それをさらに細かく役割分担したものだとイメージすると理解しやすいです。

最初からすべてを覚える必要はなく、「今どこを触っているか」が分かれば十分です。

最初に見るべきはappとroutes

数十個あるフォルダのうち、日々の開発で頻繁に触るのは主に次の2つです。

  • app/ :アプリのロジック(コントローラ・モデルなど)が入っている
  • routes/ :どのURLでどの処理を呼ぶかを定義する

まずはこの2つの場所だけ覚えておけば、初期の学習には困りません。

よく使う主要ディレクトリ

app/:アプリの中心部分

app/ フォルダの中には、次のようなサブフォルダがあります。

  • app/Http/Controllers/ :コントローラを置く場所(処理の司令塔)
  • app/Models/ :モデルを置く場所(データベースとやり取りする窓口)
  • app/Providers/ :アプリ起動時の初期設定を行う場所

自作フレームワークで「Controllerクラス」を自分で書いていたように、Laravelでもコントローラはapp/Http/Controllers/にファイルとして作っていきます。

routes/:URLと処理の対応表

routes/web.php に、ブラウザからアクセスされるURLと処理の対応を書きます。

<?php

use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return view('welcome');
});

これは「トップページ(/)にアクセスされたら、welcomeという画面を表示する」という意味です。

ルーティングについては次々回、もう少し詳しく扱います。

resources/:画面(View)の置き場所

resources/views/ に、Blade(ブレードテンプレート)のファイルを置きます。

先ほどのコードに出てきた welcome は、実際には resources/views/welcome.blade.php というファイルを指しています。

HTMLに近い書き方でありながら、PHPの変数や条件分岐を埋め込める仕組みになっています。

database/:データベース関連

database/migrations/ には、データベースのテーブル構成を定義するファイル(マイグレーションファイル)が入ります。

PHP基礎編でSQLのCREATE TABLE文を直接書いてテーブルを作りましたが、Laravelではこのマイグレーションファイルを使ってテーブルを管理します。

コードとしてテーブル構成を残せるので、「誰かのPCでテーブルを作り直す」といった作業がコマンド一発で済むのが利点です。

public/:外部に公開される唯一のフォルダ

public/ フォルダは、Webサーバーから直接アクセスされる唯一の場所です。

public/index.php が、すべてのリクエストの入り口(自作フレームワークで言うところのindex.php)になっています。

それ以外のフォルダ(app/routes/など)は、直接インターネットからはアクセスできない仕組みになっている、という点は覚えておいてください。

つまずきやすいポイント:ファイルの置き場所を間違える

よくある間違い

Laravelに慣れないうちは、「新しく作ったPHPファイルを、どこに置けばいいか分からない」という状態になりがちです。

❌ Before:とりあえずpublic/直下にPHPファイルを置いてしまう

public/
  ├── index.php
  └── mypage.php   ← Laravelの仕組みを経由しない独自ファイル

PHP編の感覚のまま public/mypage.php のようなファイルを作って直接アクセスしてしまうと、Laravelのルーティングやミドルウェア(認証チェックなど)を一切経由しない、独立したページになってしまいます。

私も最初、「新しいページを作りたい」と思ってpublic/直下にPHPファイルを置いてしまい、なぜかログイン認証が効かないページができてしまったことがあります。

原因は単純で、Laravelの仕組み自体を通っていなかったからでした。

✅ After:ルーティング・コントローラ・Viewの流れに沿って作る

// routes/web.php
Route::get('/mypage', [MyPageController::class, 'index']);

// app/Http/Controllers/MyPageController.php
class MyPageController extends Controller
{
    public function index()
    {
        return view('mypage');
    }
}

新しいページを作りたいときは、public/に直接ファイルを置くのではなく、必ず「ルーティングを定義 → コントローラを作る → Viewを用意する」という流れに沿うのが正解です。

そうすることで、Laravelが提供する認証・ミドルウェアなどの仕組みをそのまま活用できます。

まとめ

この記事のポイント

  • Laravelのディレクトリは役割ごとに細かく分かれており、最初はapp/routes/から覚えれば十分
  • app/Http/Controllers/はコントローラ、app/Models/はモデル、resources/views/はBladeテンプレートの置き場所
  • database/migrations/でテーブル構成をコードとして管理できる
  • 外部から直接アクセスできるのはpublic/のみで、新しいページは必ずルーティング経由で作る

次に読むべき記事

ディレクトリ構造がなんとなくつかめたら、次は環境ごとに設定を切り替える仕組みである.envファイルを見ていきましょう。

→ 次の記事:.envファイルの役割と設定方法

タイトルとURLをコピーしました