尖ったタイトルで始めてしまいましたが、ここ最近のAIの使い方について少し疑問を持ったので投稿させていただきます。
本題
CodexやClaudeCodeの登場によってプログラミング未経験者でも簡単にアプリ(ソフトウェア)が作れるようになってしまいました。 これは革命的なことで、そのことについてはむしろいいことだと思います。しかし、それにより新しい問題が出てきてるなと感じました。
前提条件
アプリやソフトウェアを開発する際にほぼ全員が「いいソフトウェア」を作ろうとします。ですが、その定義は明確でしょうか?
「いいソフトウェア」とは私は主に以下の二つの視点から定義されるものだと思っています
- ユーザーにとってのいいソフトウェア
- 開発者にとってのいいソフトウェア
ユーザーにとってのいいソフトウェアとは?
ユーザーのストレスを減らす・ユーザーを楽しませる・ユーザーを楽にするなど皆さんが主に考えている「いいソフトウェア」のことです。
ここではUI/UXが優れていることやバグが少ないことなど主にユーザーに負担を与えないような設計ができているものと定義しましょう。
開発者にとってのいいソフトウェアとは?
「管理・運用コストが低い」ソフトウェアのことです。つまり、コードが読みやすい、バグの原因を特定しやすい、一般的な設計に沿って書かれている、テストしやすいソースコードのことです。ここでは、自分が開発したアプリにおいてバグの原因を見つけることが容易/影響範囲の推測が容易/ソースコードの解読が容易であるものと定義します。
なぜバイブコーディングをして欲しくないのか
結論
ユーザーにとってのいいソフトウェアができても、開発者にとってのいいソフトウェアができなければいずれユーザーにとってのいいソフトウェアにならなくなるから
ソースコードが読めない・アーキテクチャがわからないのであれば「開発者にとっていいソフトウェア」を作ることはまず持って不可能だと思います。なので個人開発やスタートアップでプロダクトを作る時安易にバイブコーディングをして欲しくないわけです。
自分が考える正しい使い方
主に以下のことについてはむしろどんどんAIを使うべきだと思います
-
ビジネスロジックのみのコーディング
- 複雑な条件分岐や計算が出てくる際に部分的なコーディング
- マジックナンバーがなくなるように書き換えればOK
-
テストコードのコーディング
- 人間がテストケースを考えてコードを書くよりもはるかにカバレッジが確保できたテストコードを書いてくれるのでこれもOK
-
独自UIコンポーネントの設計
- 少し複雑でどこのUIコンポーネントにもないものを作る場合にそのロジックを作ってもらうのはOK
- ただイベントハンドラがおかしかったり、普通ではありえない書き方をしている場合があるのでこれを直せばOK
最後に
ソースコードが書けない/ソフトウェアアーキテクチャがわからない人は安易にバイブコーディングをしないでください。正直その後の運用を考えると迷惑になりかねないソースコードが生まれてしまいます。
ユーザー視点を考えてプロダクトを開発するのはいいことですが、同時に開発にとってのいいソフトウェアを開発することで半永久的に使われる本当の意味での「いいソフトウェア」を作れると思います。