ちょっと出遅れてしまった感じはしますが、これはあくまでも筆者の雑談のようなものです。
こんな考えや意見もあるんかーくらいに思ってくだされば幸いです。
ということで早速本題。
私も色々なエンジニアの例にもれず、ChatGPTで遊んでみることにしてみました。
AIやLLMについてはほぼ無知です。
いち利用者として、どうやってAIと付き合っていければよいか?というヒントを探すために触った感じです。そこで触ってみたところ色々得られるものがあったので書き残しておく。
こんな考えや意見もあるんかーくらいに思ってくだされば幸いです。
ということで早速本題。
私も色々なエンジニアの例にもれず、ChatGPTで遊んでみることにしてみました。
AIやLLMについてはほぼ無知です。
いち利用者として、どうやってAIと付き合っていければよいか?というヒントを探すために触った感じです。そこで触ってみたところ色々得られるものがあったので書き残しておく。
どんなものを作ったの?
作ったと言っても世に公開したりはあまりしてなくて、検証用の実証実証がほとんどです。
マイクロサービス色々プロトタイピング
1. AWS Lambda + SQS + SESでメールを送信する
2. AWS Lambda + SQS + SNSでプッシュ通知を送信する
3. AWS Lambda + DynamoDBで作るデータ集計の仕組み
Rubyで実装してもらいましたが特に問題なくプロトタイプできたかなぁと言う印象でした。
ActiveModelを利用したWebApiクライアントのプロトタイプ
今後人間がブラッシュアップしたものを公開し、ライブラリとして公開する予定です。
LineログインをRuby on Railsでする方法の検証
1. AWS Lambda + SQS + SESでメールを送信する
2. AWS Lambda + SQS + SNSでプッシュ通知を送信する
3. AWS Lambda + DynamoDBで作るデータ集計の仕組み
Rubyで実装してもらいましたが特に問題なくプロトタイプできたかなぁと言う印象でした。
ActiveModelを利用したWebApiクライアントのプロトタイプ
今後人間がブラッシュアップしたものを公開し、ライブラリとして公開する予定です。
LineログインをRuby on Railsでする方法の検証
簡単なプログラミングならできる
「簡単なプログラミング」だったら特に問題なく実装できるという結論です。
ここで指している「簡単なプログラミング」というのはこの条件です。
1. 要件や仕様がはっきりしていてシンプルであること
技術要件は「インターフェースがはっきりしている」「利用するミドルウエアがはっきりしている」などです。あと要件についても「なにを作りたいのか?」という指示が大体3行程度で完了するようなものでしょうか。
2. コードを書いてもらう事情についてAIに伝える前提条件が少ないこと
少なければ少ないほどシンプルなのでよいです。
モノリスアプリケーション
モノリスだと複雑な前提条件や仕様であったり、
依存するクラスなどをAIに教えてあげる必要があるので「現状はあまり向かない」と考えています。
そのうちモノリスアプリケーションに対しての文脈も伝えさえすれば難なく理解する時代もやってくると思うので、時間の問題だと思いますが。
マイクロサービス
一方マイクロサービスについては例えば「キューイングされたジョブキューから情報を取得してメールを送信する」というかなり単純なもので処理であれば技術仕様も固まっていますし、
どういったミドルウェアかアーキテクチャで実装するかを人間が決めれば進められるので、プログラミング作業の70%を代行可能であると考えています。
なので、マイクロサービスの運用やデプロイ戦略であったりにエンジニアが集中できるので、よりマイクロサービスの導入が進むのではないかと考えています。
テストコード
テストコードについてはモックの利用の仕方であったりがちょっと微妙だったりして、自力で完璧にテストを通過させるのは難しい場合もあるのですが、それ以外はしっかり基本的なテストは抑えられると考えています。
人間が間違いを指摘してあげたり、この書き方をしてほしい。この観点でテストを追加してほしい。
ということをしてあげるか、AIの生成した実装やテストコードを修正すれば、それなりには出来上がってしまいます。
要は「比較的経験は浅いが、タイプミスがないジュニアエンジニア」が自分の変わりにプログラミングしてくれるようなもので、AIの評価者である人間が成果物のチェック、評価をしっかりできれば人間が全部書くよりかなり効率的に仕事を進めることができるのではないかと考えています。
試しにサンプルコードを作ってもらう
機能の作り方やライブラリの使い方がわからないときに、とりあえず使い方やサンプルコードを書いてもらうのが便利だと思いました。
例えば「Ruby on RailsでLineログインで連携を行い、連携したユーザーに対してLineのメッセージを投稿できるようにしてください」と伝えたところ、
LineのOAuth認証だけでなくAPIキーの設定方法を教えてくれ、メッセージの投稿まで難なく完了できました。このままプロダクションのコードに使えそうですが、使わなくても実装のイメージが湧くのでとても良いものでした。
2021年以降に発足したような新しい技術や概念を使う場合にはあまり向かない
例えば、世の中には昔からたくさんライブ配信サービスがあるので、ChatGPTはノウハウをある程度知っているはずですで、「自分が利用しているサービスの〇〇機能を作ってみたい、仕組みを知りたい」みたいなものには答えられそうですが、新しい技術および概念の発見についてはまだ難しいと思いました。
ここで指している「簡単なプログラミング」というのはこの条件です。
1. 要件や仕様がはっきりしていてシンプルであること
技術要件は「インターフェースがはっきりしている」「利用するミドルウエアがはっきりしている」などです。あと要件についても「なにを作りたいのか?」という指示が大体3行程度で完了するようなものでしょうか。
2. コードを書いてもらう事情についてAIに伝える前提条件が少ないこと
少なければ少ないほどシンプルなのでよいです。
モノリスアプリケーション
モノリスだと複雑な前提条件や仕様であったり、
依存するクラスなどをAIに教えてあげる必要があるので「現状はあまり向かない」と考えています。
そのうちモノリスアプリケーションに対しての文脈も伝えさえすれば難なく理解する時代もやってくると思うので、時間の問題だと思いますが。
マイクロサービス
一方マイクロサービスについては例えば「キューイングされたジョブキューから情報を取得してメールを送信する」というかなり単純なもので処理であれば技術仕様も固まっていますし、
どういったミドルウェアかアーキテクチャで実装するかを人間が決めれば進められるので、プログラミング作業の70%を代行可能であると考えています。
なので、マイクロサービスの運用やデプロイ戦略であったりにエンジニアが集中できるので、よりマイクロサービスの導入が進むのではないかと考えています。
テストコード
テストコードについてはモックの利用の仕方であったりがちょっと微妙だったりして、自力で完璧にテストを通過させるのは難しい場合もあるのですが、それ以外はしっかり基本的なテストは抑えられると考えています。
人間が間違いを指摘してあげたり、この書き方をしてほしい。この観点でテストを追加してほしい。
ということをしてあげるか、AIの生成した実装やテストコードを修正すれば、それなりには出来上がってしまいます。
要は「比較的経験は浅いが、タイプミスがないジュニアエンジニア」が自分の変わりにプログラミングしてくれるようなもので、AIの評価者である人間が成果物のチェック、評価をしっかりできれば人間が全部書くよりかなり効率的に仕事を進めることができるのではないかと考えています。
試しにサンプルコードを作ってもらう
機能の作り方やライブラリの使い方がわからないときに、とりあえず使い方やサンプルコードを書いてもらうのが便利だと思いました。
例えば「Ruby on RailsでLineログインで連携を行い、連携したユーザーに対してLineのメッセージを投稿できるようにしてください」と伝えたところ、
LineのOAuth認証だけでなくAPIキーの設定方法を教えてくれ、メッセージの投稿まで難なく完了できました。このままプロダクションのコードに使えそうですが、使わなくても実装のイメージが湧くのでとても良いものでした。
2021年以降に発足したような新しい技術や概念を使う場合にはあまり向かない
例えば、世の中には昔からたくさんライブ配信サービスがあるので、ChatGPTはノウハウをある程度知っているはずですで、「自分が利用しているサービスの〇〇機能を作ってみたい、仕組みを知りたい」みたいなものには答えられそうですが、新しい技術および概念の発見についてはまだ難しいと思いました。
プログラミングする楽しみ奪われた?
エンジニアではない人にちらほら聞かれるのですが、意外とそんなことなくて、
むしろ自分が一番めんどくさいなぁと思っている取り掛かりのところをやってくれるので大変楽になりました。
新しい機能を作るときに、プログラミングコードを実装して、検証しておきたいことやとりあえず方法を編み出すための実証実験みたいなのものについては、要件も簡単なことが多いので、作りたいものをChatGPTに思い付いたら伝えておくのが週末の恒例になってて、そういう意味では色々試したいことや検証が捗っている感触があります。
むしろ自分が一番めんどくさいなぁと思っている取り掛かりのところをやってくれるので大変楽になりました。
新しい機能を作るときに、プログラミングコードを実装して、検証しておきたいことやとりあえず方法を編み出すための実証実験みたいなのものについては、要件も簡単なことが多いので、作りたいものをChatGPTに思い付いたら伝えておくのが週末の恒例になってて、そういう意味では色々試したいことや検証が捗っている感触があります。
まとめ
- ChatGPT4は「少し経験を積んだジュニアエンジニア」である。なので、技術要件などをしっかり伝えればそつなく実装できる。
- 楽しみを奪われたとかは思ってなくて、むしろ面倒なことを取り掛かってくれる便利な存在。以前よりもプライベートプログラミングのモチベーションが上がっている。