🐘

Laravel12でソシャゲAPI用のプロジェクトを作成してみる

に公開

前書き

1年くらい前に学生のソシャゲプロジェクト(Unity+Laravel)用のAWSデプロイ関連の記事を書きました。
https://zenn.dev/takodevlog/articles/112883dd379327

当時Laravel10だった環境も今はLaravel12…
Laravel11以降なんやかんや変わってうまく行かないということが今年の学生では増えていたので、
一度備忘として簡単にまとめておきます。

Laravel12に対応した書籍を読んでみるとphp.newという新しい環境構築手段があり
割と簡単にローカル環境構築できるとのことでしたが、
ローカル環境でSQLite使うのも、Dockerとかコンテナ的なものに触れないのも、
後々のことを考えるとなんだかなぁ…となったので今まで通り一旦sailを使用する方向でやってみます。
(php.newでもデータベースを切り替えればいいだけかもしれないが)

ちなみに筆者環境はMacで、Docker Desktopはインストール済みです。

プロジェクト作成

ターミナルからいつも通りプロジェクト名を指定し作成します。
(プロジェクト名はSocialGameServer2025とする)

$ curl -s https://laravel.build/SocialGameServer2025 | bash

この後プロジェクトのディレクトリに移動してsail upとコマンド叩いて込んでサーバー起動、localhostをブラウザで表示…
とできていたのはLaravel10までで、11からはここでエラーが出るようになっています。

対策としては先にマイグレーションを行うだけで良いのですが、
このままマイグレーションを行うとDBのスキーマ名が「laravel」になってしまいます。
これもLaravel10まではプロジェクト名でしたが、11以降は.envファイルのDB_DATABASE設定がlaravelになっているためです。

今回は「SocialGame」としたいので事前に.envファイルの中身を書き換えました。

DB_DATABASE=SocialGame

また、マイグレーションファイルに users という名前のテーブルがありますが、
今回ゲームでも同じ名前のテーブルを使用したいと思っているのでusersのマイグレーションファイルを先に書き換えます。(カラムはそれっぽいものを暫定で入れています)
database > migrations > 0001_01_01_000000_create_users_table.php

Schema::create('users', function (Blueprint $table) {
    $table->bigIncrements('manage_id')->comment('管理ID');
    $table->ulid('id')->comment('ユーザーID')->unique();
    $table->string('user_name', 16)->comment('表示名');
    $table->unsignedSmallInteger('max_stamina')->default(20)->comment('最大スタミナ');
    $table->unsignedSmallInteger('last_stamina')->default(20)->comment('最終更新時スタミナ');
    $table->dateTime('stamina_updated')->useCurrent()->comment('スタミナ更新日時');
    $table->dateTime('last_login')->useCurrent()->comment('最終ログイン');
    $table->dateTime('created_at')->useCurrent()->comment('作成日時');
    $table->dateTime('updated_at')->useCurrent()->useCurrentOnUpdate()->comment('更新日時');
    $table->boolean('deleted')->default(0)->comment('削除');
});

usersの下にあったpassword_reset_tokensは使用しないのでマイグレーションファイルから記述を削除しています。
また、下部のdown関数から「Schema::dropIfExists('password_reset_tokens');」も削除しました。

保存をしたらディレクトリ移動後、sail up -dで起動します。
(.bashrcにエイリアスとして alias sail="./vendor/bin/sail" を追加しているのでsail up -dだけで呼べています)

$ cd SocialGameServer2025
$ sail up -d
$ sail artisan migrate

localhostをブラウザで開いて起動を確認します。

welcomeなページ

諸々設定

他でも調べれば出てくるので詳細は省きますが、以下の設定を行いました。

  • タイムゾーンの設定
    →app.phpを修正
  • phpMyAdminの設定
    →compose.yamlに設定追記

APIを使うために

通常ページのルーティングには routes/web.php を使用しますが、
API用のルーティングは routes/api.php に記載していくのが基本でした。
しかし、Laravel11以降このファイルが存在していないようです。

そこで、以下コマンドを実行することでAPI使用に必要な設定含め一発で準備することができます。

php artisan install:api

これでapi.phpが追加されます。
api.phpに追加したルーティングにアクセスする際には、URLに「api/」を追加する必要があります。

getでAPI呼び出しテスト

最後に適当なコントローラを用意してブラウザから叩いてアクセスを確認してみます。

$ sail artisan make:controller GetTestController --invokable

ラクしたいのでシングルアクションコントローラにしています。

GetTestControllerの中身は適当な配列をjsonにして出力するだけです。

app/Http/Controllers/GetTestController.php
public function __invoke(Request $request)
{
    return response()->json(['message' => 'OK']);
}

あとはapi.phpにルーティングを追加して

routes/api.php
// 接続テストAPI
Route::get('/gettest', App\Http\Controllers\GetTestController::class);

これで localhost/api/gettest にアクセスして{"message":"OK"}が返ればOKです。

Userモデルの修正

usersテーブルを書き換えているので、それに合わせてUser.phpのモデルも書き換えています。

app/Models/User.php
<?php

namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
    use Notifiable;

    protected $primaryKey = 'manage_id';

    protected $guarded =
    [
        'manage_id',
        'created_at',
    ];
}

バージョン管理へ

GitHubで管理したいのでプロジェクトのディレクトリをリポジトリ化して管理します。
これは過去記事でやっています。
https://zenn.dev/takodevlog/articles/f3262b3843afdf

とりあえず完了

取り急ぎプロジェクトの準備は整いました。
あとは必要なテーブル、モデル、コントローラなど適宜実装していけば良いですね。

php.newはまた時間がある時にじっくり触って吟味したいと思います。

Discussion