本文へ移動
Laravel Tips

フォルダ構成

Laravel のアプリのフォルダ(app・config・routes・resources など)に何が入っているか、app フォルダの中のフォルダの役目を一覧で説明します。

Laravel のアプリには、はじめから決まったフォルダの並びがあります。引き出しのラベルのようなもので、「設定はここ」「画面はここ」と分かっていれば、探し物に困りません。この並びは、大きなアプリにも小さなアプリにも合うように作られています。ただし、置き場所を絶対に守る必要はなく、Composer(PHP の部品を入れる道具)がクラスを自動で読みこめる場所なら、自由に置けます。

いちばん上のフォルダ#

アプリの一番上には、次のフォルダがあります。

フォルダ 入っているもの
app アプリの中心になるコード。ほとんどのクラスがここに入る
bootstrap フレームワークを起動する app.php と、速くするために Laravel が作るファイルを入れる cache フォルダ
config アプリのすべての設定ファイル
database マイグレーション・ファクトリ・シーダーと、使うなら SQLite のデータベース
public すべてのリクエストの入口になる index.php、画像・JavaScript・CSS
resources ビューと、まだ変換していない CSS・JavaScript
routes ルートを書くファイル
storage ログ・Blade の変換結果・ファイルのセッションやキャッシュなど
tests 自動のテスト
vendor Composer で入れた部品

app フォルダ#

アプリのコードの中心です。くわしくはこのページの後ろで説明します。

bootstrap フォルダ#

フレームワークを起動する app.php が入っています。cache フォルダには、ルートやサービスのキャッシュのように、速くするために Laravel が作るファイルが入ります。

config フォルダ#

名前のとおり、アプリのすべての設定ファイルが入っています。一度は全部を読んで、どんな設定ができるかを知っておくとよいでしょう。くわしくは設定と .envのページにあります。

database フォルダ#

マイグレーション(データベースの表を作ったり変えたりする手順書)、ファクトリ(ためしのデータを作るしくみ)、シーダー(最初のデータを入れるプログラム)が入っています。必要なら、SQLite のデータベースもここに置けます。

public フォルダ#

すべてのリクエストが最初に入ってくる index.php が入っています。ここで、部品の自動読み込みも設定されます。画像・JavaScript・CSS のような、そのまま公開するファイルも置きます。

resources フォルダ#

ビュー(画面の見た目を書いたファイル)と、まだ変換していない CSS や JavaScript が入っています。

routes フォルダ#

アプリのルート(URL と処理の結びつけ)を書くファイルが入っています。はじめは web.php と console.php の2つです。

ファイル 役目
web.php web というミドルウェア(間に入って確かめる処理)のグループがかかるルートを書く。このグループが、セッション・CSRF 対策・Cookie の暗号化を受け持つ。セッションを使わない API(RESTful API)を作らないなら、ルートはほとんどここに書く
console.php ターミナルで動かすコマンドを、クロージャ(名前のない関数)で書く。入力と出力のメソッドがかんたんに使える。HTTP のルートではないが、ターミナルからアプリに入る入口になる。タスクスケジュールもここに書ける
api.php(あとから足す) API 用のルート。セッションは使えず、トークン(合言葉の文字列)でだれかを確かめる
channels.php(あとから足す) ブロードキャストのチャンネルを登録する

api.php と channels.php は、はじめは入っていません。install:api と install:broadcasting という Artisan コマンドで足せます。

storage フォルダ#

ログ、変換した Blade のテンプレート、ファイルで持つセッションとキャッシュなど、フレームワークが作るファイルが入ります。中は3つに分かれています。

フォルダ 役目
app アプリが作るファイルを置く
framework フレームワークが作るファイルとキャッシュを置く
logs アプリのログファイルを置く

storage/app/public には、プロフィール画像のように、利用者が作って公開したいファイルを置けます。公開するには、public/storage からこのフォルダへシンボリックリンク(別の場所へのショートカット)を作ります。php artisan storage:link で作れます。

tests フォルダ#

自動のテストが入っています。Pest か PHPUnit(どちらもテストを書いて動かす道具)で書いた、ユニットテスト(小さな部品を1つずつ確かめる)と機能テスト(いくつもの部品を通して確かめる)の例がはじめからあります。テストのクラスの名前の終わりには、Test を付けます。/vendor/bin/pest か /vendor/bin/phpunit で動かせます。結果をもっと見やすく表示したいときは、php artisan test を使います。

vendor フォルダ#

Composer で入れた部品が入っています。

app フォルダの中#

アプリのほとんどは app フォルダに入ります。このフォルダは、名前空間(クラスの名前の住所)が App で、Composer が PSR-4 という決まりで自動で読みこみます。

