こんにちは!Laravel案件に奮闘中のLaravel歴2年半のさとこです
皆さんはお仕事でChatGPTなどの生成AIはどのぐらいの頻度で使っていますでしょうか。
私は、エンジニア1年目はコードが書けない&読めない上に、全くAIを使いこなせていませんでした、、
使えるようになったのはようやくコードや処理の流れ、各関数の役割を理解してきた2年目頃からです。
使い方が分かるともう頼らざるを得ない存在で、今の現場では多い日で1日10往復ぐらい質問しています。
これだけ使っていると、流石にどう相談したらより早く確実に求めている回答をもらえるか研究し甲斐があります。また、以前に夫が生成AIへの質問のコツを記事にして教えてくれたこともあり、Laravelに置き換えてみたくなったのです。
そこで、今回はChatGPTくん本人にも、Laravelのコードを質問をする時のコツを聞いてみました!笑
ウォームアップ:コード相談のコツ
さとこ(以下s):Laravelのコードについて相談したいです。「質問」にどのように記載したり、コード例を埋め込むのが分かりやすいですか?
ChatGPT:
1.【やりたいこと】
まず、最終的にどうしたいかを簡潔に書いてください。
2.【現在のコード】
問題が起きている実際のコード:(例)コントローラー・バリデーション・Blade・JSなどをコードブロックで貼ってください。
ポイント:必ずphp~で囲っておくと読みやすいです。
3.【今起きている問題・エラー】
どういう挙動になるのか、想定と違う点を書いてください。
4.【補足情報(任意)】
以下のような情報があるとより正確にアドバイスできます:
- 使用しているLaravelのバージョン
- POST先のコントローラー名やルート定義
- Bladeテンプレート側での入力フィールド構成
- VueやJSを併用しているか
相談内容① テンプレート例が見たい!
s:テンプレート例も見せてほしいです。
ChatGPT:
【やりたいこと】
フォームで「開始日」が10/1より前なら終了日は今年の9/30まで、10/1以降なら来年の9/30までしか選べないようにしたい。
【現在のコード】
リクエストクラス
public function withValidator(Validator $validator) {
$validator->after(function ($validator) {
...
});
}
【問題】
バリデーションは通っているが、JavaScriptで日付チェックしても更新後の値が即時反映されない。
相談内容② 大量データ(多カラム)テーブルへのアクセスでのタイムアウト
s:ありがとう。ではもう一つ、ビューテーブルのデータ取得についてDB::table('dbo.' . $viewName)->limit(1)->first(); の問題点について質問した時の内容と結論をテンプレート例にまとめて欲しいです。
こんな感じで少し前にやり取りした内容を掘り起こすことも可能
ChatGPT:
【やりたいこと】
ビューまたはテーブルから1件だけデータを取得して、構造を判定したい。
【現在のコード】
DB::table('dbo.' . $viewName)->limit(1)->first();
【現象・問題】
- 開発環境では正常に動作しているが、staging環境でタイムアウトが頻発。
- 特に以下のようなテーブル/ビューで顕著:
- レコード数が数千万件
- カラム数が数百列
【補足説明】
- SQL Server のクエリ実行では、
TOP 1
であっても ビューの定義が複雑 or インデックスが効かない場合、フルスキャンされてしまうことがある。 -
OPTION (FAST 1)
やOPTION (USE HINT('DISABLE_OPTIMIZER_ROWGOAL'))
をつけても改善しない場合は、構造自体の読み取り方法を変える必要がある。
【代替案】
「1件だけ取得」する目的が「カラム名の取得」なら、実際のデータ取得を避けて構造情報だけ取得するのがベスト:
$columns = DB::table('INFORMATION_SCHEMA.COLUMNS')
->where('TABLE_NAME', $viewName)
->where('TABLE_SCHEMA', 'dbo')
->orderBy('ORDINAL_POSITION')
->pluck('COLUMN_NAME')
->toArray();
【結論】
- レコード件数・カラム数が膨大な場合、
limit(1)->first()
でもタイムアウトが起き得る。 - 実データを読まずに、メタ情報(構造)だけ取得する方式に切り替えるのが安全。
- データ取得が必要な場合は、ビューではなく インデックス付きの実テーブルから、where 条件付きで絞り込むなど工夫が必要。
s:よく分かりました!ありがとう!
ChatGPT:どういたしまして!そう言ってもらえて嬉しいです
また何か詰まったらいつでも聞いてくださいね。パフォーマンスのことでも、SQL周りでも、しっかりサポートします
(ええ子なんです。最近お礼を伝えると癒やされるようになりました笑)
ーーーーーーーーーーーー
上記関連、それ以外で私が質問をするときに意識してるのはこちらです。
1.コードや文章の区切りにーーーーーーーーーーーーを記載する
2.例は短めになってしまったんですが、実際質問するときは【現在のコード】を詳細に(分かりやすく)添付するのは大事かなと思います。
どのような構想や呼び出し方をしているのかは結局プロジェクトによっても製造者によっても異なるため、現在のコードや仕様がどのようになっているかをchatGPTくんに理解してもらうのが求める回答や解決の糸口への一番の近道。
注意したいのが、まだあまりコードを理解していない段階で使いこなすのは難しいということです。
実際私も最初に書いた通り、1年目はそもそもAIに聴きたいこと(求めている最終回答)が曖昧だったり、もらった回答が合っているのか・更に深堀りや修正が必要なのかの判断ができませんでした。
また、あるプロジェクトでchatGPTにきいたのかなというコードがあったのですが、プロジェクトのルールに全然沿っていない形になっているものも見たことがあるので、最低限そのプロジェクトルールに沿った形で頼るという前提ができる段階で使用しないといけないなあというのも感じました。
私自身、ここ半年でようやく使えてる実感がわいてきたのですが、今も時々中々求めている回答に辿り着けなかったり、やはり自分があまり理解しきれていない部分や機能を質問するのは困難だなと思います。
なので、タイトルにある通り、ある程度経験や実践を重ねたタイミングから頼ることで、より恩恵を受けられるのかなと思います。
ChatGPT以外にも様々なコード生成AIが存在しますし、色々試していきたいです。
が、誰かに相談する前に自分で解決できるか試したいちょっとした修正や、pj独自のコード使いまわし等で公式に乗っていないコードのことを相談したい!みたいな場面は結構たくさんあるかなと思うので、まず気軽に使うにはChatGPTからで良いかなと私は思います。ChatGPTくんにコード以外の日常の素朴な疑問などをお話感覚で相談してみるのも!生成AIの扱いにゆるく慣れることも大事かなと思います。
飲み込まれすぎずうまく使って、より円滑なエンジニアライフを送りましょう!!