完全自律型AIエンジニア「Devin」が切り開くAI駆動開発の可能性

# はじめに

2024年3月12日にCognition社がDevinを世界初の完全自律型AIエンジニアとして発表しました。

https://www.cognition.ai/blog/introducing-devin

GitHub Copilotのようにコードを補完したりサジェストしてくれるのではなく、与えられた情報をベースに自律的に開発プロセス全体を行えるというのが大きな特徴でした。
最近話題になっているAI エージェント型プロダクトの一つですね。

その性能を調べるため、弊社も発表当時Waiting Listに登録して早いうちに試したいと考えていましたが、全く連絡が無いまま数ヶ月が経過していました。

その間、他社からもGitHub Copilot WorkspaceやReplit Agent、Cline、Cursor AgentなどのAIエージェント型のプロダクト(プレビュー含む)がリリースされており、AIエージェントを利用した開発プロセスの自動化、効率化の可能性は提示されていました。

私もこれらのAIエージェント型のプロダクトを触ってみた結果、PoCやMVPのような0->1フェーズや小規模の機能開発であれば開発工数の大幅な削減に利用できる余地はあるものの、既存プロダクトの大規模な保守開発や技術的負債の解消に利用するにはまだ難しいかなと感じていました。

これは当然のことで、一般にどのようなソフトウェアであろうと、固有のドメイン知識や依存性、実装パターン等のコンテキストが存在します。

0->1の開発プロセスにおいてはその固有のコンテキストが非常に少ないので、AIが学習した定石的なパターンどおりにコーディングをさせることができます。
他方で既存のソフトウェアの保守開発や技術的負債の解消においては、そのソフトウェア固有のコンテキストもそれなりに蓄積されているため、これを深く理解したうえでコーディングをしていくことが求められます。

それを欠いた状態でコーディングをすると機能不足や修正不十分となって、作業のやり直しや別の作業が発生したり、最悪クリティカルな障害の原因となってしまうこともあります。

これは認知負荷の文脈でよく語られる問題で、ソフトウェア開発の保守期間が長かったり、「オレオレフレームワーク」のようなものが使われているほどそのコンテキストの蓄積量は多くなる傾向性があります。

人間のシニアエンジニアであっても、コンテキストの量が多い(認知負荷が高い)ソフトウェアに関しては習熟していくのに時間がかかりますし、理解困難な「オレオレフレームワーク」が使われていたり、コード自体の可読性が低い場合には解読にストレスもたまります。

保守開発や技術的負債の解消等、固有のコンテキストが必要になる場合に、それを理解させたうえでAIに自動的にコーディングをさせていくことは、最近のAIの進歩のスピードを見ていてもあと半年ぐらいは難しいかなと考えていました。

そんな中、2024年12月10日にDevinがGAされて一般に利用できるようになりました。

https://www.cognition.ai/blog/devin-generally-available

Devinには無料版が存在せず、利用開始には最低でも初期費用 $500/monthが必要となります。
効果計測もできていない状態での利用はややハードルは高いものでしたが、数ヶ月前の期待を込めてすぐに試してみることにしました。
その結果、当初の期待値を遥かに上回る結果を示してくれています。

<b>私はDevinはAIエージェント型のプロダクトとして、ソフトウェア開発組織やソフトウェアエンジニアにとって、とてつもなく大きな変化をもたらす可能性があると感じました。</b>

# 実際に使ってみてわかったDevinの凄さ

Devinの公式ドキュメントには強みを持つものとして、多くのユースケースが挙げられています。
<b>特に注目すべきなのが、コードマイグレーションやモダナイゼーション、大規模リファクタリング等の技術的負債の解消系タスクや大規模な保守開発系のタスクがDevinの強みとして挙げられていることです。</b>

https://docs.devin.ai/get-started/devin-intro#what-are-devins-strengths

これらは前述したとおり、開発対象となるソフトウェア固有の複雑なコンテキストを前提としたタスクであり、そのコンテキストを理解してコーディングを行うことが人間にも難しいものです。
今まではこれらのタスクの対応のためにはそれなりの期間と予算をとって、高度なスキルを持ったエンジニアが取り組む必要があるものでした。

「本当にそんなことができるのか…」と思いつつ、弊社では以下のようなタスクを試しにDevinに行わせてみました。
- 本番稼働している小規模なJavaScript + Expressのアプリの TypeScript + NestJsへのモダナイゼーション
- 循環的複雑度が75を超え、いかなる修正も不具合を生む状態のレガシーコードのリファクタリング
- 人間が対応した不具合修正系のPull Requestのレビューと課題点の修正提案
- EOL間近のNode.js/PHPランタイムのLTSバージョンへのアップデートの調査と対応
- 開発案件の実装可否調査
- 既存プロダクトへの機能追加
- 既存プロダクトの不具合の修正

<b>その結果、多少の指摘点は存在するものの、かなり高い精度でDevinが対応を行ってくれました。</b>
少なくともアサインしたタスクに関しては開発業務の大幅な効率化につながっています。

コードのクオリティも、初めてそのコードベースに触れたとは思えないほど保守性や可読性が考慮された素晴らしいものでした。

