🐈

Devinとの日々を振り返る

に公開

こんにちは。エスマットエンジニアの金尾です。
皆さんはDevinと働いていてつらい思いをしたことはありますか? 僕はあります。
弊社にDevinがやってきてからしばらく経ちました。チュートリアルとも言われる250ACUは早々に使い切り、今ではプロダクト改善タスクをこなしながらいろいろと運用方法を模索している段階です。
devin
支払い上限分まで働くとその後は一切の活動を停止するDevin。
いち労働者として見習いたい。

本記事では、Devinを使ってみた所感および今後の活用についてまとめたものです。

AIエージェントとしての特徴

以下、二ヶ月ほど使ってみての所感です。

  • (他と比較すると)遅い
    Cursorなどの他のAIエージェントと比較すると、Devinの作業スピードは決して速いものではありません。Sessionチャットからその場で都度指示出しすることはできますが、体験としてはあまりよくなく、併走して使うには向いていないでしょう。

  • やらかす
    例えば「ログイン画面のボタンの色を変更して」と依頼するとグローバルのcssのカラー定義を変更してくるなど、目的のためなら手段を選ばないところがあります。これについてはDevinに限った話ではないですが、要件や完了条件を明確に指定してやらないと予想外の挙動を起こすことが多々あります。

  • 自律で作業できる
    セッションと呼ばれる実行単位ごとに独立した環境を作成して作業を行うため、作業の並列化を容易に行えます。

総じて、最後の「自律で作業できる」がDevinの一番の強みだなと感じています。
作業が多少遅くつたなくとも、投げっぱなしにできるというのはそれだけで強いです。しばらく使っているうちに、だんだん(あ、今Devin稼働してないな...)(もったいないな...)とそわそわするようになっていました。Devinには中毒性があります。

しくじりと学び

[しくじり] 雑に依頼して暴走する

何はともあれ、公式の必須ガイドライン[1]に目を通し、依頼内容のイメージを固めてからDevinを使い始めるのが良いです。脚注のリンク先にまとまっていますが、代表的なプラクティスとして

  • 小さいタスクに分解する
  • 作業内容・完了条件を明確に定義する

があげられます。

「どれAIエージェントとやらのお手並み拝見」と定義の曖昧なタスクを雑に指示すると、ほぼ間違いなく暴走します。謎ポイントでハマった後は同じ処理を延々ループし、やがてセッションのACU制限に達して作業を停止します。

[学び] 公式を読み、得意分野をまかせる

Devinは軽微な修正が得意です。作業環境なども依頼ごとに自身で立ち上げる自己完結型であるため、Devinが得意な作業であれば、気軽に渡すことができます。例えば割り込みでバグ修正依頼を対応する際の作業などは、左から右のように変化しました。

修正のためにいちいち現在の作業ファイルを退避させるなどのわずらわしさがなくなり、ただちに本来の作業に戻ることができます。タスクの種類や難易度によっては該当コードの調査からまかせることもできるでしょう。スイッチングコストの削減もさることながら、着手のための心理的ハードルが下がることも大きいです。調査の結果、Devinにまかせるのが難しそうな場合はもちろんそのまま自身で作業することもできます。
 この手の依頼はSlackやプロンプトからでもよいですが、公式が用意しているVSCode拡張[2]がすこぶる便利です。該当コードを調査後、Cmd+Gでそのまま依頼作成、進捗追跡までをスムーズに行うことができます。インストール後ログインのみですぐ使い始めることができます。

依頼からPR確認までをエディタ内で完結できる

[しくじり] 大きな修正だと依頼/レビューが追いつかない

先述の通り、Devinに作業をしてもらうには、課題をよく定義された小さいタスクに分割してやる必要があります。
つまり、一定以上の規模の機能でDevinを活用しようとした場合、以下の課題が発生します。

  • 詳細なタスクを大量に用意する必要がある
  • そこから作成されたプルリクエストを大量にレビューする必要がある

実際、そこそこの規模の改修でDevinをフル稼働させてみたところ、タスク準備と進捗確認とPRレビューに追われて一日を終えることになりました。

https://x.com/hono3bono3/status/1891453190052126969

Devin向けにタスクを作成している間に前のタスクのレビュー依頼がきて、と如実にボトルネックが自分に移っていることを実感しました。slackで依頼していると、何をどこまで依頼してレビューしたかがわからなくなってしまうことも多々ありました。

[学び] 進捗管理を外部化する

進捗管理はDevinに自身に記述できる場所で行うようにしました。issueや進捗管理用のファイルをあげておくことで、作業の再開、他のAIエージェントやヒトとの分業も容易になります。

進捗をmarkdown管理にしてチェックリストをDevin自身に更新させるイメージ図

[学び] 依頼作成を自動化する

依頼の作成作業そのものを省力化するため、Devinへの依頼プロンプト自身を別のAIエージェントに作成してもらいます。DevinはAPI[3]を提供しているので、MCP Serverを作成するのも容易です。
自分の場合、

  1. claude codeでコードベース調査
  2. 壁打ちして作業タスクに分解
  3. そのままDevinにMCP経由でまとめて依頼

という流れでやることが多いです。フォーマットなどをプロンプト化しておけばスムーズに依頼作業を終えることができます。

[学び] 安全に作業できるプラクティスを活用する

Devinの活動が増えてくると、小さいPRを安全かつ大量にマージしていく必要があります。

  • Feature Flagで本番ユーザから隔離してコードをデプロイする
  • スプラウトクラス/メソッドで段階的にコード変更する

これらデプロイ頻度改善などのプラクティスはそのまま有効なものが多いです。

[しくじり] それでもやっぱり暴走する

タスクを小さくして依頼するのはもちろんですが、それでもなおDevinは暴走します。コーディング規約を守るよう指示しても無視することも多く、謎ポイントでハマった後は同じ処理を延々ループし、やがてセッションのACU制限に達して作業を停止します。

[学び] すべてをDevinでやらない

Devinにすべてを任せるのではなく、linterや自動テスト、plopなどのコード生成ツールなど、LLMに頼らず自動化できる部分は自動化します。
これにより「規約を読み、その通りにテンプレートコードを作成し、依頼内容の処理を書く」から「所定のコマンドを実行し、依頼内容の処理を書く」と省略されます。Devinにもレビュアーにも優しくなり、コンテキストの削減も期待できます。ツール作成にも当然Devinを活用可能です。人がコードを書く場合でもこれらは有用であり、Devinへの過度の依存を防ぐことも期待できます。
 また、たとえ指示していたとしてもツールを使ってくれないこともあるので、linterなどはpre-commitなどで確実に実行されるようにしておくようにしておくのが望ましいです。

まとめ

非常にクセのあるDevinですが、プロダクトのデプロイ頻度も如実に上がり、改善を実感しています。「退勤前に依頼して翌朝確認」のような使い方はまだ難しそうなものの、使いどころがマッチすれば非常に素晴らしい働きをしてくれます。
現在はPoC期間ということもあり、いろいろな使い方を試行錯誤している段階ですが、今後は大規模改修でのさらなる活用やコスト面での最適化なども図っていきたいところです。

脚注
  1. https://docs.devin.ai/essential-guidelines/when-to-use-devin ↩︎

  2. https://marketplace.cursorapi.com/items?itemName=cognition.devin ↩︎

  3. https://docs.devin.ai/api-reference/overview ↩︎

株式会社エスマット

Discussion