AIによるプログラミング支援が日々普及する中、適切なAIアシスタントの選択がますます重要になってきています。AIコーディングアシスタントの長期ユーザーとして、最近私は興味深い実験を行い、現在主流の4つのAIコーディングアシスタントを実際のプロジェクトで比較しました。この実験を通じて、各モデルについてより深い理解が得られただけでなく、いくつかの驚くべき発見がありました。
実験の背景:実際の開発ニーズ
クリスマス休暇中、私はGoogle HomeやAlexaよりも優れたスマートホームアシスタントの開発に着手しました。主要な機能の一つは、AIメモリーシステムの実装でした。例えば、ユーザーが「卵は好きじゃない、覚えておいて」と言うと、システムは以降のレシピ推薦で卵を含む料理を避けるというものです。
この機能を実現するために、Azure Functionsプロジェクトをプロキシとして開発し、Azure Table Storageとのデータ連携を行い、既存のBlazor WASMアプリケーションに統合する必要がありました。一見シンプルな要件に見えますが、プロジェクトの作成、クラウドデプロイメント、既存プロジェクトの機能拡張など、多岐にわたる作業が必要で、AIコーディングアシスタントの能力を試すのに最適でした。
Claude-Sonnet:信頼できるベテラン
Claude-Sonnetは、経験豊富なシニアエンジニアのような働きを見せました。開発プロセス全体を通じて、優れたコード品質管理能力を発揮し、コードの問題を自動的に検出・修正し、さらにデプロイメント後にはツールのURLを自動補完するほどの知的な対応を見せました。しかし、この「ベテラン」のサービスは安くありません。基本APIバージョンでは、わずか0.2ドルで制限に達し、OpenRouterへの切り替えを余儀なくされました。さらに驚いたことに、OpenRouter経由での使用コストは2.1ドルにまで跳ね上がり、パフォーマンスも低下しました。
DeepSeekV3:期待を超えたダークホース
DeepSeekV3のパフォーマンスは印象的でした。OpenRouterと公式APIの両方でテストを行いましたが、結果は大きく異なりました。OpenRouter経由では、コードの重複や機能制限など、やや不器用な面を見せました。しかし、公式APIを使用すると、まるで別のモデルのように、Claudeに匹敵するコード品質、スムーズな動作、そして独自の解決策を提供しました。最も印象的だったのは価格の優位性で、わずか0.02ドルで全タスクを完了しました。デプロイメントフェーズでは、従来型の手動zipデプロイメントを選択しましたが、リソースの自動検索やストレージ接続文字列の構築など、驚くべき能力も示しました。
Gemini-ept-1206:有望株の成長の悩み
Geminiは、可能性を秘めながらも経験の浅い新人のような印象を与えました。全モデルの中で最も対話的で、ランタイムバージョンなどの詳細について積極的に質問します。デプロイメント設定では優れた性能を見せ、環境変数の設定も事前に考慮していました。しかし、「成長期の悩み」も見られました:処理速度が遅く、タスク完了に20分もかかることがあり、トークン制限に悩まされ、複数のセッションを必要とすることが多く、最も困ったことに、24時間後でもコスト統計が不透明で、使用コストを正確に評価できませんでした。
o1-Mini:果たせなかった約束
o1-Miniの性能は残念な結果となりました。プロジェクトの設定はスムーズで、初期のコード品質も許容範囲内でしたが、その後の性能は低下の一途をたどりました:応答速度が遅く、誤った前提(誤った地理的位置でのリソースグループ作成など)を頻繁に行い、問題解決の効率も低下しました。2.2ドルを費やした後、.NETバージョンのダウングレードを提案するに至り、テストを早期終了せざるを得ませんでした。
実践からの学びと提言
この実験を通じて、いくつかの実用的な提言が得られました。個人開発者や小規模プロジェクトにとって、DeepSeekV3は間違いなく最適な選択肢で、コード品質とコストのバランスが完璧です。予算に余裕がある場合、Claude-Sonnetは企業レベルの開発における信頼できる選択肢です。Geminiは詳細な対話ガイダンスが必要なシナリオに適しており、o1-Miniは特定のアルゴリズム最適化問題で活躍する可能性があります。
注目すべき点として、OpenRouter経由でこれらのモデルを使用すると、パフォーマンスに影響が出ることが多いため、可能な限り公式APIの使用を推奨します。また、AIコーディングアシスタント分野は急速に発展しており、各モデルの能力は継続的に向上しています。将来の競争状況は大きく変化する可能性があります。適切なAIアシスタントの選択は、特定の選択肢を盲目的に追従するのではなく、具体的なプロジェクト要件、予算制約、開発シナリオに基づいて決定すべきです。