【Laravel】TypeScriptの型定義を自動生成する【laravel-typegen, ziggy】

こんにちは、フリーランスエンジニアの太田雅昭です。

Laravelの悩み

LaravelはPHPで書かれています。TypeScriptのような型安全性はないため、Next.jsなどに比べるとどうしても開発のしにくさが出てきます。バックエンドは割り切るにしても、せめてフロントエンドのTypeScriptでは安心して作業したい。そんな要望を解決するため模索します。

laravel-typegen

今回、laravel-typegeを使用します。

https://github.com/7nohe/laravel-typegen

php artisan model:showからデータを抽出するようで、データの正確性は高そうです。

インストールとモデル型定義生成

インストールはシンプルです。

npm install -D @7nohe/laravel-typegen
composer require doctrine/dbal

package.jsonを下記のようにします。

{
    "scripts": {
        "typegen": "laravel-typegen"
    },
}

実行します。これで、js/types/model.tsにモデルの型定義ファイルが生成されました。便利ですね!

ziggyのroute生成

ziggyのroute生成は、以下のようにすれば追加で生成するようです。

{
    "scripts": {
        "typegen": "laravel-typegen --ziggy"
    },
}

ただ生成されるのはvue用なのでしょうか。Reactで使う方法が分かりませんでした。

ziggyのrouteは、ziggy-jsでも作成できるので、代わりにこちらを使用します。package.jsonを変更します。

{
    "scripts": {
        "typegen": "php artisan ziggy:generate --types && laravel-typegen"
    },
}

これで、ziggy.d.tsファイルが生成されます。以下のようにすれば、補完が効きます。

route('users.index');

ただ存在しない値を入れてもエラーになりません。ここがどうにかなれば嬉しいのですが、ひとまずはこの辺りにしておきます。