LoginSignup
6

More than 1 year has passed since last update.

ChatGPTに適当に指示してRubyプログラムを書いてもらう

Last updated at Posted at 2023-01-19

はじめに

ChatGPTというAIチャットが昨年暮れから話題ですね。
なにか質問すると、まるで人間のように的確な受け答えをしてくれる有能なAIです。

最近だとGoogle社内で、ChatGPTの台頭にCodeRedを宣言したという記事も出てましたね。

記事: ChatGPTのリリースでGoogleは「コードレッド」を宣言、AIチャットボットが検索ビジネスにもたらす脅威に対応するためにチームを再割り当て

一方でChatGPTはプログラムコードも書けるということなので、適当に指示を出してどのていど良い感じのコードを書いてくれるのか、Rubyで試してみました。

手始めに簡単なプログラムを

とりあえず簡単なプログラムを書いてみてもらいました。

スクリーンショット 2023-01-19 10.16.28.png

なんと解説付き。しかも動くぞこいつ。あと「ハローワールド」ってカタカナで入力した指示を英語(Hello World!)に直してくれた。
気が利いてるけど、なんかバカにされた気分。

ユニットテストも書いてもらおう

コーディングするならユニットテストも書くよね。書いてもらおう。

スクリーンショット 2023-01-19 10.17.13.png

「さっきのプログラム」という、ものすごく雑な要求を出してみたら、ちゃんと意図を汲んでくれた。AI怖い。

スクリーンショット 2023-01-19 10.17.24.png

実行方法まで教えてくれた...じゃあテストしてみるか。
スクリーンショット 2023-01-19 13.49.53.png
通ったわ。

阿部寛のホームページのデータを取得して保存するプログラムを作ってもらおう

スクリーンショット 2023-01-19 11.12.59.png

いや怖いって。「阿部寛の公式サイト」という、ものすごく適当な指示なのにちゃんと汲んでくれた。有能...!!
と思ったら阿部寛の公式サイトのURLが違う。さらっと間違えてる。無能か。

阿部寛の公式サイトURLを正しいもので置き換えたら、ちゃんと動きました。コードは正しい。

生のTCPソケットを使ってもらおう

スクリーンショット 2023-01-19 11.22.19.png

「生のTCPソケット」とか通じるんか...

スクリーンショット 2023-01-19 11.23.25.png

例によって阿部寛の公式サイトのURLが間違ってるけど、そこさえ治せば動くはず...!

% ruby abehiroshi2.rb 
Traceback (most recent call last):
abehiroshi2.rb:9:in `<main>': undefined method `URI' for main:Object (NoMethodError)

エラーやんけ。URIをrequireしてなくて NoMethodError
直してもらうか。

例によって、あえて雑に指示。
スクリーンショット 2023-01-19 11.29.42.png

(長くて画像だと荒くなっちゃうので、ChatGPTの出力をそのまま貼る)

require 'socket'
require 'uri'

url = "https://abehiroshi.com" # URL間違い(筆者追加コメント)

# URLからホスト名とポート番号を取得
uri = URI(url)
host = uri.host
port = uri.port || 80

# TCPソケットを作成し、サーバーに接続
socket = TCPSocket.new(host, port)

# HTTPリクエストを送信
socket.puts "GET #{uri.request_uri} HTTP/1.1"
socket.puts "Host: #{host}"
socket.puts "Connection: close"
socket.puts ""

# HTTPレスポンスを受信
response = ""
while (line = socket.gets)
  response += line
end

# TCPソケットを閉じる
socket.close

# レスポンスからHTMLを取得
html = response.split("\r\n\r\n", 2)[1]

# HTMLをファイルに保存
File.open("abehiroshi.html", "w") do |file|
  file.write(html)
end

裏に人でもおるんとちゃうか。

ただ、例によって阿部寛のURLが間違ってる...
直せ直せ! やりなおしだ!
スクリーンショット 2023-01-19 11.54.56.png

require 'socket'
require 'uri'

url = "http://abehiroshi.la.coocan.jp/"

# URLからホスト名とポート番号を取得
uri = URI(url)
host = uri.host
port = uri.port || 80

# TCPソケットを作成し、サーバーに接続
socket = TCPSocket.new(host, port)

# HTTPリクエストを送信
socket.puts "GET #{uri.request_uri} HTTP/1.1"
socket.puts "Host: #{host}"
socket.puts "Connection: close"
socket.puts ""

# HTTPレスポンスを受信
response = ""
while (line = socket.gets)
  response += line
end

# TCPソケットを閉じる
socket.close

# レスポンスからHTMLを取得
html = response.split("\r\n\r\n", 2)[1]

# HTMLをファイルに保存
File.open("abehiroshi.html", "w") do |file|
  file.write(html)
end

丁寧な謝罪からの正しいコード! 有能...!
HTTPプロトコルの Connection: close もちゃんとつけて、ちゃんとソケットが閉じるようにしてくれてるところが嬉しい。

Railsでお天気アプリを作ってもらおう

スクリーンショット 2023-01-19 14.24.19.png

ちゃちゃっと書いてもらおうじゃないの。
スクリーンショット 2023-01-19 13.05.12.png
スクリーンショット 2023-01-19 13.05.55.png
スクリーンショット 2023-01-19 13.07.16.png
スクリーンショット 2023-01-19 13.28.35.png

すごい。もう簡単なアプリならChatGPTさんに雛形作ってもらってそこから必要なところだけ変更とかでいけるんじゃないか。...それは言い過ぎか。

表示を日本語にして欲しいんだが

スクリーンショット 2023-01-19 13.10.00.png
(途中は同じ)
スクリーンショット 2023-01-19 13.10.42.png

わかってんなオイ。Viewだけ日本語にしてくれた。まじか。

... ほんとに裏に人がおらんよな?

AIの指示通りOpenWeatherのAPIキーで置き換えて、ブラウザで開いてみるか。
スクリーンショット 2023-01-19 13.40.47.png

動いた...たしかに今日は曇りがちでした。

まとめ

ChatGPTすごいを通り越して怖いですね。けっこう雑に指示してると思うんですが、ちゃんと意図を汲んで修正してくれます。

あと、ひとつ前で作ったプログラムに対して「〜〜して」って指示すると、ちゃんとひとつ前のプログラムを修正するのすごいな〜って感動しました。人間の感覚的には当たり前かもしれんけど、ここまでの流れをストーリーで認識してるってことですよね?

まだ複雑な要件は無理だと思うけど、こういう感じで過去の指示の内容をストーリーとして認識してくれてたら、自社特有の事情とかシステム構成とかもいずれは理解して、その共有認識をもとに人間がAIに指示を出せば、なんかいい感じのプログラムを作ってくれる未来が来るかもしれないと思いました。

あーおもしろかった!

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
6