はじめに
ChatGPTというAIチャットが昨年暮れから話題ですね。
なにか質問すると、まるで人間のように的確な受け答えをしてくれる有能なAIです。
最近だとGoogle社内で、ChatGPTの台頭にCodeRedを宣言したという記事も出てましたね。
記事: ChatGPTのリリースでGoogleは「コードレッド」を宣言、AIチャットボットが検索ビジネスにもたらす脅威に対応するためにチームを再割り当て
一方でChatGPTはプログラムコードも書けるということなので、適当に指示を出してどのていど良い感じのコードを書いてくれるのか、Rubyで試してみました。
手始めに簡単なプログラムを
とりあえず簡単なプログラムを書いてみてもらいました。
なんと解説付き。しかも動くぞこいつ。あと「ハローワールド」ってカタカナで入力した指示を英語(Hello World!)に直してくれた。
気が利いてるけど、なんかバカにされた気分。
ユニットテストも書いてもらおう
コーディングするならユニットテストも書くよね。書いてもらおう。
「さっきのプログラム」という、ものすごく雑な要求を出してみたら、ちゃんと意図を汲んでくれた。AI怖い。
実行方法まで教えてくれた...じゃあテストしてみるか。
通ったわ。
阿部寛のホームページのデータを取得して保存するプログラムを作ってもらおう
いや怖いって。「阿部寛の公式サイト」という、ものすごく適当な指示なのにちゃんと汲んでくれた。有能...!!
と思ったら阿部寛の公式サイトのURLが違う。さらっと間違えてる。無能か。
阿部寛の公式サイトURLを正しいもので置き換えたら、ちゃんと動きました。コードは正しい。
生のTCPソケットを使ってもらおう
「生のTCPソケット」とか通じるんか...
例によって阿部寛の公式サイトのURLが間違ってるけど、そこさえ治せば動くはず...!
% ruby abehiroshi2.rb
Traceback (most recent call last):
abehiroshi2.rb:9:in `<main>': undefined method `URI' for main:Object (NoMethodError)
エラーやんけ。URIをrequireしてなくて NoMethodError
。
直してもらうか。
(長くて画像だと荒くなっちゃうので、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が間違ってる...
直せ直せ! やりなおしだ!
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でお天気アプリを作ってもらおう
すごい。もう簡単なアプリならChatGPTさんに雛形作ってもらってそこから必要なところだけ変更とかでいけるんじゃないか。...それは言い過ぎか。
表示を日本語にして欲しいんだが
わかってんなオイ。Viewだけ日本語にしてくれた。まじか。
... ほんとに裏に人がおらんよな?
AIの指示通りOpenWeatherのAPIキーで置き換えて、ブラウザで開いてみるか。
動いた...たしかに今日は曇りがちでした。
まとめ
ChatGPTすごいを通り越して怖いですね。けっこう雑に指示してると思うんですが、ちゃんと意図を汲んで修正してくれます。
あと、ひとつ前で作ったプログラムに対して「〜〜して」って指示すると、ちゃんとひとつ前のプログラムを修正するのすごいな〜って感動しました。人間の感覚的には当たり前かもしれんけど、ここまでの流れをストーリーで認識してるってことですよね?
まだ複雑な要件は無理だと思うけど、こういう感じで過去の指示の内容をストーリーとして認識してくれてたら、自社特有の事情とかシステム構成とかもいずれは理解して、その共有認識をもとに人間がAIに指示を出せば、なんかいい感じのプログラムを作ってくれる未来が来るかもしれないと思いました。
あーおもしろかった!