皆さん、AIに指示を出すとき、「これがしたいんだけどこれ作って」など雑な指示をしていないだろうか?
バイブコーディングをしているという人を見るとよくこのような指示をしているケースをよく見る。
しかし、これではダメなのだ。
プロンプトエンジニアリング、という言葉が前に流行ったが、ではなぜプロンプトエンジニアリングをしなければならないのだろうか?
プロンプトエンジニアリングという言葉を使っていつつもここを説明できるだろうか?
私がこの記事で提唱したいのは
AI時代のエンジニアに必要なのは、コードを書く能力だけではなく、「何をAIに決めさせ、何を人間が決めるか」を管理する能力である。
という主張である。
なぜこれではダメなのか
単純に出力の質が下がるからである。
よく「AIはコーディングにおいて人間よりももはや優秀である」だとか「設計ももうできるようになりつつある」だとかの言説を耳にする。
しかし、それは「人間しか知らない情報をAIが適切に把握している」前提に立っている。
AIに雑な指示をすると出力が雑になるのは、AIの能力が足りないからではない。ユーザーが決めなかったことを、AIが決めざるを得なくなるからだ。
私はこれを「思考負荷」と呼んでいる。
GeminiにおけるThinking TokenやchatGPTにおけるreasoning_tokenに類するものではなく、AIが推測して補完しなければならない未決定事項、「変数」が増えてしまうということである。
この思考負荷を減らした上で、それを実装するには具体的にどう書けばいいか、ということのみに集中させるのだ。
設計そのものをAIに相談することが悪いわけではない。設計をAIに任せるのであれば、「AIがそう決めたこと」を自分が認識した上で検討すればよい。
システムを作るということ
今回の本題ではないかもしれないが、システム面での話をしよう。
AIがコーディングをできるからもはや人間は必要ないという言説もある。
本当にそうだろうか?コードを読める人間は本当に必要なくなるであろうか?
逆に問おう、AIに作らせたものを自分で仕様を説明できるだろうか?
メモアプリを作ったとしよう。
ではそのメモアプリはどのようなデータ構造になっているだろうか。
レスポンスタイムは?ユーザー管理はどうしている?誰がどこにアクセスできる?
他の人のメモを見れないという担保をしているだろうか?
ではそのメモアプリを大企業の社員500人に使ってもらったときそのうち何人の同時アクセスまでサーバーは耐えられるだろうか。300人?500人?
メモの削除は本当にサーバーから消しているだろうか?もっとメモの取得は速くできないだろうか?
AI要約の機能を使っている、ならばそのAIの使用形式は?VertexAI?APIキー?だとしたらAPIキーなどの認証情報はどこでどう管理している?
業務としてシステムを作るとはこういうことだ。AIがどれだけ発展したとしてもこの説明責任、障害や事故が起きたときの責任は人間にある。
雑に指示を出してしまうと、これらがブラックボックス化してしまう。
例えばあなたが本来欲しているメモアプリを実装するのに100個の必要な要件があったとしても、10個しか指示しなければ残りの90個はAIが決めなければならない。
そしてAIはもはやその90個を補完して作ってはくれるが、その90個の要件があなたの希望を満たしているとは限らない。
AIの考える理想の要件をすべて詰め込んでYouTubeやAmazon並みの大規模堅牢なシステムを作れたとして、それが50人規模の会社でしか使わない小さな内製化したアプリに必要なインフラやAPI設計だろうか?自分しか使わないようなシステムなどにそれが必要だろうか?その「質のいい」システムはあなたの求めているものと比較して本当に「質のいい」システムとなっているだろうか?
AIエージェントに実装させる段においてAIに決めさせる変数が多いということはそれだけ自分の理想から離れたものができる可能性が高いということである。
AI社会でもリーダブルなコードが求められる
また、AIがコードをいくら生成できるようになったとしても、人間が読みやすいコードは依然として重要である。
読みやすいコードがなぜ求められるのか。
先ほどの説明責任の話もその要因の1つであるが、人間にとって構造が明確なコードは、多くの場合AIにとっても扱いやすいからである。
バグが起きたとき、責任が分離されていないコードだとバグの起きうる箇所が多くなる。
これは「思考負荷」が大きい。
責任の分離が明確なのであれば、
- AIにそのバグの発生原因を列挙させる
- そのバグの原因となるにはどの値が想定外になっているかを考えさせる
- それらを確かめるための異常系のテストコードを作らせて実行させる
- テストがPASSしたらそれをコンテキストとして残し、別の原因を模索させる
といったことがしやすくなる
AIがそれらの機能を簡単に実装できるようになったからといって、それらを堅牢であることを保証することが不要になったわけではない。
むしろ今こそ、「AIにとってのリーダブル」を考える必要があるのだ。