Day 2・ディレクトリ構造、artisan、マイグレーションの思想
主要ディレクトリの役割と「どこに何を書くか」
app・routes・database・configなど主要ディレクトリの役割を理解し、コードの置き場所に迷わないようにする。
ディレクトリ構造は「地図」である
Laravelプロジェクトを開くと、たくさんのフォルダが並んでいます。これは散らかっているのではなく、「どんなコードをどこに置くか」を決めた地図です。この地図を覚えておくと、初めてのプロジェクトでも「認証処理ならこの辺」「DB定義ならここ」と当たりをつけられます。まさに前日に学んだ「規約」の実体です。
- app/ … アプリ本体のPHPコード。Model、Controller、業務ロジックなど。最もよく触る場所。
- routes/ … URLと処理の対応表。web.php(画面用)や api.php(API用)がある。
- database/ … DB関連。migrations(スキーマ定義)、seeders(初期データ)、factories(テスト用ダミー)。
- config/ … アプリの設定値。DB接続やメールなどの設定をまとめる。
- resources/ … ビューのテンプレート(views)や、コンパイル前のCSS・JS。
- public/ … 外部から直接アクセスされる入口。index.phpや画像などの公開ファイル。
- storage/ … ログ・アップロードファイル・キャッシュなど、アプリが書き出すファイル。
- tests/ … 自動テストのコード。
なぜ置き場所を規約で決めるのか
置き場所を規約で固定する理由は、コードの「探しやすさ」と「予測可能性」のためです。人によって置き場所がバラバラだと、目的のコードを探すのに時間がかかり、レビューもしづらくなります。規約で場所が決まっていれば、誰が書いても同じ場所に同じ種類のコードが集まり、チーム全体の認知コストが下がります。
app/ の中はさらに役割で分かれる
最もよく触る app/ の中も、役割ごとにフォルダが分かれています。Modelは app/Models、Controllerは app/Http/Controllers、ミドルウェアは app/Http/Middleware に置く、というように、Day1で学んだMVCの各層がフォルダとして表現されています。
# 代表的な配置(抜粋)
app/
Http/
Controllers/ # コントローラ(司令塔)
Middleware/ # ミドルウェア(関所)
Requests/ # フォーム入力のバリデーション
Models/ # モデル(データと業務ルール)
Providers/ # アプリ起動時の初期設定
routes/
web.php # 画面用のルート
api.php # API用のルート
database/
migrations/ # DBスキーマの定義(版管理される)
seeders/ # 初期データ投入
config/ # 各種設定値
resources/views/ # Bladeテンプレート悪い例: 置き場所を自己流にする
業務ロジックを resources やルートファイルに書いたり、Controllerに何でも詰め込む。規約を無視すると、他の人がコードを探せず、レビューも困難になる。
良い例: 規約通りに配置する
業務ロジックはModel(app/Models)やサービス層へ、入力チェックはRequestsへ、共通前処理はMiddlewareへ。役割ごとに正しい場所に置くことで、誰が見ても構造が予測できる。
補足: 設定は config と .env の二段構え
接続先などの値は (.envファイル)に書き、config/ 側はその値を読み込む形にします。こうすると、パスワードなど環境ごとに違う秘密情報をコードに直接書かずに済み、本番と開発で設定を切り替えられます。
面接ではこう言う
「Laravelのディレクトリ構造は規約で役割ごとに分かれていて、appにアプリ本体、routesにURL定義、databaseにスキーマや初期データ、configに設定を置きます。この構造のおかげで、初めてのプロジェクトでも目的のコードを予測して探せますし、チームで置き場所が揃うので保守しやすくなります」と、探しやすさと保守性の観点で説明できると良いです。
読んでも腑に落ちない所は、AIに噛み砕いてもらいましょう。
理解度チェック
答えられれば、面接で説明できる状態に一歩近づきます。
DBのテーブル定義(スキーマ)を記述するファイルは、どのディレクトリに置くのが規約か。
Laravelがディレクトリ構造を規約で固定していることには、チーム開発上どんな意味があるか説明してください。
記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。