Devinと人類に残されたクリップボード運搬業
Devinやってみたブログ
はじめに:20ドルでDevinに入門

Devin 2.0の大型アップデートが来て料金的に個人でも使いやすくなったのもあり、VS Code拡張で開発できるようになったぞ、と噂を聞いて、このタイミングで入門した。
まずVS Code拡張をダウンロードしてきてminifyされたソースコードを解析した。多分、入門の順番としてはおかしいんだけど、この機能が一番気になってたから先にやった。ただ調べてみた結果、この拡張機能自体は、2.0アップデートで新しくなったというより、できることは今年の2月の時点で出てたものと同じだった。
Devin VS Code拡張はどのようなものか
これは普通にマーケットプレイスからインストールできる。
主な機能としては、Devinが作業したプルリクエストの差分をローカルにチェックアウトしてきて、レビューや動作確認ができる点だ。もちろん、GitコマンドやGitHub、SSHリモート接続拡張なんかを駆使すれば同じことはできるんだけど、この拡張にはDevinとのチャット機能なんかが統合されている。そのために、拡張機能内に自前のDiffビューワーも実装されてた。
基本的にはWebからDevinにアクセスした時に使えるダッシュボードと、できること自体は同じだと思う。でも、ユーザーのローカルマシン上で直接これらが扱えるっていうのが利点になる。Devinが作った叩き台をローカル環境で、Cline氏でぶち壊す、なんてことも気軽にやりやすいのでは。

ちょっと中身の話になるけど、アーキテクチャはこんな感じらしい:
- Web: VS Codeのパネルに表示されるReactのSPA(シングルページアプリケーション)で、チャットセッションを管理している。
- Extension: Web側から呼び出されるコアなJavaScriptロジック。ここでVS CodeのAPIを呼び出して、Diff表示なんかに利用しているみたいだ。
実践①:既存ツールへの新機能追加 (AskrepoのGlob対応)
まずは、拙作のコマンドラインツール「Askrepo」に新機能を追加してもらうことにした。これは、任意のファイルをまとめて圧縮し、LLMに1ショットで送るためのツールだ。自分しか使ってないニッチなやつなんで、各種AIエージェントの実験台にはちょうどよく利用している。
今回やりたいのは、LLMにGlobパターン(**/*.tsなど)でファイルを指定できるようにすること。今まではディレクトリ単位でしか渡せず、関係ないファイルまで混じりがちだった。
開発プロセスはこんな感じ。まずはCopilot Chatにやりたいことを伝えて、設計を手伝ってもらった。方針が決まったら、その内容をDevinに指示できるようCopilotに整形してもらう。人間である筆者の仕事は、もはやクリップボード運搬業のみ・・・。

整形された指示テキストをVS Codeの拡張に貼り付けて送信。するとDevinのセッションが始まって、自動で開発が進み、数分後にはプルリクエストが作成された。
このプルリクエストに、今度はレビュー担当としてCopilot Reviewをアサインしてコメントを入れてもらうと、Devinがそのコメントに応じてコードを修正してくれた。
最後に、VS Code拡張上で差分を確認しつつ、ローカルで実行してみたら、ちゃんとGlobでファイル指定できた。コードの詳細はよくわからんけど、動いたからヨシ!としてPRをApproveした(余いらなくない?)。

ここまでの作業で消費したのは 0.91 ACU(初期に購入したのは10 ACU)。
実践②:Devin Searchで相談してからCI環境構築
次に試したのがDevin Search。自分のリポジトリを解析して、その内容について質問できる機能らしい。Askrepoじゃん・・・。ただ、Devin Searchはリポジトリ全体に対して質問する感じみたい。似たようなことはGitHubのWebからCopilot でもできるけど。
早速、「このリポジトリにはCIがないのですが、どうやったら追加できますか?」と聞いてみた。さっきCopilot Chatとやったみたいな設計の相談も、Devin自身とできるっぽい。そこでもらった回答を整理して、「それを実施する手順を記述してください」とお願いして、Devin自身が行う手順書を作ってもらった。

その手順書を、そのままDevinのセッションウィンドウにコピペ。ここでも人間の本質はクリップボード運搬業。
そうするとDevinがCIのセットアップを開始。途中、VS Code上で警告が出てたんで「このエラーは何?」って質問してみたけど、スルーされた。続けて作業のDiffを見てたらDenoの1系を使ってたんで、2系を使うように指示した。

すると、この結果をKnowledge(知識ベース)に登録するよう促されたので、記録してもらった。こういう風に作業途中で口出しもできるみたいだ(スルーされたけど)。

次にDevinが詰まったのはCIの中の deno fmt のチェック 。たぶん、既存コードがちゃんとフォーマットされてないのがエラーの原因だろう。Devinに、一旦フォーマットを全部やり直してpushしてもらうように依頼。どうやら修正できたらしい。

ただ、コミットが散らかってたんで、「Squashしてコミットメッセージを整えて」とお願いした。すると、元のPRは閉じて、新しいPRを出し直してくれた。これでCIもパスするようになって、めでたしめでたし。
かと思いきや、差分をよく見ると、さっき「フォーマットします」って言ってた修正が消えてる。怪しいのでセカンドオピニオンとしてCopilot先生にも聞いてみる。Copilotによると、CI上でフォーマットチェック (deno fmt --check
) をせずに、CI上では雰囲気で再フォーマットした気分になって、結果的に元のフォーマット問題を無視してた(結果を捨ててた)。

解決策(deno fmt
に--check
オプション追加)もCopilotに教えてもらい、それをDevinの野郎に伝達。人間はクリップボード運搬業。すると、すでに記憶をなくした綾波レイみたいなDevinが、「言ってくれればやりますけど?」みたいな感じで対応して、「既存コードがフォーマットされてないんでエラーになりますね」と言い出した(タイムリープ!? )
なので再度修正してもらった。でもこの見直しのおかげで、リポジトリに残ってた古いビルドファイルの痕跡も見つけることができた。(このプロジェクトは最近ノリでRustからDenoに移行した)この箇所をプルリクエスト上でコメントして追加修正してもらい、無事マージ完了した。
ここまでのトータルコストは 3.61 ACU / 9 ACU。
実践③:Devin Wiki
これは、登録したリポジトリを分析してドキュメント化してくれる機能だ。Devin Searchとは補完的な関係にありそう。
試しにAskrepo(せいぜい1-2k行程度のコードしかない)で使ってみたら、10数ページにもわたる大量の技術ドキュメントが生成された(じゃあこれをZennに投稿しておいて!)。

正直、これのうまい使い道はまだよくわかってない。社内リポジトリの設計ドキュメントを自動生成するとかに使う? ただ、現状だと生成されたドキュメントは検索できるけど、編集はできないっぽい。
終わりに
噂には聞いてたけど、Devinはかなり使いやすいAIサービスで、満足度は高かった。
「ジュニアレベルの簡単な作業しかできない」「ローコンテキストに全て落とし込むまでが大変」「なので使い所がわからない」という意見も聞いていたが、他のAIサービスと組み合わせたり、コード直編集やSSHできるので自分でヘルプに入ったり、サポートできる余地は結構あるのでなんとかなりそう。
個人的な話だが、最近デスクトップや自宅サーバーでUbuntuを触っている経験から、セットアップのような細かい作業の勘所が多少わかっていたので、Devinのようなツールにも比較的スムーズに入門できた感はある。
今後はもっと複雑なタスクを任せてみるなど、しばらくDevinを活用していきたい。
PS: 紹介リンクです。どうぞ