見出し画像

話題のChatGPTを使って記事とSQL作成で遊んでみた

こんにちは。manebi開発クラ部の中の人、お馴染みのマネージャJでござる。
前回は、今となってはあまりにも有名になっているChatGPTを初めて試した以下の記事を書いてみた。

多くの方にスキ押してもらえて内心嬉しかったけど、ChatGPTの良さをあまり引き出せていないことが気がかりだったので、今回はもう少しChatGPTの性能を引き出してみたいと思う。

ブログの代筆って本当に出来る?

Webを飛び交うニュースを見ていると、ライターの代わりになるだの。試験に合格するだの。話が盛り上がっていたので、試しに本当に記事がかけるのか。その名の通り、丸投げしてみた。

筆者:AWSのサーバレスサービスを紹介する記事を2,000文字程度で書いて欲しい。

見ての通りの丸投げっぷりだ。どうか。白旗を上げるか。筆者はChatGPTに怒られるだろうか。。。。
しばらくすると何かしら文字を書き始めた。人間がタイピングしているぐらいのスピードで書き出し始めたのだ。
※どうやら日本でも有料プランのサービスが始まっているらしく、それだともっと早いっぽい。

ChatGPT:AWSには様々なサーバレスサービスがありますが、以下に主要なサービスを紹介します。

AWS Lambda
AWS Lambdaは、コードを実行するためのサーバレスプラットフォームです。Lambdaは、サーバーの管理や設定を必要とせず、イベントに応答してコードを実行することができます。Lambdaは、Python、Java、C#、Goなどのプログラミング言語をサポートしています。Lambdaは、サーバレスのマイクロサービス、データ処理、バックグラウンドジョブ、Webアプリケーション、APIゲートウェイなどの用途に利用されます。

AWS API Gateway
AWS API Gatewayは、RESTful APIを作成するためのサービスです。API Gatewayは、HTTPリクエストをLambda関数やAWSの他のサービスにルーティングし、処理することができます。API Gatewayは、API認証、トラフィック管理、APIバージョニング、クエリパラメーターのバリデーション、統合の構成、カスタムドメイン名の設定など、様々な機能を提供します。

AWS Step Functions
AWS Step Functionsは、ビジネスプロセスを定義し、実行するためのサービスです。Step Functionsは、タスクのフロー、並列実行、エラーハンドリング、時間制限などを定義することができます。Step Functionsは、Lambda関数やEC2インスタンス、SNSトピック、SQSキューなど、他のAWSサービスを組み合わせて使用することができます。

AWS AppSync
AWS AppSyncは、GraphQL APIを作成するためのサービスです。AppSyncは、Amazon DynamoDB、Elasticsearch、AWS Lambda、AWSの他のサービスと統合することができます。AppSyncは、クライアントアプリケーションに必要なデータのみを取得できるようにすることで、ネットワークトラフィックを削減し、アプリケーションのパフォーマンスを向上させることができます。

AWS S3
AWS S3は、ストレージサービスです。S3は、サーバレスのアプリケーションでの画像、動画、オーディオなどのメディアファイルの保存に使用されます。S3は、APIを介して、アプリケーションからアクセスできるようにすることができます。

約10分ほどかかっただろうか。上記のような文章を書いてくれた。やはりかなり優秀だ。ちなみに、上記は要求した2,000文字に満たない1,045文字だった。途中、ネットワークエラーが発生したのだった。
※Regeneratingも出来るが、回答は毎回同じではなく、変わっていくので、初回の回答を上記は記している。

うん。ある程度は書けるけど、思い通りの記事を書かせるためには骨組みやストーリーを決めて、それ通りに細切れに質問した方が良さそうだと思うのは筆者だけだろうか。

SQLは書ける?

ここで出てくるのが普段業務で触れることの多いクエリを書いてもらうのもありじゃないか。と思い始める。
そう、手を抜けるならとことん抜きたいのだ。

概要編?SQLの基本?

筆者:mysqlでSelectクエリを書いて欲しい
ChatGPT:もちろんです。以下は、基本的なSELECTクエリの例です。

SELECT * FROM テーブル名;
これは、指定したテーブル内のすべての列と行を返します。必要に応じて、SELECTステートメントによって返される列を制限したり、特定の条件を指定して行をフィルタリングしたりすることができます。
例えば、以下は、"users"テーブルから"username"と"email"列のみを返すSELECTクエリです。
SELECT username, email FROM users;

また、WHERE句を使用して条件を指定してフィルタリングすることもできます。例えば、以下は、"users"テーブルから"username"が"john"である行のみを返すSELECTクエリです。
SELECT * FROM users WHERE username = 'john';

うん。親切だし、おっしゃるとおりだ!でも実際のクエリを書いてほしいんだ!

