Devinと過ごした1か月を振り返って
(answer.ai)Devinとは何か
- 2024年3月、Founders Fund、Collison兄弟、Elad Gil など多くのテック業界リーダーの支援を受け、総額2,100万ドル規模のシリーズA資金調達を実施した新しいAI企業が登場した。
- この企業のチームはIOI金メダリストで構成されており、複雑なプログラミング問題を自力で解決できる能力を備えていると紹介された。
- 彼らの製品であるDevinは、人間の同僚のように対話しながら、新しい技術の学習、既存コードのデバッグ、アプリケーション全体のデプロイ、AIモデルの訓練など、ソフトウェアエンジニアリングの全工程を自律的に処理できると主張している。
- 公開されたデモ動画では、DevinがUpworkの懸賞案件を自力で解決し、PyTorchプロジェクトをインストールして実行した[1]。
- 会社側はSWE-bench基準で実際のGitHubイシューの約13.86%を完全に解決すると主張しており、これは以前のシステムと比べて約3倍優れた性能だと強調した。
- 当初は選ばれたユーザーだけがアクセスでき、SNSを通じてソフトウェア開発を革新するのではないかという期待が広がった。
- Answer.AIチームはAI開発ツールを頻繁に試しているが、Devinはこれまでとは違う何かを見せてくれそうだという直感を抱いていた。
- 実務環境でDevinを直接適用し、さまざまな課題に挑戦しながら使用記をまとめることになった。
初期の成功事例
- 最初に試した作業は、Notionデータベースの情報をGoogle Sheetsに取り込むことだった。
- DevinはNotionとGoogle APIのドキュメントを調べ、Google Cloud Consoleで必要な認証情報を設定する手順を順番に案内してくれた。
- APIの使い方を単に投げるだけでなく、実際のメニューやボタンのクリック位置まで案内してくれたため、面倒な作業時間を大きく減らせた。
- Devinが書いたコードはやや冗長だったが、正常に動作した。
- この経験により、「グルーコード」を代わりに処理してくれるAIの可能性を垣間見ることができた。
- 別のチームメンバーもスマートフォンだけでDevinとやり取りしながら、木星・土星の過去の位置を追跡するアプリケーションを作ることができた。
テストの拡張
- 初期の成功に後押しされ、Devinにドキュメント作成を任せたり、こちらがデザイン作業中にデバッグを依頼したりするなど、非同期での活用も試してみた。
- しかし徐々に、Devinが一見単純な作業でも技術的な行き止まりにはまったり、役に立たない複雑なコードを作り出したりする問題が明らかになった。
- 特に、実際には不可能な作業(例: Railwayで1つのデプロイに複数アプリを同時に載せること)まで無差別に試し、機能を「幻覚(hallucination)」する場面にしばしば直面した。
- 問題は単なる失敗ではなく、不可能な解決策を試すことで時間を浪費してしまう点だった。
問題点に関する深い観察
- Devinがある作業ではかなり有能に見える一方で、別の作業ではなぜ失敗するのか疑問に感じた。
- 1か月使いながら、次の3つのカテゴリに分類して計20種類の作業を試した。
- (1) 新規プロジェクトの作成
- (2) 調査作業
- (3) 既存プロジェクトの分析と修正
- 結果として、20件中14件が失敗、3件が成功(初期の成功事例を含む)、3件が不確定(Inconclusive)だった。
- 失敗と成功を分ける明確なパターンはなく、似たように見える作業でも予想外の形で失敗する様子が見られた。
- 詳細な事例は本文末尾の付録にまとめられている。
1. 新規プロジェクトの作成
- 会社のデモ動画や初期の成功事例を見ると、新しいプロジェクトを完全に作ることはDevinが得意だろうと期待していた。
- しかし実際には、過度に複雑なコード構造を作ったり、簡単なWebスクレイピングすら解決できなかったりする問題が多かった。
- たとえば、Braintrustに合成データをアップロードする作業では、Devinのコードがあまりに複雑で、エラーから抜け出せず失敗した。
- Spiral.computerとAIノートテイカーのCirclebackを連携しようとした試みでも、スパゲッティのように複雑なコードが返ってきたため断念した。
- Google Scholarから特定著者の最新25件の論文情報を取得する作業は、HTMLパースで行き詰まり、まともに実行できなかった。
2. 調査作業
- 単純なドキュメント参照のような基本的な調査作業は、ある程度こなせた。
- しかし、より複雑な問題、たとえば正確なタイムスタンプを保ったままトランスクリプトを要約するような課題では、関連内容をきちんと把握できず、見当違いの例を並べるだけだった。
- DaisyUIの最小テーマを作れという要求でも、実際にはデフォルトテーマの色をそのまま使うなど、成果物は実質的に機能しなかった。
3. 既存コードの分析と修正
- 既存コードと文脈を把握して保守する作業では、Devinの限界が際立った。
- nbdevプロジェクトを扱う過程で、単にノートブックを編集すれば済む作業に不要なPythonスクリプトを追加するなど、非効率なアプローチを試みた。
- セキュリティレビュー作業でも、存在しない脆弱性を指摘したり、主要な問題を適切に捉えられなかったりした。
- SSHキー転送エラーの診断でも、スクリプトそのものだけを掘り下げ、問題が別の場所にある可能性をまったく考慮できなかった。
- ユーザー入力とデータベースの衝突チェック機能を実装する際も、Devinが作ったコードを直すのに時間を浪費した末、結局は自分で90分で実装したほうが早かった。
チームの振り返り
- 1か月にわたる集中的なテストの後、チーム内ではDevinについて次のような評価が出た。
- 「小さくて明確に定義された作業はむしろ自分でやったほうが早く、大きな作業はDevinが失敗する可能性が高いので、あまり役に立たない」 (Johno Whitaker)
- 「最初は少しずつ修正すれば使えると思ったが、結局はより多くの部分に手を入れる必要があり、最初から自分でやるほうがよいと感じた」 (Isaac Flath)
- 「AnswerAIの内部ツールとうまく結び付かず、提供されたドキュメントやサンプルも十分に使いこなせないなど、互換性の問題があった。一方でCursorのようなツールは小さな単位で継続的にフィードバックをやり取りできるので、Devinより良かった」 (Hamel Husain)
- Devinの特徴は大きなステップを自律的に進めることだが、その結果、人間が誤った方向を修正するためにかかるコストがかなり大きい。
- 一方で、開発者が主導しAIが補助する形のワークフロー(Circleback、Cursorなど)のほうがはるかに安定している、という結論に至った。
結論
- Devinと作業した経験は、自律型AI開発ツールが目指す未来像を垣間見せてくれた。
- 特にSlackベースの対話型UIや、Dockerコンテナ内で環境を自動設定する点は、ユーザー体験の面で印象的だった。
- しかし、実際にスムーズに動いたケースは20件中3件しかなく、特に似たような作業でも複雑に失敗することが少なくなかった。
- 「自律的」という特性のため、作業がうまくいかない場合には見当違いの方向へ長時間実行が続く問題が生じる。
- これまでの経験からすると、SNS上の熱狂や高い企業価値が、そのまま実際の生産性や完成度につながるとは限らない。
- Answer.AIチームは今後も、AIが開発プロセスを補助する形が最も実用的だという立場を維持する予定だ。
付録: Devinに任せた作業一覧
- 以下は、Devinに任せたプロジェクトとその結果を簡単にまとめた内容である。
- 4つのカテゴリに分類した。
- (1) 新規プロジェクトの作成
- (2) 調査
- (3) 既存コードの分析
- (4) 既存プロジェクトの修正
1. 新規プロジェクトの作成
-
Planet Tracker
- Status: Success
- Description: 木星と土星の過去の位置に関する主張を検証するためのアプリ
- Reflection: Slack経由でモバイルだけを使ってDevinと会話したが、Devinが大半の作業を自律的に処理し、完成に成功した。
-
Migrating data from Notion into Google Sheets
- Status: Success
- Description: Notion文書をGoogle Sheetsに自動で取り込む
- Reflection: DevinがGoogle Cloud Consoleの設定まで段階的に案内してくれ、初めて「まったく新しい体験」をした。
-
Multi-app deploys on Railway
- Status: Inconclusive
- Description: 1つのRailwayデプロイに複数アプリを同時に載せ、同じDBを共有したいというもの
- Reflection: 実際にはRailwayがこの方式をサポートしておらず、事実上不可能だった。Devinは試行を続け、幻覚的なアプローチを重ねた。
-
Generate synthetic data and upload it to Braintrust
- Status: Failure
- Description: Braintrustプラットフォームにアップロードする合成データを生成したかった
- Reflection: コードがあまりに複雑でエラーを解決できず、Cursorで段階的に実装を進めた。
-
Create an integration between Circleback and Spiral.computer
- Status: Failure
- Description: それぞれのドキュメントを提供したが、Devinがあまりにも複雑なスパゲッティコードを作ったため断念した。
-
Web scraping Papers by Following Google Scholar Links
- Status: Failure
- Description: 特定著者の最新25件の論文情報を取得し、有料論文はスキップする作業
- Reflection: HTMLパースで無限ループに陥り、作業が中断した。
-
Create minimal HTMX bulk upload example app
- Status: Failure
- Description: HTMXのサンプルをFastHTML向けに簡潔に再構成しようとした
- Reflection: サンプルコードが動作せず、不要な要素まで付け加えられていて混乱を招いた。
-
Create a DaisyUI Themes to match FrankenUI Theming
- Status: Failure
- Description: DaisyUIとFrankenUIのテーマを統一して使いたかった
- Reflection: マッピングが正しく行われず、あまりにも大量のコードが追加され、実用的に使いにくかった。
2. Perform Research
-
Research How to make a discord bot
- Status: Success
- Description: PythonでDiscordボットを作り、メッセージを要約してメール送信する方法を調査
- Reflection: Devinは途中でMarkdownファイルに計画をまとめてくれ、最終コードは完璧ではなかったが、概念理解には役立った。
-
Research on Transcript Summarization With Accurate Timestamps
- Status: Failure
- Description: タイムスタンプ情報を維持したまま要約を作る方法を探したかった
- Reflection: Devinは関連トピックを大まかに列挙するだけで、実際の問題解決の方向性は示せなかった。
-
Create a minimal DaisyUI theme as an example
- Status: Failure
- Description: DaisyUIテーマの最小サンプルを見せてほしいと依頼
- Reflection: 実際のテーマは適用されず、デフォルトテーマの色がそのまま使われていた。
3. Analyze Existing Code
-
Performing a security review of a code base
- Status: Inconclusive
- Description: 700行以下のGitHubリポジトリについて、セキュリティ脆弱性の観点からレビューを依頼
- Reflection: 部分的には当たっていたが、実在しない脆弱性を指摘するなど、過剰にセキュリティ問題を挙げていた。
-
Review blog posts and make a pull request with improvements
- Status: Failure
- Description: ブログ記事をレビューし、Quartoベースのソースに合わせてPRを作成するよう依頼
- Reflection: Quartoの構造を学習できず、メタデータやFront matterの扱いが崩れて失敗した。
-
Review an application and identify potential areas of improvement
- Status: Failure
- Description: 以前作成したタイムキーピングアプリについて、包括的な改善案を提示してほしいと依頼
- Reflection: 提案の大半は実効性がなかった。
-
Debug why ssh key forwarding is not working in a setup script
- Status: Inconclusive
- Description: スクリプトでサーバーを設定する過程で、SSHキー転送が機能しない問題
- Reflection: Devinはスクリプトだけを執拗に調べ、問題の原因が別の場所にある可能性に気づけなかった。
4. Modify An Existing Project
-
Making changes to a nbdev project
- Status: Failure
- Description: FastHTML + nbdevで作った時間追跡アプリにApple Shortcuts用APIを追加したかった
- Reflection: Devinはノートブックを直接編集する代わりにPythonスクリプトでノートブックを修正しようとし、複雑さが増した。
-
Migration of Python Project To nbdev
- Status: Failure
- Description: 既存のPythonプロジェクトをnbdevへ移行したかった
- Reflection: 基本的なnbdev設定すらきちんと整えられず、プロジェクトが壊れた。
-
Integrate Styling Package Into FastHTML
- Status: Failure
- Description: MonsterUIをnbdevベースのプロジェクトに組み込みたかった
- Reflection: Devinはnbdevリポジトリ構造を正しく理解できず、失敗した。
-
Add feature to check for conflicts between user input and database
- Status: Failure
- Description: 既存アプリで、ユーザー入力とDBの値が衝突した際にそれを知らせるUIを追加したかった
- Reflection: Devinの試みを最後まで修正するのに多くの時間がかかり、自分で90分で実装したほうがはるかに早かった。
-
Generate LLMs context file with the contents of every fasthtml gallery example
- Status: Failure
- Description: すべてのfasthtmlギャラリー例をLLMs用テキストファイルとして生成するよう依頼
- Reflection: Devinが各サンプルを別々のMarkdownファイルにした点は興味深かったが、実際の作成方法がドキュメントと合っておらず、不要な依存関係を追加するなど問題が多かった。
1件のコメント
Hacker Newsの意見
OpenHandsの作者は、AIはまだソフトウェアエンジニアを置き換える水準には達していないと強調している。AIが書いたコードは、新人エンジニアのコードのように徹底したレビューが必要だ。しかし、AIをうまく活用すれば生産性は大きく向上する。OpenHandsのコードベースの約20%はAIが書くか、共同執筆している。AIはマージコンフリクトの解消やリンターエラーの修正のような単純作業に有用だ。AIは毎週改善されており、競争も激しいと言及している
AIコーディングツールを毎日使っているユーザーは、Devinのようなエージェント型アプローチは過剰な作業を試みていると見ている。AIコーディングツールは開発者を置き換えるのではなく、開発者のためのツールとして位置づけられるべきだ。GitHub Copilotは反復的なコードを補完するのに有用で、Aiderはより高レベルな編集作業を行える。しかし、依然として完璧ではなく、問題解決時に不要な変更を加えることがある
DevinのようなAIエージェントの問題点は、その知能が一定のレベルにとどまっていることだ。時には中堅または上級エンジニアなら数時間かかる作業を数分で解決するが、簡単なミスをすることもある。ジュニアエンジニアの重要な資質は指導可能性だが、AIエージェントは指導できないという点で限界がある
AIが人間のエンジニアを置き換えられるという主張には懐疑的だ。AIは小さな反復作業には向いているが、インフラ管理やアプリのデプロイのような複雑な作業には適していない。AIが人間を置き換えられるという主張を実際に目にするまでは信じないとしている
AIエージェントは必要なときに人間の入力を求められるべきだが、Devinは「ソフトストップ」の状況でそれをうまく行えない。人間の開発者なら数時間後に助けを求めるが、AIは無限ループに陥ることがある
AI画像生成と同様に、AIコーディングツールも初期には驚くべき結果を見せるが、依然として多くの誤りがある。しかし、数年後には驚くような進歩があると予想される。Midjourneyのようなツールは期待と異なる結果を返すことがあり、ユーザーが素早く反復できる機能が必要になるだろう
Devinの使用感を見ると、エージェントは期待に及ばないと評価されている。エージェントは簡単に実装できるが、有用に実装するのは難しい。Devinの限界は、エージェントシステムの発展に対する懸念を呼び起こしている
Devinはあまりに多くを試みており、限られたコンテキスト容量の中でコードアーティファクトを生成することには価値がある。特定の開発ループの要素に集中することが重要だ。Factory AIのような企業はこのアプローチを取っており、製品への関心を集めている
Devinはコード形式やローカルテストの設定を理解するときには印象的だが、不要な変更を追加して別のものを壊してしまうことがある。こうした変更を元に戻せないため、追加の後片付けが必要になる。Devinはエージェント型ワークフローの可能性を示したが、時間の節約にはならないため勧められない
Cursorを多用しているユーザーは、システムを特定の方向に強制する必要があると感じている。LLMが有用なコードスニペットを提示することもあるが、間違った方向に進み始めたら提案を止めて別の方向に誘導しなければならない。Cursorは特にリファクタリングで有用で、多くのタイピングと時間を節約してくれる。