フォルダ構成
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日時点の内容をもとに、日本語でまとめています。