Vibe Coding をしてみた背景
ちゃんと触ったことないので、触ってみたいなという気持ちになったのがきっかけです。
以前 GitHub Copilot Edit を使って TypeScript を書いたことがあって、 簡単なアプリケーションであれば、動くものを作ることが可能なことは分かっていました(結構衝撃的でしたけど)。 ただ、自分は TypeScript 初心者なこともあり、Copilot が書くコードの良し悪しは分かりませんでした。
そこで今回は自分が得意とするGo言語でバックエンドサーバを実装してみました。 実装対象としてはFacebookのようなブログサービスをイメージしていたのですが、 時間の都合もあり、一般的な ID/Password による会員登録、ログイン機能くらいしか実装できませんでした。
Copilotをどのように使ったか?
今回は "可能な限り Copilot に書かせる" という方針で進めようと思ったので、自分でコードを書くことはなかった。 すべて Copilot に書いてもらう。
Copilotへの指示の出し方としては、ざっくり以下に分類できる。
- 実装系
- 質問系
- 問題点を探す系
実装系
実装系は "xxxを実装して" という指示である。
最初は "xxx.goにUserという構造体を作って。プロパティは id, email, hashed_password にして" みたいな感じで実装するものを具体的に指定していた。 しかし、このような具体的な指示だと文章を考えて書くのが面倒なので「自分で書いた方が早くね?」という気持ちになった。
次第に雑に指示してもそれっぽい実装が出てくることが分かったので、 最終的には "クライアントからログイン情報を受取ってセッションIDを発行する handler を作って。受け取る値は email, plain password です" とか "Userに対するリポジトリを作って" とか そーゆー指示が増えていった。
実装だけでなくリファクタリングやユニットテストの実装もやってもらったが、 どれも上手くやってくれた。
質問系
たまーーーーに Copilot の実装上で自分が知らない書き方があったりするので、 それに対して質問をした。 ちゃんと回答してくれるし、具体的なユースケースとかも質問できるので、結構便利だった。
問題点を探す系
これは「既存の実装の問題点を箇条書きで教えて」みたいな指示である。
これが結構すごくて、20個以上の問題点がブワーーーっと出てきた。 どれも妥当性のあるものだったので「これはすごいな」と思った。
上記のような雑な指示でもいいが「コンテナ環境にデプロイすることを想定した場合、問題になる実装を教えて」みたいにコンテキストを限定すると、 それに沿った問題点が出てきた。 例えば「 graceful shutdown を実装しましょう」とか「環境変数を導入しましょう」とか。
感想
ここから実際に Vibe Coding してみた感想を雑に書いていく。
作業効率は良いと思う
最初は「自分で書いた方が早い」と思ったが、 指示の出し方を工夫することで自分で書くよりも早く実装できると感じた。 特にユニットテストを書いてもらったり、修正箇所の多いリファクタリングだったりは人間がやるよりも早い。
意外と楽しい
AIにコードを書いてもらうとプログラミングの楽しさが減ると思ったが、 自分はAIがコードを書く様子を見てるのが結構楽しい。 なんかカイロソフトのシミュレーションゲームをしているような気持ちになる。
*カイロソフトって言って通じるか分からないけど・・・。
疲れない
AIに指示して結果を待つだけなので、自分でコーディングするよりも疲れないなと感じた。 自分でコーディングする場合、頭の中で「これやって、あれやって、次は・・・」とか「この関数の使い方これでいーんだっけ?」とかあれこれ考えることが多いからだと思う。
AIの作業を待っている時間を有効活用できる???
AIの作業量が多くなると、結果が返ってくるまでまあまあ時間がかかる。 その間に Slack を確認したりできる気がする・・・が、コンテキストスイッチが発生するので、それはそれで辛いなーと感じた。 待ち時間を有効活用できるかどうかでいうと・・・自分は難しい印象を受けた。
誰でも品質の高いコードが書ける?
AI以前のプログラミングにおいて、コードの品質というのはエンジニアとしての腕の見せ所みたいなもので、"知識と経験が物を言う" という感じだったと思う。 直近ではインターネット上に情報が溢れているので、昔に比べるとそーゆー雰囲気は薄れた気もする。
しかし、AIの登場によって、品質の高いコードを書くハードルが、さらにグッと下がった気がする。 AIが出してくる実装にはある程度の妥当性があったり、AIに問題点を探させて、それを修正することもできる。 「AIと対話するだけで70~80点は取れるのではないか?」という気持ちになる。
しかし、これはコーディングに対して一定の知見を持っている自分だからこそ、そう感じるのであって、ジュニアなエンジニアだとそうもいかないのかな? という感じもある。 実際どーなんでしょうね。
エンジニアとしての価値の出し方が難しくなる
パブリッククラウドの台頭によって、インフラ領域で職人芸を発揮する機会が減ったように、 AIの登場によってコーディング領域も同じ感じになりそう。 今はまだ大丈夫かもしれないけど、エンジニアとしての価値の出し方が一層難しくなるな・・・と感じた。
実装が複雑で込み入ってくるとどーなる?
今回自分は会員登録機能、ログイン機能しか実装していないので、AIが上手く扱える情報量や複雑度だったと思う。 これが本番稼働している雑な実装だと、AIはどこまで上手くやれるのだろうか・・・?
まとめ
少し触っただけだが、今後もAIが進化していくことを考慮すると、人間がコードを書く機会は減っていくんだろーなと思った。 パブリッククラウドによってインフラ領域がコモディティ化したのと同じように、 コーディングという領域も大きくコモディティ化するんだろーな。
AIなしで開発する未来は見えないので、むしろAIを上手く使えるように順応していき、その上で自分の価値の出し方を考えていくしかないなーと思いました。
宣伝
株式会社カミナシでは以下のポジションをすごく募集しています。 興味のある方は応募してみてください。