📚

Vive CodingがちょっとうまくいくためのTips

に公開

🚀 はじめに

みなさんVive Codingしてますか?

僕は自分でコードを書くのも好きですが、自分のアイデアをAIがガンガン形にしてくれるのが楽しくて、AIだよりの開発に頼りっきりです。

しかし、AIにコードを書いてもらうのはなかなか難しいこともあります...😅

そこで、この記事では自分がVive Codingを試す中で手応えを感じているTipsを紹介します。

前提として僕が使っているAIツールは以下の通りです:

  • Claude Code
  • Kiro
  • Github Copilot
    ClaudeはProプラン、Kiroは無料プラン、Copilotは個人プランを利用しています。

😰 Vive Codingの課題

Vive Codingはとても便利で面白いですが、率直に言って思い描いた実装をしてもらうのはまだまだ簡単ではありません。

特に僕は以下のような課題を感じています:

  • 🔍 透明性の問題
    今AIが何をどのように実装しようとしているのか、いまいちわからない

  • 📚 情報の古さ
    AIの学習時点での情報しか持っていないため、最新のライブラリやフレームワークに対応できない

  • ⚡ コード品質の問題
    AIがコードを生成する際に、冗長なコードや非効率なコードを生成することがある

  • 🎯 余計な実装
    要求していない機能やコードを勝手に実装してしまう

  • 🐛 エラー解決の超迷走
    エラー解決がうまくいかないと、解決しようとして難しい実装や意図しない解決方法をとりはじめる

  • ⏸️ 作業の中断
    エラーやツールの利用制限で作業が中断してしまうと、再開が難しい


💡 Vive CodingがちょっとうまくいくためのTips

上記の課題を踏まえて、僕が実際に試してみて効果を感じているTipsを紹介します!
多くはもう語り尽くされていたり、当たり前のことかもしれませんが、改めて意識することで効果があると思います。

1. 📋 スペックドリブン

Kiroの登場とともに注目されている考え方ですが、やはり要件や仕様そして設計を明確にしたうえでタスクを構造化すること、そのうえでAIに実装してもらうのが最も効果的です。

といっても仕様や設計をイチから自分で作り上げるのは大変なので、KiroやSpec KitTsumikiなどのツールを活用して、AIに仕様や設計を作成してもらう、手伝ってもらうのが良いでしょう。

2. 🔄 MCPを活用した技術調査

実装を進めていくときにはやはりAIがもともと持っている知識ではなく、最新でかつできれば一次情報を参考にして実装を進めてもらえるのが最も良いと思います。MCPを活用すればそれが簡単に、自動的にできるようになってしまいました。
実装タスクを進めてもらうときにMCPを使って最新情報を参考にするようルール付けておけばとても便利です。

特にContext7 MCPは無料でかつ幅広い技術スタックに対応しているので必須といっても過言ではないと思います。
他にもMicrosoft LearnやTerraformなどサービス提供者が公式に提供している便利なMCPも様々あるので、プロジェクトに応じて使い分けると良いと思います。

MCPが便利なので、僕は最近では技術的な調べごとはGoogleではなくついでにAIにMCPを使って調査してもらうことが多くなりました。
エディターからブラウザに移動する必要もないので楽で確実です、トークンを消費する点を除けば(笑)

3. 📝 タスクの細分化と段階的実行

Kiroなどを使えばタスクを定義してくれますが、定義されるタスクが抽象的かつ大きすぎる印象を僕はもってます。
せっかく要件や設計をきめても、このタスクの抽象さが原因でAIが意図しない実装をしてしまうことが多い印象をもっています。

そこで、タスクをさらに細かく分解し、AIに実行させるのが効果的に感じています。

1. AIが作成したタスクをサブタスクに分解してもらう

たとえば僕はKiroのSpecモードで仕様、設計、タスクが出来上がったあと、実装を始める前に以下のように指示しています

tasks.mdのタスクをさらに小さなサブタスクに分解してください。
そのうえで、要件とタスクを照らし合わせてユーザーへの提供価値が高いと思われる順に並び替えてください

このぐらいの抽象度の指示でも十分効果的にタスクを分解、整理できているように感じています。

2. 実行時にまず作業計画を提示してもらう

さらにタスク実行指示の際に、そのタスクをAIがどのようにこなそうとしているのか?を作業計画を提示させます。こうすることで自分の意図とずれていないか、余計な作業や思いも寄らない実装をしようとしていないかなどを確認できます。
毎回指示するのは面倒なので、これはフォーマット化しておいたり、KiroやClaudeCodeの機能を使ってルール化するのが良いです。

僕は以下のようなフォーマットで提示させています:

