LLaravel Bootcamp

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テンプレート
MVCの各層がそのままフォルダに対応している。地図として覚えておくと迷わない。

悪い例: 置き場所を自己流にする

業務ロジックを resources やルートファイルに書いたり、Controllerに何でも詰め込む。規約を無視すると、他の人がコードを探せず、レビューも困難になる。

良い例: 規約通りに配置する

業務ロジックはModel(app/Models)やサービス層へ、入力チェックはRequestsへ、共通前処理はMiddlewareへ。役割ごとに正しい場所に置くことで、誰が見ても構造が予測できる。

補足: 設定は config と .env の二段構え

接続先などの値は (.envファイル)に書き、config/ 側はその値を読み込む形にします。こうすると、パスワードなど環境ごとに違う秘密情報をコードに直接書かずに済み、本番と開発で設定を切り替えられます。

面接ではこう言う

「Laravelのディレクトリ構造は規約で役割ごとに分かれていて、appにアプリ本体、routesにURL定義、databaseにスキーマや初期データ、configに設定を置きます。この構造のおかげで、初めてのプロジェクトでも目的のコードを予測して探せますし、チームで置き場所が揃うので保守しやすくなります」と、探しやすさと保守性の観点で説明できると良いです。

読んでも腑に落ちない所は、AIに噛み砕いてもらいましょう。

理解度チェック

答えられれば、面接で説明できる状態に一歩近づきます。

Q1

DBのテーブル定義(スキーマ)を記述するファイルは、どのディレクトリに置くのが規約か。

Q2

Laravelがディレクトリ構造を規約で固定していることには、チーム開発上どんな意味があるか説明してください。

記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。