しょーれー氏の自己紹介

しょーれー氏:では、しょーれー(庄禮有佑氏)から発表します。connpassのページ上ではタイトルを仮にしていたのですが、さすがに仮(のまま)だとまずいので、ChatGPT君と一緒にきちんと考えてきました。僕のテーマは「ChatGPTとペアプロ OpenAI APIで翻訳した内容をDiscordに通知する」というかたちで(発表を)やらせてもらいます。よろしくお願いします。

簡単に自己紹介だけ。私は庄禮有佑といいます。27歳で、社会人になってもう5年が経ってしまいました。このイベントを主催しているラクスで働いていて、今は「楽楽販売」の担当チームにいます。

趣味はゲームやアニメが好きで、最近のブーム的なところでいうと「ELDEN RING」のDLCはまだなのかとずっとモヤモヤしています。あとは、数年ぶりに観たコナンの映画がすっごく良くて、技術の進歩を感じました。

テーマの背景

今回のテーマ(の)背景です。先ほど(のスライドに)ゲームが好きとも書いたのですが、ふだんからけっこうDiscordを多用しています。友だちとやりとりする時はもっぱらDiscordだし、最近だとコミュニティ系、ゲームの情報やエンジニア関係もDiscordでサーバーが立っていたりして、Discordでいろいろな情報を集められるような時代になったなと思います。とはいえDiscordでできないこともあるので、「Discordに集約できるとうれしいのになあ」というところが最初の思いですかね。

とはいえDiscordサーバーがない場合は、「自前で別のところから連携させて通知させるのか。コードを書くの面倒くさいな」とか、海外のサイトだと僕が苦手な英語(で書かれていることに)な(る)ので、「英語を読むの面倒くさいな」「直接読まないにしても、翻訳サイトにいって翻訳しなきゃいけないのはなかなか面倒だな」「手間がかかるけど、そんなモチベーションもなあ」というように、ちょっと板挟みになっていました。

最近、僕もみなさんと一緒にChatGPTで遊んでいて。ChatGPTでけっこういろいろなことができます。

(スライドを示して)ChatGPT自身に「何ができるんだ?」と聞いたところ、こんなふうにいろいろなことができると言ってくれた中に、3番と4番の文章の改善、英語の学習支援があります。

「これ、ChatGPT君にお任せすれば、僕ががんばって翻訳しなくてもやってくれるじゃん」と。プログラミングはみなさんしたことがあるかもしれないですが、サンプルコードを書かせ(るとし)たら、コード(を書くことについて)も、全部が全部じゃないかもしれないものの、考える量を減らせるなというところで、「じゃあ、ChatGPT君と一緒にがんばっていこうか」と考えました。

最終形がどのようなかたちになったか

まずは結果です。最初に話をしたように、最終的にはDiscordに翻訳した内容を通知させたいということで、サンプルとして、Reactというフロントエンドのフレームワークを持ってきています。

(スライドを示して)18.2.0が出てきて、ホニャホニャと英語で書いてあって……。まぁ、なかなか読むのがしんどい。「これをわざわざ自分で見にいきたくはないな」と仮定して考えました。

最終的にはDiscordにこんなふうに通知させています。「最新のリリースがありました」ということで、下に日本語になった内容を通知させるかたちになります。

5つの使用ツールの紹介

最終形がわかったところで、では、今回どんなことをしたかを紹介します。使用ツールの紹介からすると、登場人物は以下5名です。ChatGPT、Google Apps Script(GAS)、GitHub API、OpenAI APIと、DiscordのWebhookという5つのツールを使っています。

ではまずChatGPT君です。(スライドを示して)概要、これはChatGPT君に作らせているのですが、OpenAIが作った言語モデルによってテキストベースの会話で人間と対話し、自然な会話をしてくれるようなAIになっています。使っている理由はタイトルにもあったとおり、ペアプロ(ペアプログラミング)で僕の代わりにコードのたたき台を作ってもらう役割を担ってもらうためです。

次はGoogle Apps Scriptです。こちらもChatGPTに書かせているのですが、Google上の環境で動かして、いろいろなことができるようなものです。用途としては各種APIのコールや、あとはcron的な感じで定期実行に使っています。本当はほかのサーバーなどにきちんと置いたほうがいいのでしょうが、今回はお試しということで、特に実行環境などをあまり考えなくて済むように、GASで動かしています。

GitHub APIです。GitHubの情報を取ってくるのに使っています。ほかのところから取ってきた時は、ただ単にそれに置き換えれば……。(もちろん)レスポンスなどは少し書き換えないといけませんが、いい感じに動かせるだろうというところです。

本題のOpenAIのAPIは、ChatGPTのベースというか元となった部分で、いろいろな操作ができるAPIです。これに先ほどGitHub APIで取ってきたリリース情報を要約させています。

