AIがコードを書く未来:CursorとAnthropicが語るソフトウェア開発の変革
AI技術の進化は、私たちの生活、そして仕事のあり方を劇的に変えつつあります。特にソフトウェア開発の分野では、生成AIの登場により、コードの書き方、テスト、デバッグ、さらにはプロジェクト管理に至るまで、あらゆるフェーズで大きな変革が進行中です。 「ソフトウェア開発のあらゆる側面が、AIを使う形に変わっていくだろう」。そう語るのは、AI駆動型コードエディタとして世界中の開発者から注目を集めるCursorの共同創業者兼CTOであるAman Sanger氏です。
今回、私たちはAI駆動型コードエディタとして注目を集めるCursorの共同創業者兼CTOであるAman Sanger氏と、研究者のLukas Möller氏、Jacob Jackson氏、そして革新的な大規模言語モデル(LLM)を提供するAnthropicのClaude Relationsを率いるAlex Albert氏を招き、AIがソフトウェア開発にもたらす影響、Cursorの革新性、そして未来のプログラミングの姿について深く掘り下げた対談を行いました。この対談は、単なる技術の紹介に留まらず、AI時代の開発者の役割、組織のあり方、そしてAIと人間が協調する未来への深い洞察を与えてくれます。
Cursorの驚異的な成長とAIによるブレイクスルーの軌跡
Cursorは、AI業界の最前線でわずか1年あまりの間に3億ドル以上の収益を達成し、数百万人の開発者が利用するまでに急成長を遂げました。この目覚ましい成功の背景には、何があるのでしょうか?
Aman Sanger氏によれば、最大の要因は大規模言語モデル(LLM)の能力向上、特にAnthropicが提供するClaudeモデルのような技術の登場が、ソフトウェア開発におけるAIの活用に「ステップ関数」のような劇的な変化をもたらしたことにあります。
以前のAI駆動型コードエディタは、その機能に一定の限界がありました。主に提供されていたのは、以下のような機能です。
- タブ補完: 開発者がコードを入力する際に、次に入力されるであろうコード行や関数名を予測し、提案することで入力の手間を省く機能です。これは開発速度を向上させましたが、本質的なロジックの構築には人間の介入が不可欠でした。
- 単一ファイル内の編集: AIが個別のファイル内でのコードの修正や追加を行う機能は存在しましたが、プロジェクト全体にわたる複雑な変更や、複数のファイル間の相互作用を考慮した編集は困難でした。
これらの機能だけでも開発効率は向上しましたが、真に大規模で複雑なソフトウェアプロジェクトでは、複数のファイルやモジュールにまたがる設計上の変更、あるいはシステム全体のアーキテクチャに関わる調整が必要となるため、AIの能力に限界を感じる場面が少なくありませんでした。開発者は依然として、コードベース全体を俯瞰し、変更の影響範囲を理解し、手動で広範囲にわたる編集を行う必要がありました。
しかし、Claude 3.5 Sonnetのような次世代LLMの登場は、この状況を一変させました。Sanger氏とMöller氏によれば、Cursorは、この飛躍的に進化したLLMと、独自のカスタムモデルを組み合わせることで、**「マルチファイル編集」**という画期的な機能を初めて実用レベルで実現しました。
この機能は、単に複数のファイルを同時に開いて編集できるというだけではありません。Cursorは、AIの強力な推論能力を活用して、与えられた指示に基づいてコードベース全体を分析し、変更が必要なファイルを特定し、複数のファイルにまたがるコードを自動で修正・生成します。このプロセスには、関連するコードスニペットを効率的に探し出す情報検索(Retrieval)モデル、そしてAIが提案した変更をコードベースに正確かつ安全に適用する編集適用モデルといった、Cursor独自の技術が組み合わされています。
Sanger氏は「まるで踏み台を一段上がるような感覚でした」と、このマルチファイル編集の実現がもたらしたインパクトを表現しました。単一ファイルでの編集能力と、複数のファイルを横断して整合性を保ちながら変更を加える能力の間には、これまで埋めがたい大きな隔たりがありました。この隔たりをAIの力で埋めることに成功したことが、Cursorが多くの開発者から爆発的な支持を得る大きなきっかけとなったのです。
自己改善する開発環境:CursorチームがCursorでCursorを作る
Cursorの開発チームは、自社製品であるCursorを使ってCursorを開発するという、ユニークな「自己改善」のループを実践しています。このアプローチは、自分たち自身が最高のユーザーとなることで、製品の進化を劇的に加速させるという哲学に基づいています。
Lukas Möller氏が語るように、Cursorの利用方法は、開発者個人のスキルレベル、現在取り組んでいるプロジェクトのフェーズ、そして担当する製品領域によって大きく異なります。
- 新機能の初期実装時: まだコードベース全体に深い知識がない初期の段階では、Cursorのエージェント機能が非常に役立ちます。開発者が大まかな要件を伝えれば、エージェントが既存のコードベースのコンテキストを考慮し、新機能のコード骨格や関連ファイルを初期構築します。これにより、開発者はゼロからすべてを記述する手間を省き、迅速に作業を開始できます。
- 個別バグの修正時: 既存のコード内に潜む特定のバグを特定し修正する際には、Cursorの思考モデルが問題の根本原因を探り、効果的な修正案を提案します。開発者はモデルとの対話を通じて、問題解決のヒントを得ることができます。
- 精密なコード編集時: 既にコードに精通している開発者、または特定のコードブロックに集中して作業している場合、Cursorのタブ補完機能は依然として強力なツールとして機能します。開発者の思考の流れを止めずに、効率的なコーディングをサポートします。
- コードベースの学習・探索時: 新しいプロジェクトに参加したり、自身の専門外のコード領域を理解したりする必要がある場合、CursorのQA機能や検索機能は、広範なコードベースの構造や、異なるモジュール間の相互作用を効率的に理解するための強力なリソースとなります。
この「自社開発」の哲学は、Cursorの製品開発サイクルにおいて複数のメリットをもたらします。 第一に、チームは自分たちが直面する課題をCursorで解決しようと試み、そのフィードバックを即座に製品に反映させます。これにより、市場投入前の段階で機能の真の有用性を厳しく評価し、ユーザーにとって価値のない機能を迅速に排除することが可能になります。 第二に、社内での多様な利用事例が、予期せぬユースケースや改善点を洗い出すきっかけとなります。開発者自身が日常的に使用することで、細部にわたる使いやすさやパフォーマンスの最適化が図られ、製品の品質が継続的に向上します。 このプロセスは、AIモデル自体の進歩と相まって、新たな機能の迅速な導入、そして開発者の生産性向上へと繋がる「イテレーションループ」を形成しているのです。
AIエージェントの進化と「背景エージェント」が切り開く未来
LLMの能力向上に伴い、Cursorはさらに進化したAIエージェント機能を導入しています。中でも注目すべきは、最近プレビュー版がリリースされた**「背景エージェント」(Background Agent)**です。
これは、開発者が指示した複数の複雑な変更を、バックグラウンドで並行して実行する機能です。たとえば、ユーザーが「この機能を追加し、関連するテストを修正し、さらにドキュメントを更新してほしい」と指示した場合、背景エージェントはこれらのタスクを自動的に分解・実行し、最終的にレビュー可能なプルリクエスト(PR)として提示します。
Sanger氏は、AIによるコード生成のボトルネックが解消されつつある中で、次の大きな課題は**「ソフトウェアの検証」**になると指摘します。AIが90%完成したコードを生成しても、残りの10%が人間の意図と完璧に一致しているか、大規模なコードベース全体で問題なく動作するかを確認するプロセスは依然として複雑です。
背景エージェントは、この検証プロセスに革命をもたらす可能性を秘めています。
- 開発者の高レベルタスクへの集中: 開発者は、AIが提案したコードが正しいか、既存のシステムと衝突しないか、セキュリティ上の問題がないかといった「人間の目」でしか判断できない部分に注力できます。
- 同時並行作業の実現: これまで人間が行っていたコード生成とレビューは、時間のかかる逐次的なプロセスでした。背景エージェントはこれを並行処理に変え、開発フロー全体を大幅に効率化します。例えば、同時に3つや4つの変更をバックグラウンドで処理させ、進捗状況を監視しながら、必要に応じてフォアグラウンドで介入・調整するといったワークフローが可能です。
- テスト駆動開発の進化: AIにテストの失敗を検知させ、その修正を自律的に試みさせることで、コードの正確性を保証するプロセスが自動化されます。
さらに、AIエージェントの能力は、大規模コードベースの理解という、従来のRetrievalモデルだけでは把握しきれない領域へと広がりつつあります。非常に大規模なコードベース(数億トークンに及ぶ可能性も)では、既存の言語モデルやRetrievalモデルだけでは、コード全体を正確に理解し、正しい変更を行うことが困難です。
この課題を解決するため、Cursorは以下のようなアプローチを模索しています。
- 異なる表現形式でのコードベース操作: 擬似コードのような、より抽象的な表現でコードベースを操作することで、モデルが大規模なコンテキストを効率的に扱えるようにする。
- 豊富なコンテキストの統合: 最近の変更履歴、チームメンバー間のSlackメッセージ、設計ドキュメントなど、コードベース以外のあらゆる情報をAIに与えることで、モデルの理解度を深める。
これらの取り組みは、AIが単一のファイルや関数だけでなく、プロジェクト全体の整合性や設計思想を理解し、より高度なレベルでソフトウェア開発に貢献する未来を築くための重要なステップとなります。
未来のプログラミング:コードは誰が書き、どう検証するのか?
AIがさらに進化する未来において、プログラミングのあり方はどのように変わっていくのでしょうか。この問いに対するCursorとAnthropicのメンバーの考察は、示唆に富んでいます。
1. コードの「テイスト」の重要性
未来のプログラミングにおいて、Möller氏は**「テイスト」の重要性**が増すと語ります。AIが生成するコードは、単にテストをパスするだけでなく、以下の要素に合致している必要があります。
- 既存コードベースとの整合性: プロジェクトのスタイルガイド、命名規則、既存の設計パターンなどに沿っているか。
- 可読性と保守性: 人間が容易に理解し、将来的に修正しやすいコードであるか。
- DRY(Don't Repeat Yourself)原則の遵守: 重複するコードを避け、抽象化されているか。
- 適切な複雑性: 不要な複雑性を避け、シンプルで明瞭な解決策であるか。
Sanger氏は、例えばデバウンス関数を例に挙げます。AIは一から関数を書くことはできますが、既存のコードベースに既に3つや4つの異なるデバウンス関数が存在する場合、AIはどれを使うべきか、あるいは新しいものを書くべきかをどう判断するのでしょうか? これは、単なる技術的な正しさだけでなく、**「そのコードベースにおける最も適切な選択」**という、人間が経験やコミュニケーションを通じて培う「暗黙知」や「美的感覚」に近いものです。
AIの能力向上に伴い、コードの生成が容易になるほど、人間がそのコードの「質」や「テイスト」を評価し、ガイドする役割は、これまで以上に重要になります。将来的には、UXデザイナーがユーザー体験の「テイスト」を設計するように、プログラマーはコードの「テイスト」を設計し、AIにそれを実装させる役割を担うようになるかもしれません。
2. プログラミング教育の変革
AIが低レベルのコーディング作業を代替することで、プログラミング学習の焦点は、より抽象度の高い思考や問題解決能力に移るとSanger氏は予測します。未来のエンジニアは、必ずしもすべての低レベルな詳細を知らなくても、AIツールを効果的に活用してソフトウェアを構築できるようになるでしょう。
AIは、学習者にとって強力な「教育ツール」としての側面も持ちます。
- オンデマンドな知識提供: 開発者がコードベースで「この関数は何をしているのか?」「この概念を説明してほしい」と質問すれば、AIが即座に、そのコードベースのコンテキストに合わせた詳細な説明やコード例を提供します。これは、従来のドキュメント検索や同僚への質問よりもはるかに効率的です。
- 高レベルな思考への集中: 低レベルのコード記述の負担が減ることで、学習者はシステムの設計、アーキテクチャ、ユーザー体験といった高レベルな課題に、より多くの時間を割けるようになります。
これにより、将来的には、プログラミングの詳細な知識が少なくても、AIを使いこなすことで、高度なソフトウェアを開発できる新しいタイプのエンジニア層が生まれる可能性があります。彼らのスキルセットは、コードを一行ずつ記述することよりも、AIに的確な指示を与え、生成されたコードを評価し、プロジェクト全体の方向性を定めることに重点が置かれるでしょう。
3. 「Software on Demand」の実現
AIの進化は、将来的には**「Software on Demand」**の時代を切り開く可能性を秘めています。これは、個人や組織のニーズに合わせてカスタマイズされたソフトウェアがリアルタイムで生成・変更される世界です。
- パーソナライズされたソフトウェア: 開発者が自分の開発環境を、まるで生きているかのように、自分の好みやワークフローに合わせて「変化させる」ことができます。例えば、特定のUI要素の配置や、特定の機能の動作を、AIに指示するだけで変更し、自分の最適な環境を構築できます。
- 非技術者によるツール開発: 従来はプログラミングの知識が必要だった、データ分析用のダッシュボードや、社内業務を効率化するスクリプトなども、AIの力を借りて非技術者が簡単に開発できるようになるでしょう。これは、組織全体の生産性を向上させ、イノベーションの民主化を促進します。
- 迅速なプロトタイプ作成: 新しいアイデアを検証するために、AIがプロトタイプを迅速に生成することで、開発サイクルが短縮され、市場投入までの時間が大幅に短縮されます。
Albert氏は、これを1995年に弁護士に「将来、ほとんどの法律文書はワードプロセッサーで生成されるだろう」と尋ねた例になぞらえ、回答は「100%」だったと語ります。同様に、AIはほとんどすべてのコード生成に関わるようになるが、人間の役割は、そのコードが「何をすべきか」「どうあるべきか」を定義し、導くことにシフトしていくでしょう。
AnthropicとCursorの協業:限界を押し広げる挑戦
AnthropicとCursorの協業は、LLMの最先端の研究と、それを実用的な開発ツールに統合する両者の強みを最大限に活かしています。
Albert氏は、AnthropicはClaudeを「ただのコーディングエージェント」としてだけでなく、ユーザーの「信頼できる相棒」として、その「キャラクター」を慎重に設計していると語ります。これは、AIがユーザーの生活においてより重要な役割を果たすようになる未来を見据えたもので、単なる機能性だけでなく、信頼性、安全性、そしてユーザーの意図との整合性といった側面も重視されています。
Sanger氏は、Claude 3.5 Sonnetの登場が、AIによるコード生成の課題であった「過剰な変更提案」や「テストを無視する傾向」といった問題を大きく改善したと評価します。さらに、Opusのようなより強力なモデルは、より複雑なエージェントタスク、例えば複数のファイルにまたがる大規模なコード改変を自律的に行い、人間のレビューを待つようなバックグラウンド処理の領域で、大きな可能性を秘めていると期待されています。
Albert氏は、個人的な経験として、大学でコンピューターサイエンスを学び、ソフトウェアエンジニアとして働いた後、現在は「モデルがコードを生成する方が自分よりも優れている」と感じると語ります。しかし、その一方で、AIを活用することで「これまで以上に多くのことができる」と感じていると言います。彼は、過去のソフトウェアエンジニアリングの知識があるからこそ、AIをより効果的に活用し、その限界を押し広げることができると強調します。
これは、AIがプログラマーを置き換えるのではなく、むしろ彼らの能力を拡張し、新たな領域へと導く存在であることを示しています。AIは、退屈で反復的な作業から人間を解放し、より創造的で戦略的な思考、そして「テイスト」を追求する仕事に集中させることで、開発者の価値を向上させるでしょう。
まとめ:人間とAIの協調によるソフトウェア開発の未来
今回の対談を通じて、AIがソフトウェア開発にもたらす変化は、単なる効率化にとどまらない、より根源的なものであることが浮き彫りになりました。
- AIはコード生成の量を増やす: LLMは、これまで人間が行っていた多くの反復的、低レベルなコーディングタスクを自動化し、開発のスピードを向上させます。
- 人間の役割は変化する: 開発者は、AIが生成したコードの「検証」と「品質保証」に注力し、より創造的な問題解決や、製品の「テイスト」を決定する役割を担うようになるでしょう。Alex Albert氏が述べるように、AIがより高度なタスクをこなせるようになるほど、人間の「テイスト」や「直感」といった、AIにはまだ難しい領域の重要性が増していきます。
- 組織のあり方も変わる: 非技術者がAIツールを使って独自のソフトウェアを開発できるようになり、組織全体の生産性が向上します。Cursorのチームが自社製品を使ってバグ修正や新機能開発を行う例は、AIがチームメンバーのスキルセットを拡張し、イノベーションを民主化する可能性を示しています。
- 新たなボトルネックの出現: コード生成の効率化が進むにつれて、「コードの検証」や「大規模コードベースの理解」といった新たなボトルネックが浮上し、その解決が次のイノベーションの鍵となります。
CursorとAnthropicの取り組みは、この変革の最前線に位置しています。彼らは、AIの力を最大限に引き出し、開発者がより創造的で生産的な仕事に集中できるような未来を築こうとしています。
AIがコードを書く未来は、プログラマーを不要にするものではなく、むしろ人間の創造性とAIの効率性が融合し、これまで想像もできなかったようなイノベーションが生まれる、エキサイティングな時代となるでしょう。開発者は、AIを単なるツールとしてではなく、自身の能力を拡張し、新たな価値を創造するパートナーとして捉えることが求められます。私たちは、AIによって仕事がより面白く、より影響力のあるものに変わる世界へと進んでいます。