こんにちは、エンジニアの@makishy(きしだしょーきち(仮))です。突然ですが、みなさんは「Vibeコーディング」って聞いたことありますか?
最近、AIを活用した開発がどんどん進化していて、コードを書くという行為そのものが変わりつつあります。そんな中で注目されているのが、この「Vibeコーディング」。名前からしてなんだか楽しそうですよね。
「こんな機能が欲しい!」とAIに伝えるだけで、サクッとコードが生成される。まさに未来の開発スタイル!……と言いたいところですが、その裏には思わぬ落とし穴も潜んでいます。
AIが生成するコードは便利な反面、技術的負債が爆速で積み上がったり、セキュリティ的に危うかったりすることも。気づいたら「これ、どうやってメンテナンスするの?」という状態になってしまうことも珍しくありません。そんな状況を避けるためには、ちょっとした工夫と戦略が必要です。
そこで今回の記事では、「Vibeコーディングのサバイブ、ファイブ」と題して、Vibeコーディングを安全かつ効率的に楽しむための5つのコツをお届けします!これさえ押さえれば、Vibeコーディングでも安心して開発を進められるはず。AI時代の新しい開発スタイルを一緒に楽しみましょう!
それでは早速、本題に入っていきます!
Vibeコーディングとは?
まずは簡単に「Vibeコーディング」についておさらいしましょう。これは、AIに自然言語で指示を出してコードを書いてもらうという、新しいプログラミングスタイルです。「この機能が欲しい」「ここをこう変えて」と伝えるだけで、AIがコードを生成してくれるので、まるで音楽の即興セッション(ジャムセッション)のように開発が進んでいきます。
例えば、「ユーザー登録フォームにバリデーションを追加して」と言えば、AIが適切なコードを提案してくれる。これまでなら自分で書いていたコードの多くをAIに任せることで、人間はプロダクトのビジョンや問題解決に集中できるようになります。
なぜ「サバイブ」が必要なのか?
しかし、この便利なスタイルにも落とし穴があります。AIが生成するコードは、一見正しく動いているようでも、技術的負債やセキュリティリスクを生みやすいという問題があります。また、ノリだけで進めていると、後から「これどうやって修正するんだっけ?」と頭を抱えることにもなりかねません。
そこで登場するのが、「Vibeコーディングのサバイブ、ファイブ」です。この5つのコツを実践すれば、ノリと勢いだけでなく、安全性と効率性も兼ね備えた開発が可能になります。
以下がその5つのポイントです。それぞれ具体的に見ていきましょう!
サバイブ、ファイブ:5つのコツ
Vibeコーディングを安全かつ効率的に進めるためには、以下の5つのポイントを押さえることが重要です。この「サバイブ、ファイブ」を実践すれば、ノリだけでなく堅実さも兼ね備えた開発が可能になります!
-
ユースケース中心でインプットする
AIに伝える際は、細かい仕様ではなく「何を実現したいか」をユースケースとして明確に伝えましょう。具体的なシナリオを示すことで、AIが適切なコードを生成しやすくなります。 -
小さく作り、大きく育てる
一度に多くを作ろうとせず、小さな機能単位で開発を進めます。これにより、不具合の発見や修正が簡単になり、開発全体がスムーズになります。 -
コンポーネント化と共通化
生成したコードは再利用可能な形に整理しましょう。UI部品やロジックをコンポーネント化することで、メンテナンス性が向上し、新機能追加も楽になります。 -
仕様化・ドキュメント化
AIが生成したコードの意図や仕様は、その都度ドキュメント化することが大切です。これにより、チーム内での共有や将来的な改修が容易になります。 -
テストコードの自動生成
AIにはテストコードを書いてもらいましょう。品質保証を効率化できるだけでなく、不具合の早期発見にも役立ちます。ただし、人間によるレビューも忘れずに!
これらのポイントを押さえれば、Vibeコーディングでも安心して開発を進められます。それでは、次章で各ポイントについて詳しく見ていきましょう!
それでは、順にポイントを解説していきたいと思います。
サバイブ、ファイブ:5つのポイントを詳しく解説!
それでは、「Vibeコーディングのサバイブ、ファイブ」の5つのポイントについて、具体的に解説していきます!これらを実践すれば、AIとノリで進める開発でもしっかりと生き残ることができます。
1. ユースケース中心でインプットする
Vibeコーディングの最初のステップは、AIに対して「何を作りたいか」を的確に伝えることです。ここで大切なのは、細かい仕様や技術的な要件を詰め込むのではなく、ユースケース(利用シナリオ)に基づいて指示を出すことです。
例えば、「ユーザー登録フォームを作って」とだけ伝えると、AIはどんな項目を含めるべきか、どんなバリデーションが必要かを正確に理解できない場合があります。一方で、「ユーザーが名前とメールアドレスを入力して登録できるフォームを作成し、入力内容が正しくない場合はエラーを表示する」といった形でユースケースを具体的に伝えると、AIが生成するコードの方向性が明確になります。
悪い例
- 「ユーザー登録フォームを作って」
良い例
- 「ユーザーが名前とメールアドレスを入力して登録できるフォームを作りたい。名前は必須で、メールアドレスは形式チェックが必要。年齢とニックネームの入力欄があり、自己紹介の説明をフリーテキストで入力可能にして」
このようにユースケースにフォーカスすることで、AIが生成するコードの品質が向上し、後から修正する手間も減らせます。また、細かい部分(例えばバリデーションの実装方法など)はAIに提案させることで効率的に進められます。
雑な指示
「ユーザー登録フォームを作って」と指示したケースです。
コード生成が終わらず以下のようにAPI呼び出しの上限に超えるなど多くのコストが発生します。
AIが実装した機能
これはこれですごいのですが、思ったものと違う場合など手戻りも多くなり、費用もかさんでしまいます。(といってもバリデーションまで入っていて驚くべきアウトプットではあるのですが…)
ユースケースを絞った指示
では次に、「ユーザーが名前とメールアドレスを入力して登録できるフォームを作りたい。名前は必須で、メールアドレスは形式チェックが必要。年齢とニックネームの入力欄があり、自己紹介の説明をフリーテキストで入力可能にして」と指示したケースです。
AIが実装した機能
作成されたのはこの画面のみです。
メールアドレスのValidationもしっかり実装されてます。
消費したコスト
1回のプロンプト指示で機能追加が完了するまでに消費したコストです。
実装する機能が多い分それだけ多くのAPIコストが発生していることがわかるかと思います。
2. 小さく作り、大きく育てる
次に重要なのは、一度に多くを作りすぎないことです。Vibeコーディングでは、AIが短時間で大量のコードを生成できるため、ついつい欲張ってしまいがち。しかし、それでは後から手に負えなくなる可能性があります。
そこで、「小さく作り、大きく育てる」アプローチを取りましょう。具体的には、以下の手順で進めます:
- まずは1つのユースケース(例:ログイン機能)だけを完成させる。
- その機能が動作することを確認したら、次のユースケース(例:パスワードリセット機能)に進む。
- このサイクルを繰り返す。
こうすることで、開発全体がシンプルになり、不具合の原因も特定しやすくなります。
3. コンポーネント化と共通化
AIが生成したコードは、そのままだとプロジェクト全体で使い回しづらいことがあります。そこで重要になるのが「コンポーネント化」と「共通化」です。
例えば:
- フォームやボタンなどのUI要素は汎用的なコンポーネントとして切り出す。
- API呼び出しやデータ処理ロジックなども共通化して再利用可能な形に整える。
これによって、新しい機能追加や修正が簡単になり、技術的負債も減らせます。AIには「この部分を再利用可能な形にして」と指示するだけで対応できる場合もあるので、積極的に活用しましょう!
AIが最初に書いたフォーム画面実装
register.tsxというファイルに必要な要素やロジック部分がベタ書きされています。
コンポーネント化の指示をした後の実装
プロンプトは次のとおりです。
ユーザー登録フォームのそれぞれの要素の共通化できる部分をコンポーネント化して別ファイルに切り出して
結果は以下のとおりです。
register.tsx内は、RegisterFormというコンポーネントのみとなり、必要な要素はフォームおよびvalidationやカスタムフックなどコンポーネントや処理部分を分離、整理してくれています。
このようにコンポーネント化、共通化することで次の効果をもたらします。
- 再利用性: 作成したコンポーネントは他のフォームでも再利用可能
- 保守性: 各機能が分離されているため、修正や拡張が容易
- テスト容易性: 各コンポーネントを個別にテスト可能
- 関心の分離: UIとロジックが分離され、責務が明確
これにより、ソースコードをAIにも人にも扱いやすい形に整えていくことができます。
4. 仕様化・ドキュメント化
Vibeコーディングでは、生成されたコードの意図や仕様が不明確になりがちです。そのため、コードを書いた後には必ず仕様化・ドキュメント化を行いましょう。
幸いなことに、AIはドキュメント生成にも強みがあります。例えば、「このコードについて簡単な説明を書いて」と頼むだけで、自動的にコメントや仕様書を作成してくれます。また、「Markdown形式でドキュメントを書いて」と指示すれば、そのままチーム内で共有できる形になります。
ドキュメント化によって
- チームメンバーとの情報共有がスムーズになる。
- 将来的な改修時にも迷わず対応できる。
というメリットがあります。地味ですが非常に重要なステップです!
また、ドキュメント化することでAIの生成精度が向上していくという点も重要なポイントです。
ClineやCursor、RooCodeといったエージェント型のツールにはルールファイルを定義することができます。コードを生成する際の規約やルールを定義し、アップデードしていくことで、効率的にプロジェクトに即したコードを生成できるようになります。
プロンプト指示
プロジェクト内のソースコードを確認し、提供されている機能をリスト化してください。また、それぞれの機能について簡易な説明をMarkdown形式のドキュメントとして出力してください
自動生成されたドキュメント
ルールファイル
clineのルールファイルは.mdcという拡張子にyaml形式で記述します。(.clinerules非推奨となり.mdcg推奨となったようです。)
ルールファイルの例
---
Description: 基本的な開発ルール
Globs: **/*.{ts,tsx,js,jsx}
---
# 基本開発ルール
- コードは明確で読みやすく保つ
- 関数やコンポーネントには適切な名前を付ける
- 再利用可能なコードを作成する
5. テストコードの自動生成
最後はテストコードです!Vibeコーディングでは、AIによるテストコード生成も大きな助けになります。「この機能用のユニットテストを書いて」と指示すると、多くの場合、自動的にテストコードを提案してくれます。
ただし注意点として:
- AI生成のテストコードは万能ではないため、人間によるレビューも必要。
- カバレッジ不足や非現実的なテストケースが含まれる場合もあるので注意しましょう。
テストコードがあることで、不具合検出やリファクタリング時の安全性が格段に向上します。これも「ノリだけではなく堅実さも大事」というポイントですね!
テストコードの自動生成とテスト結果
プロンプト指示
vitestやjestを使った単体テストコードを生成してください
テスト結果
簡単なプロンプトだけで必要なテストコードまで生成してくれるのは感動ものですね!
テスト内容の確認と必要に応じた手直しをすることで、品質の担保がされたソースコードに仕上げることができます。
まとめ:Vibeコーディングでも安心して進めるために
以上の5つのポイント、「サバイブ、ファイブ」を押さえることで、Vibeコーディングでも安定した開発環境を維持できます。この方法論は特別なものではなく、従来の開発プロセスと似た部分も多いですが、それこそがポイント。人間にもAIにも優しい開発スタイルこそ、これからの時代には必要不可欠です!
Clineを使ってノリノリで安心安全なVibeコーディングライフをお楽しみください!