LoginSignup
2
0

LaravelでChatGPTを用いて本番っぽいデータを生成する効率のよい方法

Last updated at Posted at 2023-06-25

はじめに

現在スキルの売買系の案件の開発をしているのですが、ある程度コアな機能が完成して動作確認を社長としていたとき、

「これ文言適当だとクライアントが確認するときにサービスの使い方想像しづらいでしょ!」と言われました。

確かに現状のファクトリーで生成したデータ「サービス紹介:荒く火 なんだよなにし えおいあえい」みたいになってて、実際にサービスを使ったときの状態が分かりづらいです。

そこでデータの中身を実際にサービスを使っている人が使ってそうな文言に変えることにしました。

とはいえテーブルもそこそこたくさんある状態で、1からそれっぽい文章を書くのがめちゃくちゃ面倒だったので、なんとかChatGPTに任せられないかと考えました。

※今回はFactoryを用いています。FactoryとSeederについては解説しません
※前提としてマイグレーションファイルとモデルは既にあるものとします

まとめ

  1. サービスの方向性とこれから実行してほしい内容伝える
  2. ChatGPTにマイグレーションファイルを貼って、生成してほしいデータを指定する
  3. 生成された内容をFactoryに貼り付けて実行

1. サービスの方向性とこれから実行してほしい内容伝える

例えばスキルの売買をする系で、適当に楽器を持っている人と楽器の整備をする人のマッチングサービスを考えましょう。以下のように入力します。

Laravelを用いて、「楽器をもっている人と整備する人のマッチングサービス(この部分はアレンジする)」を作っています。
顧客に見せるタイミングが近くなってきたため、データを実際のサービスに出てきそうな感じにしたいと思います。
例えばサービスの名前をきめるときは、今まではfakerを用いて適当な文字列を生成していましたが、
それを「あなたの楽器を新品同様に蘇らせます!(この部分はアレンジする)」のような実際にありそうなサービス名に変更したいと思います。

方針としてはマイグレーションファイルを貼り付けるので、fakerと組み合わせてデータを生成してほしいです。
いくつかバリエーションが必要なデータを挙げるので、そのデータはあなたがカスタムしてもらい、
それ以外は通常のfakerでデータを作成してください。Factoryファイルで生成規則を決めてください。
次の質問からマイグレーションファイルを貼り付けていきます。

自分で考えるところは以下の通りです
- サービスの方向性について(「楽器をもっている人...」の部分)
- 本番で使いそうな具体的なデータ内容一つ(「あなたの楽器を...」の部分)

他の内容はコピペすれば大丈夫です。

出力結果

スクリーンショット 2023-06-26 5.53.32.png

2. マイグレーションファイルを貼って、生成してほしいデータを指定する

マイグレーションファイルを見て、生成してほしいデータを指定します。
例えばdisplay_nameとかはただの名前じゃなくて、サービスの方向性に合った名前にしたいので、display_nameを指定します。
後はマイグレーションファイルを貼り付けるだけです。

生成してほしいデータ:display_name,introduction

Schema::create('mechanics', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('display_name')->nullable();
            $table->string('email')->unique();
            $table->string('password')->nullable();
            $table->string('image')->nullable();
            $table->text('introduction')->nullable();
            $table->string('phone_number')->nullable();   
            $table->integer('experience')->nullable();
            $table->timestamps();
        });

自分で考えるところは以下の通りです

- 生成してほしいデータ

出力結果

スクリーンショット 2023-06-26 6.03.06.png

生成してほしい以外のデータ(nameとかimage)を貼り付ける意味ですが、他のデータも貼り付けることでそのデータにほしい情報がより正確になる気がします。
例えばnameとdisplay_nameがあると、nameが本名でdisplay_nameがお客さんに見せる名前だと理解してくれるので、よりサービスの方針に沿った名前になるのでは...と思います。
正確に検証したわけではないので完全に予想です。

なにより最大のメリットとしてはそのまま貼り付けるだけなのでめちゃくちゃ楽です。

3. 生成された内容をFactoryにはりつける

2で生成された出力結果をFactoryファイルにそのまま貼り付けます。
あとは実際にデータベースを作成するだけです。

DatabaseSeeder.php
public function run()
{
    Mechanic::factory(10)->create();
}

実行します

php artisan db:seed

これでデータベースが作成されたはずです

他の出力例

生成してほしいデータ:name,detaild_description

Schema::create('services', function (Blueprint $table) {
            $table->id();
            $table->foreignId('mechanics_id')->constrained('teachers')->onDelete('cascade');
            $table->string('name');
            $table->string('price');
            $table->text('detailed_description');
            $table->string('tagline')->nullable();
            $table->string('image')->nullable();
            $table->timestamps();
        });

出力結果

スクリーンショット 2023-06-26 6.55.14.png

備考

このままデータを生成すると、serviceをもたないmechanicが生成されてしまいます。
全てのmechanicがserviceを持ってほしいので、mechanicを生成した後それに関連づいたserviceを作れるようにMechanicFactoryに下記を追加します。

MechanicFactory.php
public function configure()
{
    return $this->afterCreating(function (Mechanic $mechanic) {
        Service::factory()->create(['mechanic_id' => $mechanic->id]);
    });
}

この方法の良いところ

  • 自分で考えるところが少なく、ほぼ貼り付けるだけなので、とても楽
  • データの関連までChatGPTが考えてくれるので、わりとほしいデータの方向性になる
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0