筆者:実際に書きたいSQLを書いてもらえる?
ChatGPT:もちろんです。SQLは目的や要件に応じて異なるため、具体的なクエリをお知らせいただければ、できるだけ適切な回答を提供いたします。以下は、例としていくつかのSELECTクエリの一般的な例を示します。

例1:顧客テーブルから、姓と名の列を取得する。
SELECT 姓, 名 FROM 顧客テーブル;

例2:注文テーブルから、商品名、注文日、および注文数量の列を取得する。また、注文日が2022年1月1日以降である行のみを取得する。
SELECT 商品名, 注文日, 注文数量
FROM 注文テーブル
WHERE 注文日 >= '2022-01-01';
これらは一般的な例ですが、詳細に応じて、より正確な回答を提供できます。

なるほど!詳細に頼めば良いんだよね!

実践編?単純なテーブルの参照

筆者:fruitテーブルからfruit_idごとのfruit_priceの合計が欲しい。
ChatGPT:fruitテーブルからfruit_idごとのfruit_priceの合計を求めるためには、以下のSQL文を使用することができます。

SELECT fruit_id, SUM(fruit_price) AS total_price
FROM fruit
GROUP BY fruit_id;

このSQL文では、SUM関数を使用して各fruit_idに関連するfruit_priceの合計を計算しています。また、GROUP BY句を使用して、fruit_idごとに行をグループ化しています。ASキーワードを使用して、合計値の列の名前をtotal_priceとして指定しています。

おぉ確かに指示通り書いてくれる!しかも解説まで!親切!!
もう少し注文をつけて試してみよう!

筆者:fruitテーブルからfruit_idごとのfruit_nameとfruit_priceの合計をfruit_nameで降順に並べて欲しい。
ChatGPT:fruitテーブルからfruit_idごとのfruit_nameとfruit_priceの合計を求め、fruit_nameで降順に並べるには、以下のSQL文を使用することができます。

SELECT fruit_id, fruit_name, SUM(fruit_price) AS total_price
FROM fruit
GROUP BY fruit_id, fruit_name
ORDER BY fruit_name DESC;
このSQL文では、SUM関数を使用して各fruit_idに関連するfruit_priceの合計を計算しています。また、GROUP BY句を使用して、fruit_idとfruit_nameごとに行をグループ化しています。ORDER BY句を使用して、fruit_nameを降順に並べます。DESCキーワードを使用して、降順に並べることを指定しています。

おぉ!!いい仕事するじゃないか!自然言語によるSQL生成にも使えそうだ!

応用編?ならば2つのテーブルのjoinだ!

筆者:fruitテーブルとproductsテーブルをproductsテーブルのcodeとfruitテーブルのproduct_idを使ってjoinしてproductsテーブルのcategoryごとにfruitテーブルのレコード数を調べたい。
ChatGPT:fruitテーブルとproductsテーブルを、productsテーブルのcodeとfruitテーブルのproduct_idを使ってJOINし、productsテーブルのcategoryごとにfruitテーブルのレコード数を調べるSQL文は、以下のようになります。

SELECT p.category, COUNT(f.product_id) as num_records
FROM products p
LEFT JOIN fruit f ON p.code = f.product_id
GROUP BY p.category;
このSQL文では、LEFT JOINを使用して、productsテーブルとfruitテーブルをcodeとproduct_idの関係で結合しています。COUNT関数を使用して、各カテゴリに属するfruitテーブルのレコード数を数えます。また、GROUP BY句を使用して、productsテーブルのカテゴリごとに行をグループ化しています。LEFT JOINを使用しているため、fruitテーブルに該当するレコードがなくても、カテゴリごとのレコード数を求めることができます。

おぉ。素晴らしい!きちんと指示を出せば、SQLは普通に書いてくれるんだな。。。と感心する自分。

うまく自然言語を用いて、的確な指示が出来るのであれば、SQLを実際に書くことは少なく出来るかも知れないとまで思った。良い時代だ。。。。

今回は、前回に続き、ChatGPTの活用についてもう少し踏み込んで試してみた。
前回、筆者は締めくくりとして、以下の言葉を言い残していた。

今後、有料化されるとの話もあるが、検索に代わるユースケースとしてアリな気がする。

しかし、これは違うのかもしれない。
検索エンジンには、執筆を依頼することも無ければ、SQLの書き方は調べても、代わりに書いて欲しい。という発想はそもそも存在しなかったからだ。

もしかすると全く新しい使い方になるのかもしれない。
読者のみなさんにも、是非試して欲しい。
頭の固い筆者では、あまりクリエイティブな使い方は出来ていないが、これを読んでいる皆さんなら出来るかも知れない。

この記事が気に入ったらサポートをしてみませんか?