//
2026.10.01/4 min read#language#direction

Laravelで小さな管理画面を作る——ディレクターが知っておく構造

お知らせや問い合わせを管理するだけの小さな画面でも、Laravelは「テーブル・URL・権限」の3点で構造が決まります。私が要件を詰めるときに、この3点をどう言葉にしてエンジニアと話しているかを書きます。

Laravelで小さな管理画面を頼むとき、ディレクターが決めておくべきことは 「どんなテーブルがあるか」「どのURLで何ができるか」「誰が何をしてよいか」 の3つです。コードが書けなくても、この3つが言葉になっていれば、見積もりも画面設計もぶれにくくなります。私はお知らせ管理や問い合わせ一覧のような小さな管理画面を、この順番で整理しています。

なお、2026年10月時点の公式のリリースノートでは、Laravel 13は2026年3月17日リリースで、PHP 8.3以上が必要とされています。既存案件で古いバージョンが動いていることも多いので、最初にバージョンとサポート期限を確認するようにしています。

フォルダ構成は「どこに何が書かれるか」の地図

公式のディレクトリ構成のページを、私はディレクター向けにこう読み替えています。

場所 中身 ディレクターが気にすること
routes/web.php URLと処理の対応表 画面一覧と一致しているか
app/Models テーブルごとのモデル データ項目の抜け漏れ
app/Http/Controllers 画面ごとの処理 1画面で何をさせるか
resources/views 画面のテンプレート デザインの差し込み先
database/migrations テーブル定義の変更履歴 項目追加の影響範囲

全部を読む必要はありません。私が打ち合わせで実際に開くのは、routes/web.php と database/migrations の2か所くらいです。

テーブルは「マイグレーション」で履歴として残る

公式のマイグレーションの説明では、マイグレーションはデータベースのバージョン管理のようなもの、とされています。テーブルの作成や「項目を1つ足す」といった変更が、1ファイルずつ時系列で残る仕組みです。

ディレクションの目線では、これは 「項目追加は1回ごとに作業と確認が発生する」 という意味になります。お知らせに「公開日」を足す、あとから「カテゴリ」を足す、と小出しにすると、そのたびにマイグレーション、モデル、フォーム、一覧表示を直すことになります。だから私は、要件定義の段階で項目を表にしておき、「あとから足しそうな項目」も一度は候補として出すようにしています。

URLは「リソース」の7つの操作で考える

Laravelには、一覧・作成・保存・詳細・編集・更新・削除の7つの操作を、1行のルート定義でまとめて用意するリソースコントローラーがあります。たとえば Route::resource('photos', ...) と書くと、/photos(一覧)や /photos/{photo}/edit(編集)といったURLが決まった名前で並びます。

管理画面の画面一覧は、この7つに当てはめると整理しやすくなります。

  • お知らせ:7つ全部が必要
  • 問い合わせ:一覧と詳細だけ(作成・編集は管理側では不要)
  • 設定:1件しかないので、一覧のない形にする

「どの画面が要らないか」を先に決めると、見積もりから不要な画面が外れます。公式ドキュメントでも、only や except で必要な操作だけに絞る方法が紹介されています。

権限は「ログインできる」と「操作してよい」を分ける

小さな管理画面でつまずきやすいのが権限です。Laravelの認可のドキュメントでは、ログインしているユーザーでも、特定のデータを更新・削除してよいとは限らない、という前提で、ゲート(クロージャで書く単純な判定)とポリシー(モデルごとに判定をまとめるクラス)の2つが用意されています。

私が要件で書くのは、次のような表です。

役割 お知らせ 問い合わせ 設定
管理者 全操作 閲覧・削除 編集
編集者 作成・編集 閲覧のみ なし

この表があれば、エンジニアはポリシーに落とし込めますし、テストのときも確認すべき組み合わせがはっきりします。逆に「管理者だけ使う想定です」で済ませると、あとで「アルバイトにも入力だけさせたい」と言われたときに手戻りが大きくなります。

明日から試せる一手

次に管理画面の相談を受けたら、打ち合わせのメモを3枚に分けてみてください。1枚目に「テーブルと項目」、2枚目に「データごとに7つの操作のうちどれが要るか」、3枚目に「役割×操作の表」。Laravelで作るかどうかが決まる前でも、この3枚はそのまま要件定義書の芯になります。