今更ながら分かってきた気がするAIの話
お恥ずかしながら、今までAIの使い方が自分的に”なってなかった”です。
最近なんとなく分かってきたので、どんな経緯で今に至ったか、思考の整理がてらまとめてみます。
とりあえずぶん投げる期
ワカランってなったらとりあえず投げる。エラーマルコピブンナゲ。これは今もやっちゃってるときあるけども…
わからないことすらわからないのでとりあえず投げる。投げて投げて、言ってることが分かるときもあれば「いやそうではなくないか?」となることも。
そうして疑心暗鬼な自分がAIの回答を精査して「やっぱちがうじゃんか」と結局自力でどうにかしたり。
正しい使い方ってなんだろう、そもそも正しいってなんだ、正しいの定義は何だ
みたいな時期が長く続いてました。
YES/NOの返答をさせる期
WhatからWhich、あるいは正解か不正解か、そんな質問の仕方。
「これってどういうこと?」から「これってこういうこと?」と確認する意識で、AIを先生のように扱う時期。
ただしAIの言ってたことに疑問が生じたら「これってどういうこと?」となったり、あるいは「これってつまりこう?」と再度質問を重ねたり。
AIもYES/NOだけでなく「大体合ってる」「ちょっと違う」とか返してきてた。
やんのかてめー期
AIの言ってることに疑問を生じたとき、それまでは「ってこと?」だったのがここにくると「でもこういうときってこうじゃない?」と議論する姿勢に。
あるいは「それはこういうときにあてはまらないよね」と否定して「だからこうじゃないか」と自分の考えを再度提示。
そうして返ってくる言葉は「おっしゃるとおりです!」
まだ、まだだ、この時点ではまだいい。だがしかし。
AI「AがBでCです」
私「なるほど、ただCはAではないよね?」
AI「いいえ、CはAです。なぜならAがBでCだからです」
私「だから、AはBを経てCだけど、AからCには直接ならないわけだから、CがAであることの証明にはならないよね」
AI「おっしゃるとおりです!」
※内容は適当です
こんな感じで「己の考えを意地でも通すくせに論破されたら手のひら返し」な一面に「ア”ァ”!?」とメンチ切ったり。
なんだろうね、受け入れが早くてよろしいと捉えるべきか、なんなのか。
また、くっそ長いコードを出してきて「ほんまか?」と精査したら1行で済んだときの「やってる感出すために生産性無い無駄な仕事をする人」ってこんな感じなのかなぁとなんとも言えない感情を抱くことも。
AIの上司はもしかして「何行コードを書いたかで評価しよう!」ってタイプか?あまりにも哀れだ。
いいかんじによろ期
既存のコード見ていい感じに書いてくれ。
そんなニュアンスの指示出しをしていた過去の自分にいいたい。
「その指示を出してよいのは成果物に文句を言わない人だ」と。
出されたものに対し「ここはこうしてよ」「ここはこれみてよ」「ここの空気感変わってない?」とあれこれ追加指示。
人間、0から意見をいうより、1という対象物があるときのほうが圧倒的に意見が出るものである。
「右手でピースしてるけど左手のほうにしてほしいな」と線画か色塗り段階で言われたらブチギレ案件であることは容易に理解している。要望は先に言え、せめてラフの段階で言ってくれ。
ドキュメント?プロンプト?がちゃんとしているといいらしいと知った期
それを知ったときの感想
「準備めんどくさくないか…」
「じゃあその”ちゃんとした”プロンプトってどういうもんなんだ...」
情報はいくつも入ってくる。
- リポジトリにdocディレクトリを用意してそんなかに入れるといいらしい
- カスタムインストラクションを用意するといいらしい
- カスタムインストラクションは状況別に用意するといいらしい
- issueにきちんと書くといいらしい
- サンプルコードを用意すると良いらしい
一気に情報が入ってきたときの感想
「めんどくさくないか...」
いいか、めんどくさいから楽にするためにめんどくさいことをするのがエンジニアなんだ。
将来楽になるために、今めんどくさいこと---というと語弊があるか---時間をかけることが最大の近道である。
しかし愚かな私は「じゃあどういうdocを用意すればいいのか」「カスタムインストラクションどうかけばいいのか」と逃げに逃げて、AI時代の中、打鍵音が好きを理由にコーディングしていた。
つまりこういうことか期
あるプロダクトで先輩があるテスト用のカスタムインストラクションを用意した。
Repositoryの単体テストのカスタムインストラクション。中身を見てもフーンと流し見ていた(よくない)
そのプロダクトで機能実装をすることになり、Repositoryも追加し、さて単体テストを書こうとしたそのとき。
「そういえばカスタムインストラクションあったな」
それで試してみた。「このRepositoryテスト書いて」とだけ指示。
出来上がったものは概ね問題なさそう。あれ、このエラーのテストないかも?と思って指示を出すと「そのエラーのテストは無い方針だよ(要約)」と返事が来た。んでカスタムインストラクション見に行ったら、たしかにその指示がかいてあった。
まずその指示があることで、このRepositoryの単体テストは一貫性がでる。あるテストはこれがあるけどあるテストはない、みたいなのがなくなる。
テストデータだけは微調整の必要があったけれど、カスタムインストラクションのお陰でテスト実装は1分も経たずに終わったのである。
なるほど、こういうことか!
実践期
リプレイスしたとあるRailsプロダクトは、リプレイス前からテストがなかった。
そしてそのリプレイスをした私も、テストを書かなかった。愚かだと笑って、いや、嗤ってくれ。
いずれ用意しなければと放置していたそれを、AIにやらせることにした。
まずテスト仕様書の準備。それこそAI使いながら整えていく。
ライブラリを指定したい、お、AIがGemfileのここを参考にしろって書いてくれた、たしかに`group :test`だけ見ればいいな。
model specはバリデーションは網羅してほしい、正常・異常・境界テストって書いてる、そうそうそれそれ。
factory botのルールはAIのままでも良さそう、いや、traitで条件別のが欲しい、追記してもらおう。
分かりやすようにテスト名は日本語にしてくれ、PRのコメントも日本語で頼む、英弱だからよぉ。
ブランチ名は指定したい、PRのタイトルも指定したい、そうそうそんな感じ。
カスタムインストラクションは、全部読ませるとコンテキストが増えてしまうので限定するように、そうそう、model specならそっちの仕様書を読むようにってね。
そんな感じで整えて試してみる。
「このmodels specとfactory bot作って」
その結果、結構いい感じにできた。バリデーションの種類が足りてなかったから仕様に追記して、テストは通るようにしてもらって。
整備して試してみていけた。これまでは手元でやってたけどいざ実践。issueを立ててCopilotをアサインする。
そう時間もかからずに作成されたPRを見て、ああなるほど、これは確かにAIを使わないと行けない時代だと実感。
こんな簡単に、早く、自分が違う作業をしている間にやってくれるのであれば使わないわけがない。
そのプロダクトは小規模なのもあったが2日もかからず単体テストがほぼ終わった。すごい。
次は厄介なrequest specをやらせる予定。仕様書は適宜アップデートだ。中長期向け盆栽やってる気分。
system specもゆくゆくはやりたい気持ち。意外と今月中にこのプロダクトのテスト終わるかもしれない。これが終わったら別のRailsプロダクトに横展開してみよう。そっちはテストある程度あるけど、rpsec以外のテスト系Gem使ってないからテスト追加というよりリファクタリングとかの方になるかもしれない。
当面の展望
私はコーディングが、プログラミングが好きだ。なので正直、まだ自分でやりたい。
とはいえめんどくさいなって思う部分もある。のでそこをまずはAIに全部やらせる。
今時点でAI使ってやれるように整備したいなぁと思ってることは
- エラー検知したら自動でissue立てて改善PRまで出させる
- エラーではない優先度の低い不具合の修正
- ライブラリバージョンアップに伴う影響範囲調査と、破壊的変更の修正
- リソース割いて時間をかけることはできないけどサクッと試してもらうモック作成
- Storybook充実
- 作って放置されてるissue消化(優先度低くて放置状態)
- doc自動生成(CI使って自動更新もさせたい)
あたりかな。
なんかこうなってくると、自分が何をしたいのか、将来的にどうなりたいのか、事業にどうインパクトを出すかを真剣に考えていかないといけないな。
今はまだ目先のことで手一杯だけど、視座をもう一段階あげていきたいぜ。