Laravelディレクトリ構造と役割まとめ【保存版】
Laravelプロジェクト直下のフォルダや設定ファイルの「役割」を一気に把握できるように整理しました。新人さんのオンボーディングや、プロジェクト引き継ぎの標準資料としても使えます。
全体像(ツリー)
.
├─ app/ … アプリ本体(ドメインロジック)
│ ├─ Console/ … artisanコマンド
│ ├─ Exceptions/ … 例外ハンドリング
│ ├─ Http/
│ │ ├─ Controllers/ … コントローラ
│ │ ├─ Middleware/ … ミドルウェア
│ │ └─ Requests/ … フォームリクエスト(バリデーション)
│ ├─ Models/ … Eloquentモデル
│ ├─ Policies/ … 認可ポリシー
│ ├─ Providers/ … サービスプロバイダ(ブート/バインド)
│ ├─ Jobs/ … キュージョブ
│ ├─ Events/ … ドメインイベント
│ ├─ Listeners/ … イベントリスナ
│ ├─ Mail/ … Mailable(メール組み立て)
│ ├─ Notifications/ … 通知(メール/Slack 等)
│ └─ Rules/ … カスタムバリデーションルール
│
├─ bootstrap/ … フレームワーク起動処理(cache/含む)
├─ config/ … 環境非依存の設定一式
├─ database/
│ ├─ factories/ … テストデータ生成
│ ├─ migrations/ … スキーマ管理
│ └─ seeders/ … 初期データ投入
├─ public/ … ドキュメントルート(エントリ: index.php)
├─ resources/
│ ├─ views/ … Bladeテンプレート
│ ├─ lang/ … 多言語リソース
│ └─ (assets等) … ビルド前アセット(構成により)
├─ routes/
│ ├─ web.php … Webルート(セッション/CSRFあり)
│ ├─ api.php … APIルート(ステートレス)
│ ├─ console.php … artisanスケジューラ定義
│ └─ channels.php … ブロードキャストチャンネル
├─ storage/
│ ├─ app/ … アプリ保存用
│ ├─ framework/ … キャッシュ/セッション/ビュー等
│ └─ logs/ … ログ出力
├─ tests/ … テストコード(Feature/Unit)
├─ vendor/ … Composer依存パッケージ
├─ .env … 環境ごとの秘密情報/切替値
├─ artisan … CLIエントリ
├─ composer.json … PHP依存/スクリプト
└─ package.json … フロント依存(必要な場合)
app/(アプリ本体)
Laravelのコアは app/
に置きます。フレームワークの流儀に合わせつつ、ドメインロジックをここに集約します。
Http/
- Controllers/:ルーティングで呼ばれる入口。サービスやモデルを呼び出してレスポンスを返す。
- Middleware/:リクエスト前後の共通処理(認証、CSRF、CORS、メンテナンス等)。
- Requests/:フォームリクエスト。バリデーションと権限チェックをカプセル化。
Models/
Eloquentモデル。テーブルとのマッピング・スコープ・リレーション定義を担います。ビジネスロジックを持たせすぎる場合はサービス層の導入を検討。
Providers/
アプリ起動時のバインドやイベント登録など。サービスコンテナへの依存解決をここで定義します(例:リポジトリのインターフェース⇄実装のバインド)。
Jobs/・Events/・Listeners/・Mail/・Notifications/・Policies/・Rules/
- Jobs:重い処理や非同期化したい処理をキューで実行。
- Events/Listeners:疎結合な連携。発火(Event)と反応(Listener)。
- Mail:メール本文やヘッダなどの組み立て。
- Notifications:メールやSlack、Database通知などチャネル横断の通知。
- Policies:認可(誰が何をできるか)をモデル単位で定義。
- Rules:独自のバリデーションルールを作成。
bootstrap/
フレームワークの起動処理とキャッシュ。アプリケーションのパフォーマンス改善で使用(config:cache
など)。
config/(設定)
アプリ設定一式。値は .env
から参照するのが基本。代表例:
app.php
:アプリ名、タイムゾーン、ロケール、プロバイダ登録など。database.php
:DB接続、接続先ごとの設定。cache.php
・queue.php
・filesystems.php
:各ドライバの設定。logging.php
:ログチャネルの定義。mail.php
:メール送信設定。
database/(DBまわり)
- migrations/:テーブル構造の変更履歴。
php artisan migrate
で反映。 - seeders/:初期データ投入。
db:seed
。 - factories/:テスト/ダミーデータ生成。
public/(公開ディレクトリ)
Webサーバのドキュメントルート。index.php
がエントリポイント。画像やビルド後アセット(public/js
, public/css
等)を配置。
resources/(ビュー/言語/アセット)
- views/:Bladeテンプレート(
.blade.php
)。 - lang/:翻訳ファイル(
ja
/en
など)。 - (assets):Vite等でビルド前のソースを置く構成も一般的。
routes/(ルーティング)
- web.php:ブラウザ向け。セッション/CSRF有効。ミドルウェア
web
。 - api.php:API向け。ステートレス。ミドルウェア
api
。 - console.php:スケジューラやartisanコマンドの登録。
- channels.php:ブロードキャスト用チャンネル定義。
storage/(保存/一時/ログ)
- app/:アプリ保存ファイル(ユーザアップロード等)。
- framework/:キャッシュ、セッション、コンパイル済ビューなど。
- logs/:アプリログ(
laravel.log
)。
php artisan storage:link
で public/storage
にシンボリックリンクを作り、公開可能にします。
tests/(テスト)
Featureテスト(HTTPレイヤ寄り)とUnitテスト(関数/クラス単位)。php artisan test
で実行。
プロジェクト直下の主なファイル
- .env:環境変数(キーや接続情報)。Git管理しない。
- artisan:CLIエントリ(
php artisan XXX
)。 - composer.json:PHP依存/オートロード/スクリプト。
- package.json:フロント依存(Vite等使用時)。
リクエストの流れ(超ざっくり)
- ブラウザ →
public/index.php
- カーネル起動 → ルート解決
- ミドルウェア通過 → コントローラ呼び出し
- サービス/モデルで処理 → ビュー or JSONでレスポンス
よく使うartisan/Composerコマンド
# キャッシュ系
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan cache:clear
# DB
php artisan migrate
php artisan db:seed
php artisan migrate:fresh --seed
# 生成
php artisan make:model Post -mcr # モデル+マイグ+コントローラ+リソース
php artisan make:request StorePostRequest
php artisan make:policy PostPolicy --model=Post
# 依存
composer install
composer dump-autoload
運用のコツ(つまづきポイント)
- .envとconfigキャッシュ:本番で
config:cache
したら、.envを変えても即時反映されません(再キャッシュ必要)。 - 権限/所有者:
storage
とbootstrap/cache
はWebサーバ書込可を維持。 - public配下:ドキュメントルートを
public/
に向ける。難しい場合は代替構成に注意。 - storage:link:アップロードが404になる時はまずリンク確認。
初期セットアップ・引き継ぎチェックリスト
- [ ]
composer install
/npm ci
(またはpnpm i
) - [ ]
.env
の整備(鍵、DB、メール、キャッシュ、キュー等) - [ ]
php artisan key:generate
- [ ]
php artisan migrate --seed
- [ ]
php artisan storage:link
- [ ] キャッシュ最適化(
config:cache
/route:cache
/view:cache
)
更新して使えるように、過不足があればこのページを編集してプロジェクト標準にしていきましょう。
コメント