🐩

Laravelを使用したAPIの立ち上げ方法

2024/09/22に公開

概要

  1. Laravelの立ち上げ
  2. Breezeを使ったログイン機能実装
  3. テーブル作成
  4. Modelの作成
  5. ダミーデータの作成

前提

  • MacOS
  • Docker Desktop
  • sailを使用

1.Laravel プロジェクトの作成

プロジェクトの作成

Project_Name 部分をフォルダ名にして実行

curl -s "https://laravel.build/Project_Name?php=80&with=mariadb" | zsh

プロジェクトの権限を変更

sudo chmod -R 777 プロジェクト名

プロジェクトコンテナの起動

sail up -d

停止

sail down

.env ファイルを修正

LOG_CHANNEL=daily
APP_NAME=Project_Name

config/app.php

'timezone' => 'Asia/Tokyo',
'faker_locale' => 'ja_JP',

env ファイル間違った場合

(上記の Project_Name を変更のとこを変更忘れてた場合とか)
すべてのイメージとボリュームを削除する

sail down --rmi all -v

プロジェクト名だけ変える方法

DB の名前とかもプロジェクト名に紐付いているので、基本的にプロジェクト名の変更はできないと思ってたほうがいいかも
https://hiro8blog.com/rename-laravel-project/

2.ログイン breeze いれる

./vendor/bin/sail composer require laravel/breeze --dev
./vendor/bin/sail php artisan breeze:install api

3.テーブルの作成

テーブルの作成(マイグレーションファイル)と factory と model ができる

./vendor/bin/sail artisan make:model Channel -m --factory

マイグレーションファイルのみ

./vendor/bin/sail artisan make:migration create_channels_table

マイウレーションファイルに書き込んで、
マイグレートして、テーブルを作成

./vendor/bin/sail artisan migrate

テーブルの再作成

リリース後にやったらデータ全部消えるので開発段階でのみ。

sail artisan migrate:fresh

テーブル内容のみ再作成

リリース後にやったらデータ全部消えるので開発段階でのみ。

sail artisan migrate:refresh

--seedオプションを付けてリフレッシュした後にシーダーの登録も可能。

4.Model の作成

--factory で Factory(データの自動生成を行うクラスも作ってくれる)

./vendor/bin/sail artisan make:model Channel --factory

-m をつければ、Model を作るときに、マイグレーションファイルも一緒につくることができる。

./vendor/bin/sail artisan make:model Channel -m

5.seeder でダミーデータを作る

./vendor/bin/sail artisan make:seeder LocalSeeder

でローカルシーダーを作る。
開発環境によってシーダーを使い分けることができるらしい。
seeder でダミーデータを作る。
faker はフェイクデータをランダムで生成する処理。
https://github.com/fzaninotto/Faker

factory すでに作ってたら、そこにどんなデータ作るか書く

./vendor/bin/sail artisan migrate --seed

コントローラの作成

./vendor/bin/sail php artisan make:controller Api/ChannelController --resource

--resource をつけると、CRUD の操作に関する関数を一通りつくってくれる

API リソースの作成

./vendor/bin/sail artisan make:resource ChannelResource

app/Http/Resources/にファイルができる。

コントローラではこんな感じで書く

return ChannelResource::collection($channels);

毎回 data で梱包されないように、

app/Providers/AppServiceProvider.php
を編集する。

namespace App\Providers;

+ use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Support\ServiceProvider;

// 省略

    public function boot()
    {
-        //
+        JsonResource::withoutWrapping();
    }

サーバーの操作

php artisan migrate:fresh --seed

執筆中、、、、、、

Discussion