Vibe Coding時代に重要そうな基礎コーディング技術

Vibe Coding時代が気がついたら幕を上げてたのでとりあえず試してみた。

本記事では、基本的にAIエージェント用のチャット欄だけで全ての操作を行うことをVibe Codingと呼ぶことにする。

初めからプロダクトを作るのにもVibe Codingは適してそうだが、今回はもっと小さい単位の話。

プログラミングは結構めんどくさい。

「実装を変えたいけど同じパターンで複数書いてあるとめんどくさい」

「実装を変えたけどテストを書くのがめんどくさい」

「テストを走らせて修正して走らせてのサイクルがめんどくさい」

などのめんどくささといつも付き合うことになる。

「実装を変えたいけど同じパターンで複数書いてあるとめんどくさい」

同じパターンの繰り返しは、結構AIがTabを押したら解決してくれるようになってきた。これだけでもすごい。 変数名を変えたら空気読んで他の変数名も「ここも変えとこうか?」と(本当に言ってるわけではないが)サジェストしてくる。

「実装を変えたけどテストを書くのがめんどくさい」

この辺りになるとTabでは難しい。AIエージェントに状況を伝える。

「実装は修正したのでテストも変更したい。基本的な方針は〇〇〇でいいから、実装の変更に合わせてテストも修正して」

こんな感じでテストの修正がガガガと走る。気に入らなければ、

「やっぱりメソッドBとメソッドCはprivateメソッドとして、呼び出し元のメソッドAだけをpublicにしよっか。テストケースもBとCをAに統合して」

のような指示を出してる。(本記事はこの方法がいいというライフハック記事ではなく、私の個人的な日記である)

「テストを走らせて修正して走らせてのサイクルがめんどくさい」

コードを変更するたびに「テストを実行しましょうか?」と聞いてくるがいちいち「OK」と言うのもめんどくさい。

「聞かずにテストを実行していよ」と書いて許可する。この辺は設定で書いておけばいいのかもしれない。設定も自然言語だ。

Vibe Coding時代に重要そうな基礎コーディング技術

このような単位での変更の場合、自分が感じた重要な基礎コーディング技術は以下の3つだ。

  • Linting
  • Testing
  • Typing

Linting

AIエージェントが書いたコードは人間がレビューするとボトルネックになる。機械的にLintingして結果をAIエージェントが読んで「この指摘はこうすれば直ります」と独り言を言ってきて勝手に修正される。このLintingがしっかり指定してあれば、大きく違反したコードは出力されにくい。

Testing

AIが書いた実装はどう動くか分からないので、テストコードがAIの暴走を防ぐある種のセーフィティとなる。 AIの暴走を防ぐ、人類の最後の砦。それがテストコードなのだ。そのテストコードもAIに書いてもらうのだが。。。

Typing

型チェックもAIへの重要なヒントとなる。人間が指摘していては間に合わないので、機械的に型チェックツールがAIに指摘して修正してもらうと、ある程度の意図が伝わり暴走も食い止められる。

人間はボトルネックである

ここまで書いて再確認したが、Vibe Coding時代では人間が大きなボトルネックとなる。人間がコードを読んで書く時間は、AIとは比較にならないくらい遅い。常に自分がボトルネックであることを自覚しながらコーディングすることになる(誇張してます)。

AIは人間をサポートするためのツールである(今は)。人間がAIの教師データとなって、出力結果の成否を判断していく。コードは人間と機械との橋渡し的な中間出力となるのだろう。人間に読めない生成物は人間には成否が判断できない。しばらくはコードは必要なんじゃないかなあ。そうやって人間は人間にできることをやり、AIはAIにできることをやっていいく。いまはそういう時代なんだろう。

AIがAIの生成物の成否を判断して勝手に進化していくようになったら。。。それは今はSFの話だろう。今は。。。

つまり

AI時代でも型は重要だと思う。