🦁
LaravelとInertiaJS使う際の開発の流れメモ(自分用)
Laravel開発の流れ
自分用メモ
前提条件
- Laravel11
- InertiaJS
- PHP8系
- Docker Desktop
- sail
- MariaDB
0. 準備
プロジェクトの作成
sailを使って開発を進める
Terminal
curl -s "https://laravel.build/Project_Name?php=82&with=mariadb" | zsh
コンテナを起動
Docker Desktopがインストールされていること前提。必要なコンテナが全て立ち上がる。
Terminal
./vendor/bin/sail up -d
コンテナを停止
Terminal
./vendor/bin/sail down
localhostにアクセスするとLaravelの初期表示
初期表示
1. マイグレーションファイルの作成
Terminal
./vendor/bin/sail php artisan make:migration create_shops_table
2. DBに接続できるか確認
Terminal
./vendor/bin/sail php artisan migrate:status
3. 作成したマイグレーションファイルを元にテーブルを作成
Terminal
./vendor/bin/sail php artisan migrate
直前のバージョンに戻したい
Terminal
./vendor/bin/sail php artisan migrate:rollback
4. Modelの作成
Terminal
./vendor/bin/sail php artisan make:model Shop
カラムへの代入、編集を制御する
許可する
Models/Sample.php
protected $fillable = [
'name',
'email',
'password'
];
許可しない
Models/Sample.php
protected $guarded = [
'id',
'timestamp',
];
5. テストデータを作成
Seederを使う
Factoryを準備
どんなテストデータを作成するか内容を定義
Terminal
./vendor/bin/sail php artisan make:factory ShopFactory --model=shop
例)ShopFactoryファイル
database/factories/ShopFactory.php
public function definition(): array
{
return [
'name' => $this->faker->streetName.' Shop',
'location' => $this->faker->address,
'description' => $this->faker->realText(100)
];
}
Faker
ダミーデータ生成に便利なライブラリ詳しくは以下を参照
Seederファイルを記述
database/seeders/DatabaseSeeder.php
public function run(): void
{
// User::factory(10)->create();
// User::factory()->create([
// 'name' => 'Test User',
// 'email' => 'test@example.com',
// ]);
+ Shop::factory()->count(10)->create();
}
前述したFactoryファイルを使って10件のダミーデータを作成する
ダミーデータを流し込む
Terminal
./vendor/bin/sail php artisan db:seed
Factoryで定義したダミーデータが挿入される。
5. Contollerにロジックを記述。
Controllerファイルを作成
./vendor/bin/sail php artisan make:controller ShopController
取得ロジックを記述
app/Https/Controllers/ShopController.php
namespace App\Http\Controllers;
+ use Inertia\Inertia;
+ use App\Models\Shop;
class ShopController extends Controller
{
public function index() {
$shop = Shop::all();
//データが取得できているかデバッグして確認
dd($shops);
return Inertia::render('Home',[
'shops' => $shop,
]);
}
}
6. ルーティングを設定
記述するファイルは routes/web.php
routes/web.php
Route::get('/home', [ShopController::class, 'index'])->name('shop.index');
7. デバッグ
app/Https/Controllers/ShopController.php
//データが取得できているかデバッグして確認
+ dd($shops);
8. フロントでデータ表示
InertiaJSを使用しているのでjsxファイルで表示を行う。使い方はReactと同じ。
Home.jsx
import React from "react";
const Home = (props) => {
return (
<div>
<h1>ホーム</h1>
<h2>ショップ一覧</h2>
<ul>
{props.shops.map((shop) => (
<li key={shop.id}>{shop.name}</li>
))}
</ul>
</div>
);
};
export default Home;
認証機能を実装
1.プロジェクトにLravel Breezeをインストール
./vendor/bin/sail composer require laravel/breeze --dev
2.BreezeコマンドのInertiaオプションでReactを入れる
./vendor/bin/sail php artisan breeze:install react
3.フロントの依存パッケージをインストール
./vendor/bin/sail npm install
4.フロントを起動
./vendor/bin/sail npm run dev
5.認証に使うテーブルを作成するためにマイグレーションを行う
./vendor/bin/sail php artisan migrate
Discussion