【Laravel/MAMP】API開発の流れ!データベースへのCRUD処理

この記事からわかること
- LaravelでAPI開発の流れ
- データベースへのCRUD処理の実装方法
index
[open]
\ アプリをリリースしました /
環境
- Laravel:8.83.29
- PHP:8.2.0
- macOS:Sonoma 14.6.1
LaravelでAPIを開発する流れ
Laravelを使用してAPIを開発する流れをまとめていきます。今回はひとまずローカル環境での開発ということでMAMPのMySQLを使用していきたいと思います。
流れ
- データベースの作成
- データベースの接続
- Eloquentモデル&マイグレーションファイルの作成
- コントローラーの作成
- ルーティングの定義
データベースの作成
最初にMAMPのMySQLコンソール画面からデータベースを作成します。「dev_test」データベースを作成しておきます。

データベースの接続
続いてLaravelプロジェクトとデータベースを連携していきます。連携方法は以下の記事を参考にしてください。
Eloquentモデル&マイグレーションファイルの作成
続いてデータベースCRUD処理を行えるEloquent(エロクアント)モデルとテーブル構造を定義するためのマイグレーションファイルを作成します。 make:model
に-m
オプションを付与することでモデルとマイグレーションファイルを同時に作成することができます。
$ php artisan make:model Record -m
これで「app」>「Models」ディレクトリ配下にRecord.php
が「database」>「migrations」ディレクトリ配下に{timestamp}_create_records_table.php
が生成されます。-m
オプションは以下コマンドを実行したのと同義です。
$ php artisan make:migration create_records_table
{timestamp}_create_records_table.php
のup
メソッドにテーブル構造を定義します。
class CreateRecordsTable extends Migration
{
public function up()
{
Schema::create('records', function (Blueprint $table) {
$table->string('id')->primary();
$table->string('name');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('records');
}
}
定義できたらmigrate
を実行して実際にMySQLに反映させます。ここでエラーが発生する場合はデータベース接続から見直してください。
$ php artisan migrate
続いてRecord.php
内にテーブル名を定義するprotected $table
と入力可能な項目を定義するprotected $fillable
変数を用意します。
class Record extends Model
{
use HasFactory;
// テーブル名
protected $table = 'records';
// 入力可能な項目
protected $fillable = [
'id',
'name'
];
}
コントローラーの作成
続いて実際にテーブルのデータを登録したり、取得したりするコントローラーを作成します。make:controller
に--model=Record
を付与することでindex
やcreate
などCRUD処理に必要なメソッドの基盤を自動生成してくれます。
$ php artisan make:controller RecordAPIController --model=Record
自動生成された各メソッドには以下のような役割を実装します。
- index(GET):全て取得
- create:新しいデータを作成するための入力フォームを返す
- store(POST):新規登録
- show(GET):特定のデータを取得
- edit:既存データの編集フォームを返す
- update(PUT):更新
- destroy(DELETE):削除
今回はAPI開発なのでcreate
とedit
は空で定義しておきます。
class RecordAPIController extends Controller
{
public function index()
{
// データベースから全データ取得
$records = Record::all();
// JSON形式で返却
return response()->json($records);
}
public function create() { }
public function store(Request $request)
{
// バリデーション
$validatedData = $request->validate([
'id' => 'required|string|max:255|unique:records,id',
'name' => 'required|string|max:255',
]);
// データベースに保存
$record = Record::create($validatedData);
// 結果を返却
return response()->json([
'message' => 'Record created successfully',
'record' => $record,
]);
}
public function show(Record $record)
{
// 指定されたRecordをJSONで返す
return response()->json($record);
}
public function edit(Record $record) { }
public function update(Request $request, Record $record)
{
// バリデーション
$validatedData = $request->validate([
'name' => 'required|string|max:255',
]);
// 既存データを更新
$record->update($validatedData);
// 結果を返却
return response()->json([
'message' => 'Record updated successfully',
'record' => $record,
]);
}
public function destroy(Record $record)
{
// データの削除
$record->delete(); // データベースから削除
return response()->json([
'message' => 'Record deleted successfully',
]);
}
}
ルーティングの定義
続いてコントローラーのアクションとURLを紐づけるルーティング設定です。今回はモデルとコントローラーを連携して作成しているので以下の記述だけで各メソッドへのルーティングが完了します。記述する箇所はapi.php
です。そのためURLにはapi/records
のようになるので注意してください。
Route::apiResource('records', 'App\Http\Controllers\RecordAPIController');
APIの疎通テスト
これでAPIの開発が完了しました。実際に正常に動作するか確認していきます。今回は「Postman」を使用して疎通テストしていきます。
データベースが空の状態なので最初に新規登録を行います。新規登録はPOST
メソッドでhttp://localhost/oiwai/api/records
にアクセスします。その際にbody
にJSON形式でデータを渡します。
※oiwai
は私の環境構造上入っているだけなので抜いてください。
{
"id": "fdasfdsfsadfsda",
"name": "Birthday Gift"
}
これでSend
ボタンをクリックすると以下のようにステータスコード200
で結果のJSONが取得できれば正常にデータがデータベースに蓄積されます。

データ一覧を取得したい場合はGET
メソッドでhttp://localhost/oiwai/api/records
にアクセスします。こちらも返り値でデータが全て取得できていれば成功です。

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。