はじめに
最近は、「AIを使ったコーディング」というよりも、「コーディング = AIと一緒に作業するもの」となったと感じています。(今更)
巷では、「AIに一言指令を出しただけで作ってくれました!」みたいな、AI全て解決してくれそうな記事であるとか、たまに見かけますし、実際すごい速度で作り上げてくれます。
ただ、実際にAIを利用していると、
- コードを出してもらってみたが、そうじゃないんだよな、、、と思いやり直してもらう
- → 何度か繰り返すが、うまくいかず結局最初から自分でやり直す
- 結局、生産性が上がったのか割と怪しい
みたいな、あんまりうまく付き合えなかったな、という経験をしたという方もいるのではないでしょうか。
僕はそうです。笑
その中で、今よりも少しだけうまく付き合えるかも、という方法を、「AIとコーディングするときのマインド」という視点でまとめました。
テクニックは別途書こうかなと思います。
普通のことかもですが、せっかくなので!
AIとうまく付き合うためのマインド
①AI = 銀の弾丸ではない!
システム開発は、銀の弾丸というものがありません。「より良いコーディング手法・原則」などはありますが、「これが至高だ!」「これで全て解決する!」という手法・フレームワークなどはありません。同じ目標でもアプローチが違う、なんてこともよくあります。
AIも同じで、AIが全てを理解し、なんとなくの指示で解決してくれるわけではないです。
むしろ、指令を出す側におけるタスク・システムへの解像度がAIの出してくれるコード内容に直結していると感じます。
AIは確かに作業効率を上げてくれますが、それが全てを解決してくれると錯覚してしまうと、なんだか微妙なもの / やりたかったこととは違うものが作られてしまうと思っています。
②AIが正しいという幻想は捨てる
AIは、僕らの知識よりもはるかに多くの情報を持っており、自分の知らないメソッド・方法などを提案してくれることがあります。
その際、「AIが言ってるし、動いているからあっているんだろうな」と思ってしまうこともあるのではないでしょうか。
ただ、これは経験上失敗へ向かいがちです。AIはプロジェクト内容を把握しているわけではないので、やりたいこととは違うものが出てきていたり、該当箇所で不具合が起きた場合、AIに頼らざるを得ず、それが積み重なり何をしているか把握できないという状況に陥ります。
もちろん、AIの提案が良いこともありますし、それで自分の引き出しが増えることもたくさんあります。
しかし、AIだからといって全て正解とは限りません。
そこは、こちらが責任を持ってあげるんだ!という姿勢が良いと思っています。
③どこが楽になるか?を見極める
先述の通り、現状はまだAIが全ての工程を自動化してくれるわけではなさそうです。
では、何ならAIは力を発揮してくれるのでしょうか。
個人的には、以下二つは特に得意だなと思っています。
1. 実際にコードを書く工程
システム開発は、システムとしての設計やコードの設計、ディレクトリ設計など、コードを書く以外の工程があって、そこから初めてコードに落とし込みます。
(プロトタイプや技術検証はまた違うこともあると思いますが、その辺りはよしなに。笑)
そして、AIが得意なのはコードに落とし込む部分です。
どういうことがやりたい、そのために各機能はどこでクラスを作り、、とかまで具体的に、解像度が高いほど良いと思います。
その前提を踏まえて、全てをよしなにやってくれ!という形でAIに依頼するのではなく、ちゃんとやりたいこと・方針・想定などは伝えた上で、コードを書く時間はマルっとAIに頼んじゃいましょう。
2. 設計で、理解を深める工程
「設計」という言葉がいろいろなことを含みすぎているので、少しだけ具体性をあげて考えます。
例えば、ユーザーの一覧画面でソート順を選べるようにしたい、という要件があったとします。
その際は、以下のような工程に分けられるかもしれません。
- frontend
- formValueにプロパティを足す
- formのエリアに、追加したプロパティ用のコンポーネントを追加する
- → プルダウン? or ソートの種類が少なければラジオボタン?
- (テストがあれば)submitで追加した値がformValueに含まれるかの確認テスト
- api
- ユーザー一覧のエンドポイントで受け取るパラメータを増やす
- ソート順のパラメータがある場合は、データ取得時の条件に追加
- なければデフォルトの条件を利用
- ソート順ごとの戻り値テスト など
ここで、「api側って、現状どうやってパラメータ処理しているのだろう」とか、「frontendのformValueってどう管理されている?」みたいな不明点もあがってくるかもしれません。
そういう時に、AIにどんどん聞いていきます。
AIは優秀で、大きなファイルでも全体を見て、どこで何をしているか抽出してくれます。※そんなに大きいファイルにするな!という指摘は置いておき、、、
そのような形で、実装したいこと、やりたいことの解像度をあげていくのが良いのではと思います。
そして、そこでの理解・設計を踏まえてAIにお願い!とすると、想定とのずれが少なく、利用できるコードが出てきやすくなると思います。
④ラクを求めすぎない
AIはとても便利です。今までは自分がPCに向かっていなければいけなかった時間が、お願いすれば自動で進めてくれるようになりました。
しかし、先述の通り全てを理解し、全てを解決するにはまだ至っていないと感じます。
そのため、コードを書く前の段階で、理解や設計が面倒と感じ怠ると、「なんか違う、、、」「そこまで求めてないのに、、、」と、齟齬が生まれる原因となります。
人にタスクを振る際は、割と丁寧に内容記載しているのに、AI相手だと簡単なプロンプトでも作業自体はしてくれるため、そこに頼りたくもなってしまうものです。
ただ、最初に頑張って設計する・わからなければ理解することをしておかないと、いつまでもなんか微妙なコードが出てきてしまうと思います。あくまで実装想定があってこそのAI、くらいが現在はちょうどいいのではないでしょうか。
(しかも、そこを考えるのがエンジニアとしての醍醐味だったりしないでしょうか!よくわからないけど多分、、、)
最後に
今回は、AIとコーディングをうまくやっていくためのマインドという観点での記事でした。
AIは確かに便利だけど、なんかうまくいかないと感じている方は、AIの捉え方・考え方をすこし変えてみると改善することもあるのではと思っています。
特に、個人開発で最初から基本的にAIで書いてもらう場合などは除き、「そのシステムで何をしたいか」「どのような変更をしたいか・すればいいのか」を決めるのは、現状AIではなくあなたです。
AIに頼めばなんとかしてくれる!と思ってしまうと、出てくるコードに不満がでたり、なんかそうじゃないんだけど、、、となることが増えてしまうと思います。
しかし、非常に強力なツールであることは間違いありません。うまく利用できれば、日々の業務の効率・楽しさをアップしてくれるはずです!
(全て掻っ攫って仕事すら無くなるとなればあれですが、、)
少しでも参考になれば幸いです!良きVibeCodingライフを!
株式会社シンシア
株式会社xincereでは、実務未経験のエンジニアの方や学生エンジニアインターンを採用し一緒に働いています。
※ シンシアにおける働き方の様子はこちら
シンシアでは、年間100人程度の実務未経験の方が応募し技術面接を受けます。
その経験を通し、実務未経験者の方にぜひ身につけて欲しい技術力(文法)をここでは紹介していきます。