そしてDiscord Webhookについては、もう(発表の)時間をけっこう使ってしまっているので、「最後にWebhookで通知している」ぐらいで割愛します。

流れはこんな感じです。GASでGitHub APIから情報を取ってきて、OpenAI APIに翻訳させて、Discordに通知して、僕がDiscordの画面で見るということをやっています。

実践の流れ

スクリプトを説明します。進め方としては、ChatGPTに「これ、どうやって作ったらいい?」と聞いて、一応リファレンスを確認して、最後に問題がないかをチェックして、必要に応じて適宜修正し、最終的にGASでそのまま動かしています。

まず「GitHubのリリース情報を取ってくるにはどうしたらいいですか?」とChatGPTに聞きました。すると「こんなURLにアクセスすると情報が取れるぜ」と教えてくれるので、「ふむふむ、それっぽい感じで動きそうだ」というところで、「じゃあ、一応ちょっとリファレンスサイトを見てみるか」と、そのリファレンスサイトすらもChatGPT君に「どこにあるの?」と教えてもらって見にいっています。

リファレンスの中身はここでは詳しく説明しませんが、ザッと読んだ感じはこのままで良さそうでした。パラメータなど一部いらないものがあるので、適宜修正してこのまま採用することにしています。

(スライドを示して)最終形はこんな感じですね。もうほぼ同じ感じで、少しスリムにだけしていますが、同じURLにただ投げているだけです。

これは余談ですが、1日ごとに(このシステムを)動かすようにしているので、1日前かどうかだけ判定するためのロジックを入れています。ただのロジックなので(説明は)飛ばします。

次がOpenAIに翻訳をしてもらおうというところで、引き続きChatGPT君に呼び出すための処理を書いてもらいます。「OpenAI APIで翻訳したいです」という命令を投げて。(そうすると)こちらもそれっぽいHTTPリクエストのコマンドが返ってくるので、同じくリファレンスを見ます。

こちらはOpenAI APIの進歩というか動きが速くて、ザッと読んだ感じだと、(答えには)betaと書いてあるのですが、今だとChat CompletionsというChatGPTライクなAPIが新しくできていて、「あれ、こっちのほうがシンプルに使い勝手が良さそうだな」というところで、そこを書き換えるかたちにしています。

とはいえ、先ほど教えてもらったかたちにほぼ沿っていて、URLとパラメータだけ少し書き換えて送るようにしています。

じゃあ、最後もChatGPT君にやってもらいましょう。僕は一切コードを書かないで、「DiscordをWebhookにメッセージするためのコードを教えてください」と書いて教えてもらいました。これもほぼそのまま採用するようなかたちで、メッセージなど本当に必要な部分だけ変えてそのまま使っています。

(あとは)それを順番に呼び出していけばメイン関数ができるので, やってあげます。

そうすると、最初に見せたようなかたちで、「こんなリリースの情報がある」と定期実行で動かして、最終的にDiscordに「最新のリリースがありました」と日本語で表示できます。

僕は一切コードも書かず、明示的に翻訳しにいったりリリースのほうを見にいかずとも、Discordの通知を見るだけですべてが完結するというかたちにしています。

ChatGPTは要約や英語翻訳が優秀

終わりに、僕の所感を3つ並べています。

要望(で)、コードを書くのが面倒くさいというところでいうと、好み以外の重要な部分はほとんどそのまま使用できました。これぐらいの簡単なコードだと、たたき台を出してもらう前提でしたほうが早いのだろうと思います。

とはいえ、リファレンスを見ているとか、それ以外の情報も自分である程度調べないと(いけない)。個人的にもOpenAIのところで「こっちよりもこっちがいいな」ということもあったので、やはりある程度自分で調べるのは必要だろうなと感じました。

次に、英語翻訳が面倒くさいというところでいうと、ChatGPTをブラウザで使っていた時から思っていたのですが、やはり翻訳や要約はすごく優秀です。個人的にはプログラムを書いてくれるよりも、こっちのほうがよっぽど日常で使っていてうれしいポイントになります。これがあったから、今回の「英語の翻訳をしてみようかな」というふう(なアイデア)につながっています。

最後は感想です。今回はOpen AIを使ってみたかったからというところと、こんなテーマがあったので合わせてみたのですが、想像以上に使うのは簡単で、投げかけるだけなら本当にパパッとできます。

今回はしなかったのですが、ほかにも画像生成のAPIなど、会話するだけじゃないAPIもいろいろあるので、そういうものも早めに触っておいて、キャッチアップしていきたいと思っています。

最後に(スライドに)参考サイトだけ載せました。こういうものに興味のある方がいたら、参考にしてもらえると幸いです。

僕からの発表はこれで終わりです。ありがとうございました。