DevinにVitest移行させたら数分で5000円溶けた [人間がやったほうが安い]
これは5000円かかっても何も進捗が得られなかったが結構悔しかったのでせめてもの抵抗でPRにコメントしたところです。
この記事は最近話題のAIエンジニア「Devin」 を使ってライブラリ開発をしてみた体験談です。
Devinのセットアップから始まり、
上手く行ったケース
- npmライブラリを公開しドキュメントを書いてもらった = 3300円💸💸
何も成果が得られなかったケース
- テストフレームワークを変えようとして失敗 = 5000円💸💸💸
などを紹介しています。OSS上での作業だったためPRのリンクなども載せていますので、Devinの修正など自由にご覧いただけます。
ぜひ最後までお楽しみください
Devinとは?
Devinは、GitHubリポジトリを連携し、特定のタスクを自然言語で指示すると、ソースコードの生成やテスト、修正まで自動で提案してくれます。
この手の自律型AIツールは最近増えてきましたが、Devinは自然言語から実際にGitのブランチを切り、Pull Requestを投げるところまでやってくれるのが強みです。
ブラウザとVSCodeを使うことができ、Slack, Githubの権限を渡すことでそれらを駆使し、まるでリモートで作業しているエンジニアの様にタスクを行ってくれます。
私はOSSライブラリの開発で活用したため、実際の指示内容や修正過程をお見せしても問題ないので、みなさんの参考になればと思います。
中規模プロジェクト(運用3年超、下記の通りファイル数・トークン量がそれなりに多い)に対してDevinがどの程度有効かを試してみました。
作業レポジトリ:
- Total Files: 331 files
- Total Chars: 18,805,734 chars
- Total Tokens: 11,829,107 tokens
作成してもらったライブラリはすでにnpmで公開しておりドキュメントも書いてもらいました。
※為替レートは 1 USD = 152.09 円 を使用。
セットアップ
まずはリポジトリとDevinを連携し、オンボーディングを済ませるまでの流れです。
-
レポジトリへのアクセス権限を付与
個人アカウントとオーガニゼーションで切り替える場合は、都度GitHub連携の設定が必要。
-
依存のインストールとテスト実行
Devinが自動的にプロジェクトのnpm install
やyarn install
を実行できるように準備します。
-
初期指示の送付
セットアップが完了すると、リポジトリに対して指示をどんどん送れるようになります。
Note: オンボーディングがめんどくさいプロジェクト、今のうちに整備しておいた方がいいぞ...!
うまくいった作業
新しいパッケージの開発
- 最終成果物: https://github.com/pdfme/pdfme/tree/main/packages/manipulator
- PR #712
- コスト: 9.94 ACUs = 約3,023円 💸💸
どのように指示を出したか
- 新規パッケージ用の雛形(ディレクトリ、テストファイル、
index.ts
のコメント)を用意する。
- イメージ的には新人くんに仕事を任せる前にコメントで「ここでxxする」とかを描いてあげるイメージ
- これ自体はGitHub CopilotやChatGPTでほぼ生成できるので面倒ではない。
- Pull RequestをWIPの状態で出しておき、「TODO部分を実装&テスト書いて!」と促す。
- 参考:
- 参考:
結果
指示を受け取ったあとはDevinが自動的に4つのサブタスクに分割し、数分置きにPRを投げてくれ、レビューを求めてきたので、そのままレビュー&マージ。大きな不具合もなくスムーズに進行しました。
例: https://github.com/pdfme/pdfme/pull/715
PRを上げるまでにコメントを元に実装し、テストも自分で作ってPassするところまでやってくれるのでかなりありがたい。
所感
-
雛形を先に作ると早い
新規ディレクトリ作成やインターフェース定義など、プロジェクトの方針に合わせた初期セットアップは人間側でやってしまうのが吉。あとは「TODO: 実装よろしく」のコメントを入れておくとDevinが埋めてくれる。
後からインターフェースが思ったのと違うとかで文句つけるなら最初からそこだけ握っておいた方がいいです。 -
簡単なテストならDevinに任せられる
ただし画像を使ったビジュアルリグレッションテストのようなマニアックな内容は厳しい(特に今回はPDFを一度画像に変換しないといけないというものでした...)。
過去に類似実装がないと、Devinが途中までしかやってくれないケースあり。
これも絶対にチェックしたいケースがあるなら初めにコメントなり何なりで伝えておく必要がある。 -
ChatGPTとの連携も有効
テストケース案とかがいい例だと思いますが、ChatGPTに考えさせて網羅できているかレビューしてそのまま自然言語で渡し、実装はDevinにやらせる、という二段構えが結局一番早いかも?
既存の実装からドキュメントを書かせる
- 最終成果物: https://pdfme.com/docs/manipulator
- PR #719
- コスト: 0.94 ACUs = 約285円 💸
「ここにドキュメントを書いてほしい」という指示だけで、既存コードを解析しながら無難なドキュメントを生成してくれました。
所感
-
実装が明確な部分のドキュメント化はコスパ良し
クラスや関数の説明など、機能的に素直なコードなら非常に助かる。 -
複雑な概念やプロダクト特有の要件は手引き必須
「なぜそう実装しているのか」「背景となるドメイン知識」などはAI任せだと表面的な説明になりがち。適宜人間の注釈を入れると完成度が上がる。
うまくいかなかったやつ
JestからVitest へ書き換えさせる
- PR #713
- コスト: 16.4 ACUs = 約4,988円 💸💸💸
結構大掛かりなリファクタリングになってしまい、マイグレーションがうまくいかず修正が多発。
小〜中規模の変更ならDevinでもいけますが、フレームワークごとの切り替えのような大改造はまだハードルが高そうです。
他にもlintのwarningを修正させるとか、修正範囲が多いものに関してはコストも嵩むし現時点ではDevinに任せるべきタスクではありません。
スコープが大きすぎて 10 ACUs 以上になりそうなタスクはそもそもタスクとして曖昧で最後までやりきることができないのにコストはかかってくるので気をつけた方が良いです。Devinは魔法じゃない!
技術的カツアゲに合わない様にAIエンジニアのマネジメント能力を上げたいところです。
まとめ
よかった点
-
タスクの途中から始めさせたり、途中でバトンタッチが可能
WIPのPull Requestを立てておいて「ここを埋めて」方式が相性抜群。 -
ChatGPTとの連携がしやすい
設計プランはChatGPT、実装やテストはDevinと役割を分担でき、作業もスムーズに完了することができる。 -
並列タスクが投げられる
Devinが複数ブランチを同時に操作できるので、単純な作業を同時進行させたいときに便利。
↑ しばらく使って感想が変わった。 定期的にこちらからインタラクション必要だし、並列して5~15分で帰ってくるタスクをハンドリングしてるとアホの仕事みたいに進んでる感はあるが、なんも進んでなかった。自分が注意散漫なだけかも。並列タスクでうまくいった話じゃなくて例を見てみたい。
ハマった点・意外な気づき
-
GitHub連携の切り替えが面倒
個人アカウントとオーガニゼーションを並行で使うのは現状難しい。OSSで使う場合は個人にDevinを紐づけてフォークする形が良さそう。そもそも個人で契約するというか組織にチームの一員として入ってもらう感じで使う様にデザインされていると気がついた。 -
エラー修正は強いが、大雑把な指示は苦手
「雑にやって!」だと的外れな実装や修正を繰り返す。具体的なToDoや方針を与える方が望ましい。
プロモーションコード
Devinのリファラルキャンペーンです。下記リンクから契約すると +100ACUs ($200相当) が付与されるので、もし興味があればぜひどうぞ。
https://app.devin.ai/invite/KyOTXVPrlFl2TjcT
Discussion