テーブル定義(DDL)から Laravel の web api を ChatGPT で作成する

さらに、ChatGPT でコーディングをするシリーズの続き。

いわゆるスキャフォールディングの手法を使います。CakePHP や Ruby on Rails には、テーブルからコマンドを使って MVC パターンの各クラス&メソッドを生成することができるのですが、何故か Laravel にはありません。いくつか、それっぽいものがあるのですが、実際にやりたいところとして、

  • SQL の create table 文を渡す
  • 適当にリレーションを解釈して欲しい。
  • 出力は Controller/Model を出力して欲しい。
  • Laravel の場合は api.php も必要
  • web api で利用するので、View の blade は必要ない

という要件があるので、通常のスキャフォールディングツールでは過剰なところがあります。特に View の部分はいらないのと、できれば Vue3 の出力までして欲しい、という感じです。

仕方がないので、何かの機会があったら PHP のツールを作ろうと思っていたところなのですが(Laravel が PHP なので…これは仕方がない)、ChatGPT がでてきました。

SQL を渡して、出力を要求する

プロンプト以下のように、SQLをベタ打ち、できるだけ指示を短くしています。

以下の SQL から、指定した店舗内にある商品一覧を表示する。
これを、Laravel の web api で作成して。

--
-- 店舗テーブル
-- 
create table Stores ( 
	id int not null,		-- 店舗id
	name varchar(100),		-- 店舗名
	address varchar(255),	-- 店舗住所
	created_at datetime,	-- 作成日時
	updated_at datetime,	-- 更新日時
	is_delete bool		-- 削除フラグ
);

--
-- 店舗から商品への連携テーブル
--
create table store_product_link (
    store_id int not null,	    -- 店舗ID
    product_id int not null,	-- 商品ID
    stock int,				    -- 在庫数
    created_at datetime,	    -- 作成日時
    updated_at datetime,	    -- 更新日時
	is_delete bool		        -- 削除フラグ
);

以前、GPT-3.5の頃にはうまくいかなかったのですが、GPT-4o ではかなり綺麗に出力されます。

コツとしては、Laravel で出力を要求するところと、SQL のコメントにある「店舗」や「商品」などをプロンプト内に明確に追加することです。ただし、ここの新人教育で使っている店舗や商品の SQL 自体が、GPT-4o で出力したものなので、GPT 自体に読みやすい(内部的に保持している者に近い)形式になっているだけかもしれません。実運用で使われている業界用語を場合はうまくいかない可能性もあります。

そのような場合は、完全に自動生成されるのを期待するのではなく、多少の手作業の時間を残しておいたほうがよいでしょう。そうだとしても、結構面倒な Model 同士の連結なども出してくれるので、最初のテンプレートとしてかなり重宝します。

カテゴリー: 開発 パーマリンク