まだ弊社側でDevinにとって最適なPromptingやタスクアサインができていない部分もあるので、Prompt Engineeringやタスク分解の精度向上によってまだまだアウトプットの精度は向上させられる余地はあります。

さらに、Devinに投げたタスクから、Knowledgeとして蓄積すべきコンテキストをDevinが自動的に抽出してくれ、蓄積していくことができます。

https://docs.devin.ai/onboard-devin/knowledge

例えば、Devinが作成したPull RequestのCI Pipelineがコケていたら、人間のレビューを待たずに修正してという指示を一度学習させれば、次回以降はそれを斟酌して自分で修正してくれるようになります。
これを蓄積していくことで、更にタスクの精度を向上させることができます。

注意点としては、一度に投げるタスクの量が多いとタスクの精度が低下するので、タスクを分割してDevinに実行させる必要があるところと、UIデザイン系のタスクはまだまだ苦手というところですかね。

また、500ドルという費用は初期に利用できるACU(Agent Compute Unit)という計算リソースの利用権となり、割り当てられたACU以上に利用する場合には別途ACUの追加購入が必要になります。
記事執筆時点では1ACUは2ドルとなり、Devinの1タスクの実行にあたってかかる費用は大体2ドル~30ドル(1ACU~15ACU)の間となりました。

リファクタリングやリアーキテクト系のタスクの指示は処理に時間もかかる関係上、費用も高くなる傾向性があります。

無制限にDevinでのタスク実行を行えるわけではないので、コスト効率の観点からはGitHub Copilot Chatなど他のAIツールで解決するような問題はそちらで対応したほうが良さそうです。

余談とはなりますが、2024年12月20日にOpenAI社からGPT-o3が発表され、コーディングや数学系のタスクに関して、従前のモデルとの隔絶した性能がAI界隈で話題になっています。

<iframe width="560" height="315" src="https://www.youtube.com/embed/SKBG1sqdyIU?si=aydoGEuDEP9u5oGa" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

Devinはあまりに他の開発系AIエージェントとは隔絶したエンジニアリング性能を誇っているため、他社に先行してGPT-o3を提供してもらっている可能性がありますね。

# 実際の操作方法

記事執筆時点ではDevinはSlackやGitHubとのインテグレーションを提供しており、基本的にはそれを利用してDevinでの開発を進めるかたちとなります。
Devinを使って開発を開始するには以下のようなステップになります。

1. Devin Workspaceに開発対象リポジトリを追加し、Devinが開発を行えるようにする 
(DevinはUbuntu VM内で実際にサーバーを立てて開発を行うため、それができる状態を保存しておかないとタスクの精度がかなり低下します。) 
2. Slack上でDevinにタスクをアサインする(`@devin`とメンションしつつタスクを渡すだけ)
3. Devinが考えたタスクの進め方の確認をする(任意)
4. タスクの結果をSlackやGitHub上で確認する
5. 修正点があればSlackやGitHub上で指摘する
6. 問題がなければマージする

<iframe width="560" height="315" src="https://www.youtube.com/embed/qcaiYD8UTsc?si=aHl7SmaaEbaUpbN1" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

開発用Workspaceのセットアップを除いてはフルリモートで仕事をしているエンジニアとコミュニケーションをするような仕事の進め方になります。

Devinへの指示内容が曖昧だったり、仕事で行き詰まったときには、次に取るべきタスクをいくつかの選択肢を提示しつつ、人間に聞いてくれます。
報連相すらまともにやってくれることは驚きました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/980999/8d316f0d-671e-5c6e-bad2-14ec0205476b.png)

Devinの登場によって、AIエージェントを利用した開発プロセスの自動化が全くの夢物語では無いことがわかりました。

記事執筆時点ではまだ弊社でも「Devinにできること/できないこと」を洗い出すPoC運用中ではあるものの、今まで「エンジニア不足」によって進められなかった多くの開発系タスクがDevinによって大幅に加速できる可能性が見えてきました。

# 最後に

Devinの登場によって、AIエージェントが保守開発や技術的負債の解消においても大きな役割を果たせることがわかりました。

今後、エンジニアがAIを使っていない状態で純粋なコーディングスキルのみでDevinやGPT-o3を利用したAIエージェントと張り合うのはなかなか難しくなりそうです。

ただ、私は[以前の記事](https://qiita.com/lazy-kz/items/e4932f1a90c2a7986ef5)でも書いたとおり、最高のエンジニアリングとは「コードを可能な限り書くことなくビジネスサイドが実現したいことを迅速に実現すること」であり、コーディングはあくまで手段の一つだと考えています。

その観点からすれば、「最高のエンジニアリング」に近づいていくために、Devinのような開発系AIエージェントを最大限に活用していくことは開発組織だけではなく、個々のエンジニアにとっても今後非常に重要なファクターとなりそうです。

私自身もDevinを利用することで飛躍的に開発生産性が向上しています。

弊社でも来年はDevinなどの開発系AIエージェントを利用したAI駆動開発をより本格的に押し進めていきたいと思います。

この記事が皆さんのお役に立てば幸いです。