はじめから入っているのは Http・Models・Providers の3つです。ほかのフォルダは、make で始まる Artisan コマンドでクラスを作るたびに、必要に応じて作られます。たとえば app/Console は、make:command を動かすまでありません。

Console と Http は、アプリの中心への入口だと考えるとよいでしょう。HTTP(ブラウザ)も CLI(ターミナル)も、アプリに命令を伝えるための2つの方法です。どちらも入口なので、アプリの本当の仕事そのものは持ちません。

補足

app の中のクラスの多くは、Artisan で作れます。使えるコマンドは、php artisan list make で見られます。

フォルダ 入っているもの はじめからあるか
Broadcasting ブロードキャストのチャンネルのクラス(make:channel で作る) 無い(最初のチャンネルを作ると作られる)
Console 自作の Artisan コマンド(make:command で作る) 無い
Events イベントのクラス(event:generate と make:event で作る) 無い
Exceptions 自作の例外(make:exception で作る) 無い
Http コントローラー・ミドルウェア・フォームリクエスト ある
Jobs キューに入れられるジョブ(make:job で作る) 無い
Listeners イベントを受けて動くリスナー(event:generate と make:listener で作る) 無い
Mail メールを表すクラス(make:mail で作る) 無い
Models Eloquent のモデルのクラス ある
Notifications 通知のクラス(make:notification で作る) 無い
Policies 認可のポリシーのクラス(make:policy で作る) 無い
Providers サービスプロバイダ ある
Rules 自作のバリデーションのルール(make:rule で作る) 無い

Broadcasting フォルダ#

アプリのブロードキャスト(リアルタイムに知らせるしくみ)のチャンネルのクラスが入ります。make:channel で作ります。はじめは無く、最初のチャンネルを作ると作られます。くわしくはブロードキャストのページにあります。

Console フォルダ#

自作の Artisan コマンドが入ります。make:command で作ります。

Events フォルダ#

イベントのクラスが入ります。はじめは無く、event:generate か make:event で作られます。イベントは、「ある出来事が起きた」ことをアプリのほかの部分に知らせるために使います。知らせる側と受ける側をばらばらに作れるので、あとから変えやすくなります。くわしくはイベントとリスナーのページにあります。

Exceptions フォルダ#

自作の例外(エラーの種類)が入ります。make:exception で作ります。

Http フォルダ#

コントローラー・ミドルウェア・フォームリクエストが入ります。アプリに届くリクエストを扱う仕事は、ほとんどここに置きます。

Jobs フォルダ#

アプリのキューに入れられるジョブが入ります。はじめは無く、make:job を動かすと作られます。ジョブは、キューに入れて後から動かすことも、いまのリクエストの中でそのまま動かすこともできます。リクエストの中でそのまま動かすジョブは、「コマンドパターン」という設計の形にあたるため、「コマンド」とも呼ばれます。

Listeners フォルダ#

イベントを受け取って動くクラスが入ります。はじめは無く、event:generate か make:listener で作られます。リスナーはイベントを受け取って、その出来事に応じた処理をします。たとえば UserRegistered というイベントを、SendWelcomeEmail というリスナーが受けて、歓迎のメールを送る、といった形です。

Mail フォルダ#

アプリが送るメールを表すクラスが入ります。はじめは無く、make:mail を動かすと作られます。メールを作る処理を1つのクラスにまとめて、Mail::send で送れます。

Models フォルダ#

Eloquent のモデルのクラスが入ります。Eloquent は、データベースの表ごとに「モデル」を用意して、その表のデータを探したり、新しく足したりするしくみです。

Notifications フォルダ#

アプリが送る「通知」のクラスが入ります。はじめは無く、make:notification を動かすと作られます。アプリの中で起きたことを知らせる、簡単な通知です。メール・Slack・SMS・データベースへの保存など、いろいろな方法で送れます。

Policies フォルダ#

認可のポリシーのクラスが入ります。はじめは無く、make:policy を動かすと作られます。ポリシーは、ある人がある対象に、ある操作をしてよいかを決めるために使います。

Providers フォルダ#

アプリのサービスプロバイダが入ります。サービスプロバイダは、サービスコンテナ(クラスを作って渡してくれる、道具箱のようなしくみ)への登録や、イベントの登録をして、リクエストを受ける準備をします。新しいアプリには、はじめから AppServiceProvider が入っています。必要に応じて、自分のプロバイダも足せます。

Rules フォルダ#

自作のバリデーションのルールが入ります。はじめは無く、make:rule を動かすと作られます。ルールは、複雑なチェックを1つの部品にまとめます。くわしくはバリデーションのページにあります。

関連するページ#

公式ドキュメント(英語)

2026年10月5日時点の内容をもとに、日本語でまとめています。

ページの一覧