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時代でも型は重要だと思う。