
DevinのAWSエンジニア化計画 サンプルコード生成編
はじめに
今回は、DevinがAWSエンジニアになれるのか調べるため、タスクを与えてみてどの程度こなせるのか確認してみます。具体的には以下の3つを試してみます。
- Lambda上でJavaを実行するための環境をCDKで作成
- Lambda上でJavaとSpring Cloud Functionを実行するための環境をCDKで作成
- Lambdaのコールドスタートを確認するためのアプリを作成
プロンプトや実行環境が若干異なるため、厳密な比較ではありません。Devinと別のAIコードエディタとの比較を通して、新規サンプルの生成というタスクにおける両者の特徴を明らかにし、読者の参考になることを期待しています。
筆者は昔Javaを使っていましたが、Lambda上でJavaを使った経験がないため、その前提に基づいたタスクとなります。
検証対象
今回は同じ内容を複数の方法で試すことで利点が分かると思うので、以下3つの方法を考えます。
- 手作業でやった場合(想定見積もり)
- Devinと人手で作業
- Windsurf(Claude 3.7 Sonnet)のCascade機能を使用
結果だけ気になる場合は、実験結果の章を確認してください。
Lambda上でJavaを実行するための環境をCDKで作成
それぞれに日本語で指示をしてどのぐらいタスクの完了に時間がかかるのか確認します。
タスク1:Devinの場合
以下のようなプロンプトを与えて処理結果を確認してみます。devin-sandboxというリポジトリには事前にCDKの雛形が展開されていて、そこに新たにCDKでLambdaを作成するように依頼しています。
@Devin
- devin-sandboxのリポジトリをクローンしてください
- Lambda上でJavaを動かす簡単なサンプルアプリを作りたいです。
- CDKでLambdaの実装を作成してください
- srcディレクトリを作成し、Lambdaで使うサンプル用のJavaプログラムを作成してください
10分前後でソースの作成が完了して人間へレビューが回ってきました。
実際にPRをローカルに落として確認したところ、いくつかの修正が必要であることがわかりました。具体的には以下の点を修正することでデプロイが可能になりました。
- pom.xmlの作成場所が誤っている(✗src配下、◯PJ直下)
- CDK側のLambdaのソース指定がjarファイルになっていない
この修正を人間側が行うことでデプロイ可能になりました。この作業自体はcdk synthをDevin側の作業に組み込んでおくともっとうまく出来たかもしれないので、後続の作業では試してみます。大体人間の作業と合わせて2時間程度かかりました。コードの途中部分を理解せず作ってもらっているので、少し理解に時間がかかりました。
タスク1:Windsurfの場合
今度は、WindsurfのCascade機能を使って以下のように依頼してみました。
cdkでLambda上でJavaを動かすサンプルを書いてほしいです
すると、ステップバイステップでどんどんコードが更新されます。
またCDKのパッケージインストールやJavaのビルドなど処理が進んでいきます。
10分程度観察していると、ソースが作成されました。このコードをそのままデプロイすると特にエラーなく実行できました。大体の所要時間は10分程度になります。
Lambda上でJavaとSpring Cloud Functionを実行するための環境をCDKで作成
タスク2:Devinの場合
次にSpring Cloud Function上でLambdaを動作させるよう依頼してみます。同じDevinのセッションで追加で依頼してみます。
@Devin
既存のコードをLambda上で動くよう修正しました。
今のコードをSpring Cloud Functionを使ってLambda上で動かすように修正してください。
詳細は省きますが、ある程度Spring Cloud Functionが使えそうな構成を作れました。ただ2時間程度他のタスク行いながら、7,8回やりとりしてエラーの解決を試みましたが解決しませんでした。自分で直接コードを修正したところ、2時間程度かかりました。結果的に、Devinとの協業を通して4時間程度でタスクを完了することができました。
タスク2:Windsurfの場合
今度は以下のようにWindsurfにお願いしてみます。
今の実装をSpring Cloud Functionを使って動かすように修正してください
最初から完成はしなかったですが、Lambdaにデプロイしながらタスクをこなすと6回程度の質問でLambda上でSpring Cloud Functionを動かせるようになりました。タスク完了までの合計時間としては約0.5h程度でした。
Lambdaを何度か実行するShellスクリプトの作成
Lambdaのコールドスタートを検証したかったので、定期的に何度かLambdaを実行するプログラムをそれぞれ作ってもらいます。
タスク3:Devinの場合
@Devin
Lambdaのコールドスタート時間を計測するためのプログラムを書きたいです。
シェルでLambdaを30分おきに実行するコードを書いてください
実装自体は1回のやりとりで完了しました。Devin側で動作確認もしていたので簡単に動くものは作れました。Init Durationが計測対象になるというナレッジもちゃんと持っていました。ただ指定したシェルでなくPythonで実装するという最初の指示を忘れてたりする問題はありました。
タスク3:Windsurfの場合
lambda-invokerのディレクトリ配下にLambdaのコールドスタート時間を計測するためのプログラムを書きたいです。
シェルでLambdaを30分おきに実行するコードを書いてください
このお題に対しては、ほぼ正解のコードを出力し一部実装誤り(Init Duration/Billed Durationを確認すべき部分をDurationを確認していた)を以下のように修正依頼を出すだけで完璧な結果で自分が想定した実装よりも網羅的な内容になっていました。
execution_timeはdecoded_logs内の以下を利用するよう修正してください
- Init Duration: こちらがあればこちら
- Billed Duration なければこちら
結果
結果的には以下のような作業時間になりました。手作業の部分は自分で生成AIなしで手作業でやった場合を想定しています。あくまで一例なので参考程度にご確認ください。
作業概要 | 手動での想定工数 | Devin利用時(手直し含む) | Windsurf Cascade利用時 |
---|---|---|---|
AWS Lambda上でJavaのサンプルアプリを動かす | 8h | 2h | 0.1h |
AWS Lambda上でJavaのSpring Cloud Functionを動かす | 12h | 4h | 0.5h |
Lambda実行して処理時間を確認するスクリプトの作成 | 5h | 0.5h | 0.25h |
上記の結果から新しく動作確認用のプログラムを書いたりする場合は、Devinに依頼するよりもWindsurf Cascadeなどで同期的に作業を行うほうが良いということがわかりました。ただDevinの場合はPlaybookを強化することで、似たようなタスクを大量にこなすことが得意なので、その点も今後ブログにしていきたいと思います。
所感
小さい検証のようなタスクの場合は、AIコードエディタのエージェントを活用したほうが早く解決しやすいことがわかりました。ただDevinの場合は、タスクを少しづつ与えながらPlaybookを育てることで、ほぼ手直し無しでPRを上げてくれるという話も社内で聞いています。非同期的に冗長なタスクを実行してくれるという利点は活かせないタスクだったので、今後はこの利点を生かした部分のブログも書いていきます。