📋 詳細な作業計画テンプレート(クリックして表示)
各タスク実行前に以下の項目を含む作業計画を作成:

#### 必須項目
- **完了時の状態**: このタスクを終えたときにはどういう状態になっているか
- **設計方針**: どのような設計アプローチを取るか
- **実装対象**: どのファイルにどのような実装をするか
- **テスト戦略**: どのようなテストを作成するか(TDD)
- **検証方法**: 完了をどのように確認するか

#### 推奨項目
- **前提条件**: このタスクを開始するために必要な条件
- **依存関係**: 他のタスクやコンポーネントとの関係
- **リスク要因**: 想定される問題点や注意事項
- **参考資料**: 関連するドキュメントやコード例
- **レビューポイント**: 特に注意してレビューすべき点

#### 作業計画テンプレート

## タスク: [タスク名]

### 完了時の状態
- [ ] 具体的な完了状態1
- [ ] 具体的な完了状態2

### 設計方針
- 設計の基本方針
- アーキテクチャ上の考慮事項

### 実装対象
- `src/example.ts`: 機能Aの実装
- `tests/example.test.ts`: 機能Aのテスト

### テスト戦略(TDD)
1. テストケース1の作成
2. テストケース2の作成
3. 実装によるテスト通過

### 検証方法
- テスト実行結果の確認
- 動作確認の手順

### 前提条件
- 必要な前提条件

### 依存関係
- 依存するタスクやコンポーネント

### リスク要因
- 想定される問題点

### 参考資料
- 関連ドキュメントや技術情報へのリンク

またこれを残しておくことで、AIの利用制限で作業が中断した際にも再開が容易になります。
タスクをマークダウンやタスク管理ツールに出力させるのも良いかもしれません。

4. 🧪 TDDを採用する

コードや実装が壊れていないか、要件を満たしているかを確認するにはやはりテストするのが最も確実だと思います。
それに加えて完成の状態を明確にすることができるので、TDDを採用するのが効果的だと感じています。
3で紹介した作業計画を提示させる際にも"完了時の状態"を明確にさせていますが、これを明確にしておくことが曖昧さを減らし、AIが余計な実装をしないようにする効果もあると思います。

他にもTDDを採用することで、以下のようなメリットがあります:

  • 要件の明確化: テストケースを通じて要件や仕様が明記され、自分もAIも理解しやすくなります。
  • リファクタリングの容易さ: コードのリファクタリングが容易になり、AIが生成したコードを改善しやすくなります。

ただしこれは推測ですが、頻繁にテストを実行するようになることでコンテキストが膨らみやすくなっていると思います。やはりタスクを小さくしたうえでTDDを採用するほうが良いと思います。
あるいはClaude Codeならテストをするエージェントを別に用意しておけば、コンテキストが分けられるので便利かもしれません(まだ試していません)。

5. 🛠️ 積極的なリファクタリング

AIが生成したコードは冗長であったり、非効率なコードであることが多いです。
4で紹介したTDDを採用していればリファクタリングが容易になるので、リファクタリングを積極的に行うのが良いと思います。僕はサブタスクをすべて終えるとリファクタリングタスクを追加して、コードの改善を行うようにしています。

リファクタリングの対象は3つ、コード・テストコード・ドキュメントです。ドキュメントはリポジトリ内のReadmeや設計書などにくわえ、KiroのステアリングやClaude CodeのCLAUDE.mdも忘れないようにしましょう。
リファクタリングによって次の実装タスクのコンテキストの改善にもつながると思います。

6. 🔄 特定ツールに依存しない

各ツールの利用制限もありますし日夜新しいツールが登場していますから、ここまでのTipsを特定のツールに依存せず同様に実行できるようにしておくのが良いと思います。
たとえばKiroのSpecモードで仕様、設計、タスクを作成したら .kiro/配下にマークダウンが出力されますが、Claudeにそこにプロジェクト情報がまとまっていると指示すればきちんと読み取ってタスクをこなしてくれます。
またサブタスクが細かくなっていれば、Claudeが制限中でもGithub Copilotで実装を進めることも可能です。

それをしやすくするためには仕様やタスクといった共通利用が必要な情報をマークダウンやタスク管理ツールに出力しておくようにルール化しておくと良いです。
僕はツールの試用も兼ねて、Linearにタスクを出力させるのを試しています。


🎉 まとめ

簡単にまとめると、AIが達成すべきゴールを明確にしかつ、それを達成するためのタスクを細かくする、そしてゴールが達成されているか確認可能にしておくことが重要といえると思います。
でもこれはよく考えればVive Codingに限った話ではないですよね、ソフトウェア開発全般に言えることだと思います。

この記事が皆さんの楽しいVive Codingの手助けになれば幸いです! 🚀


Discussion