作るものを設計する(要件とテーブル設計)
ここまでの知識を使って作る「メモ投稿アプリ」の要件を整理し、テーブル設計とルート設計を考えます。
広告枠(記事上)— 本番では AdSense 広告が表示されます
いよいよ実践です。この章では、ここまで学んだことを総動員して、ログインした人が自分のメモを投稿・編集・削除できるアプリを作ります。まずは「何を作るか」を設計しましょう。いきなりコードを書き始めず、設計から入るのが上達のコツです。
作るものの要件
シンプルな「メモ投稿アプリ」にします。要件を箇条書きにします。
- ログインした人だけがメモを投稿できる
- メモには タイトル と 本文 がある
- 一覧・詳細・新規作成・編集・削除ができる(CRUD)
- 編集・削除できるのは、自分が書いたメモだけ
これらは、これまでの章で学んだ要素の組み合わせでできています。
テーブル設計
メモを保存する posts テーブルを設計します。「誰のメモか」を記録するため、user_id を持たせます(第5章のリレーション)。
| 列名 | 型 | 説明 |
|---|---|---|
| id | id | 自動の番号 |
| user_id | foreignId | 投稿者(users.id とつながる外部キー) |
| title | string | タイトル |
| body | text | 本文 |
| timestamps | — | 作成日時・更新日時 |
マイグレーションはこうなります。
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->constrained();
$table->string('title');
$table->text('body');
$table->timestamps();
});
ルート設計:7つの操作
CRUDのような「リソースに対する一連の操作」は、Laravel によくある7つのルートをまとめて作る仕組みがあります。これを リソースルート と呼びます。
// routes/web.php
Route::resource('posts', PostController::class);
この1行で、次の7つのルートとコントローラのメソッドが用意されます。
| 操作 | メソッド名 | 役割 |
|---|---|---|
| 一覧 | index | メモ一覧を表示 |
| 詳細 | show | 1件の詳細を表示 |
| 作成画面 | create | 新規作成フォームを表示 |
| 登録 | store | 送信を受けて保存 |
| 編集画面 | edit | 編集フォームを表示 |
| 更新 | update | 編集の送信を受けて保存 |
| 削除 | destroy | 削除 |
「一覧・詳細・作成・編集」は画面を見せる係、「登録・更新・削除」はデータを変える係、と整理できます。
設計のまとめ図
ログインユーザー
│ 投稿(user_id で本人と紐づく)
▼
posts テーブル(id / user_id / title / body / timestamps)
▲
│ Route::resource で7つの操作
PostController(index / show / create / store / edit / update / destroy)
まとめ
- 作るのは「ログイン必須・自分のメモだけ編集できるメモ投稿アプリ」。
- テーブルは
posts(user_idで投稿者と紐づける)。 Route::resource('posts', PostController::class)で CRUDの7ルートを一気に用意できる。- 「画面を見せる係」と「データを変える係」に分けて考えると整理しやすい。
- 次の単元では、この設計を実際に実装していきます。
広告枠(記事下)— 本番では AdSense 広告が表示されます