今日から始める AI 駆動開発!〜Devin編〜

こんにちは!スタッフエンジニアの kenkoooo です。estie では自立型 AI ソフトウェア開発エージェントの Devin を使っています。この記事は、社内に既にセットアップされた Devin を使い始める人向けのガイドです。

Devin とは?

devin.ai

Devin とは、クラウド上で動作する AI ソフトウェア開発エージェントです。エディタ上で動く Cursor などと異なり、AI が使う開発環境ごとクラウド上にあり、それぞれのエージェントが専用の VM をもっているので、エージェントを並列に動かすことができます。

アカウントの発行

管理者の人に頼んで invite してもらいましょう。Devin はアカウント課金ではなく実行量の従量課金なので、アカウント発行は気楽にやってもらえるでしょう。

アカウントのセットアップ

招待リンクからパスワードを設定してサインアップすると、次のようなアカウント設定画面が始まります。GitHub アカウントを連携させておきましょう。

リポジトリのセットアップなどもできますが、いったんスルーで大丈夫です。

次に進むと、Slack との連携を求められます。Slack で Devin に仕事を頼めるとラクなので、連携しておきましょう。

この画面にたどり着ければセットアップ完了です。

Devin に指示を出してみる

Devin を設定している Slack チャンネルで @Devin で指示を出せます。指示は、ある程度長くなっても良いので、明確で迷わないように心がけると良いです。現在の仕様では1回のセッションで1プルリクエストを出すのが目標になっているようで、プルリクのサイズが1回の指示のサイズに対応すると考えていただくと良いです。

上手くいった例

上手くいった例をいくつか紹介します。含まれている内容が社外秘過ぎて伏せ字ばかりになって恐縮ですが、できるだけ本物をお見せしたいという心意気を買ってください。

@Devin {プロダクトのリポジトリ} の {サービス名} で *** 内に存在する *** の一覧を取得する GraphQL API を実装していただきたいです
{プロダクトのリポジトリ} に {一つ前の作業で作ったブランチ} というブランチがあるので、まずはここから新しいブランチを作ってください。
{サービス名} の mutation api として、*** の *** を変更できるような関数を実装してください。
*** の *** と *** を渡すと、指定された *** に紐づく *** をすべて消し、新たに *** を渡された数だけ作成してください。存在しない *** が渡されたり、指定された *** が指定された *** と同じ *** に居なかったりした場合は、エラーにしてください。
@Devin {プロダクトのリポジトリ} に {一つ前の作業で作ったブランチ} というブランチがあるので、まずはここから新しいブランチを作ってください。
{サービス名} の mutation api として、*** 内に新しい *** を作成するような関数を実装してください。
*** を渡すとそれで *** を作るようにしてください。
*** が *** する *** 内に *** を作るようにしてください。
上手くいかなかった例

上手くいかなかった例もお見せします。

@Devin {プロダクトのリポジトリ} で、***したとき、***に、***を***したいです。
- ***したときに***は、*** 経由で取得することができます。
  - *** は GraphQL API のサーバーで、*** はそのクライアントになります。
  - *** のスキーマは *** にあります。
  - ***は *** で取得できます。戻り値が *** ですが、これが***になります。
- まずは *** 経由で***から *** を呼べるようにしてください。
- その後、***で***したときに、***から***を取得できるようにしてください。

人によって作業のスタイルは異なるかもしれませんが、例えばウェブサービスでバックエンドで外部のサービスを呼ぶようにするとき、私は以下のようなステップで作業をします。

  1. バックエンドから外部サービスを呼ぶ関数を実装し、プルリクを出す。実装した関数はまだどこからも呼ばれない。
  2. バックエンドの API を実装し、これが叩かれたとき1で実装した関数を呼ぶようにし、プルリクを出す。この API はまだどこからも呼ばれない。
  3. フロントエンドからバックエンドの API を呼ぶ実装をして、プルリクを出す。

上記のプロンプトは、このようにステップで分けられた作業を1つのセッションでやろうとしていますが、現状の Devin は、少なくとも私が使っている感じでは1セッションで1プルリクを出すようにできているようで、複数のプルリクを1セッションで出させるのには向いていないみたいです。

(上記のプロンプトには入っていませんが、やり取りの中で1作業ごとにプルリクを出すように指示していました)

Devin のプルリクをレビューする

Devin はプルリクを出した後も CI のステータスをチェックし、CI が落ちればそのエラー内容を見て修正を試みます。また、プルリクにレビューコメントを追加すると、そのコメントに基づいて作業をしてくれます。

Devin の使いどころ

Cursor などの AI エージェント付きのエディタと比較すると、以下のような違いがあると考えています。

  Devin Cursor などのエディタ
並列度 理論上、無限に並列可 エディタが動くマシンの計算リソースの限り並列可
タスク開始速度 環境構築から始めるため、やや時間がかかる
(事前に Workspace を設定するなどで短縮はできる)
既に構築済みの開発環境でエディタを動かすため、すぐに始められることが多い
割り込みやすさ 時々 Slack で状況を報告してくれるが、基本的にはウェブアプリを見に行かなければ今何をしているかは分からないため、割り込みにくい 手元で動いているため、気になったときにいつでも割り込める
タスクの粒度 プルリクを作るだけでなく、CI やコメントのチェックも自動的に行う プルリク作成や、CI やコメントのチェックは自分でやる必要がある
(ツールと連携させることで、ある程度は自動化可能)

Cursor に比べてやや時間がかかるものの、プルリクの作成や CI のチェックまで行ってくれるため、タスクを任せたら放置して、ある程度したら見に行く、というやり方が良さそうです。今すぐに終わらせたいタスクを投げるよりも、自分が別の作業をしている間にやっておいてほしいタスクを任せる使い方が合う気がします。

最後に

Devin や Cursor をはじめとした LLM を活用した開発ツールは、エンジニアの働き方を大きく変えると思っています。一緒にやりませんか?ご興味あればぜひ。

hrmos.co

© 2019- estie, inc.