「AIがあればちょっと便利になるんでしょ?」
そんなことを思いながら使い始めたが、どうも気づいたら
「AIがないとプログラミングができない」
状況になってしまった。
どういうことか、僕の体験を書いてみたいと思う。
僕のバックグラウンド
インフラ&セキュリティエンジニアとしてお仕事をしていて、主に研究開発の仕事です。
だからガチで商用のプログラミングをしているわけではないです。
研究向けに手動でできないようなルーチンや時間がかかる作業をpythonで自動化するくらいのライトな使い方をしています。
Github Copilotの便利さ
chatGPTとも大差ないんでしょ?と思っていたが、VSCodeに組み込むことで、劇的にAIの力を引き出すことができた。
- ソースコードを内で予測変換してくれる
Linuxでいうとコマンドのタブ補完に近いのだが、そのタブ補完の上位互換のような機能である。つまり、僕が作ろうとする関数名を「def readCSV2List」みたいに記述すると、その名の通り「CSVを読み取ってリスト化する関数の中身」をそのまま提案してくれて、Tabを押すと、それで実装が終わってしまう。なんて楽なんだ。
つまり「分かりやすい関数名」を付けることがとても大事になる。
- プロンプトに沿ってコーディングしてもらう
これはchatGPTなどとも同様の機能である。ただGithub Copilotの強みは、VSCodeの編集中ソースコードを踏まえた上で、実装したいコードを提案してくれるので、日本語が多少荒くても、割と実装したいものを書いてくれる印象がある。
chatGPTなど、独立したAIだと、わりと細かい部分まで正確に日本語で表現しきらないと、ちょっと方向性が違うコードを出力したりするので、今書いているコードの延長で追加したい内容があるとCopilotは便利である。
AIが予測補完してくれるから記憶できなくなる
プログラミング言語により、記法が若干異なる。
なので、数週間くらいのブランクでも「pythonの関数定義はdefだっけ、functionだっけ」みたいな基本的な書き方ですら忘れる。
でもAIに提案させるとそんな細かいものを覚える必要がなくなるのだ。
逆に言えば記憶できなくなるので、AIに依存せざるを得なくなる。
良いのか悪いのか?
人間は要件定義に集中できるようになる
結局、プロンプトでそれなりに要件を伝えることができればコーディングできてしまうということなので、プロンプトエンジニアリングが大事になる。いかに正確にAIに伝えることができるか?
そういう意味からすると、要件定義が具体的にできるかがポイントになる。
そう時代は、上流工程の経験が生かされる時代になってきたのだ。
もちろん、ベンダ発注だけに頼っていた上流工程では使い物にならない。そうではなくて、下流工程を見据えた要件・基本設計を言語化してきた人たちが、一人で開発できてしまう時代が来ているような気がする。
まさかプログラミングがただの作業になる日がくるなんてね。
要件定義の一例
この間、AWSのCloudFrontやRoute53を自動で構築するスクリプトを書くときに使ったプロンプトのイメージである。
・pythonでAWSのリソースを自動構築するコードを書きたい。以下の条件を満たすプログラムを提案してください。
- 入力したカスタムドメインをRoute53に登録する
- 登録したレコードのDNS認証を行う
- CloudFrontを新規に構築し、サーバログをS3バケットXXに保存し、上記で設定したカスタムドメインでアクセスできるようにする
- CloudFrontには新規に構築したWAFを設定する
- 構築の正常性確認のため、curlで上記カスタムドメインにアクセスし、特定の文字列XXXが返ってきた場合はOK、それ以外の場合はNGとして表示する
もちろんこれだけでは細かい部分が正しくない(想定通りでない)ので、修正が必要になってくる。ただAWSのドキュメントを調べて、一つずつ実装するよりははるかに早く、この程度であれば半日~1日もあればできてしまう。(AIを使わないと1週間くらいが見込まれる)
なお、ハルシネーションにより、嘘をつかれてハマることもある。よくあると思う。ただ、ハルシネーションのデメリットよりは、何度か質問すれば(場合によっては質問の仕方を変える必要はあるが)答えが返ってくるので、AIを使わない理由はないと思うんですよね。
まとめ
- AIを使うと圧倒的に早くコーディングができる
- そのためにはプロンプトエンジニアリングが重要
- 正しくプロンプトエンジニアリングするためには要件の具体化がとても大事(上流工程の大事さ)
- 一方で多用すると覚えられずいつもAI頼みになる(文法が思い出せなくなる)
コメント