😈

Devinを使ってみた

に公開

弊社にDevinが試験的に導入されたため、Devinにやってみてもらったことをまとめようと思います。
https://app.devin.ai/

StoryBookファイルの作成

私の担当しているプロジェクトではStoryBookを導入しています。しかし、開発に追われるとどうしてもStoryBookファイルの作成を後回しにしがちで、作り忘れてしまうケースがありました。そこでまずは、フロントエンドのコンポーネントに対するStoryBookファイルの作成をDevinにお願いしました。

実際のプロンプト

@Devin

〇〇リポジトリの〇〇.tsx のStoryBookファイルを同じディレクトリ階層に作って。

既存のこのファイルを参考すること。
〇〇.stories.ts

この程度の粒度の指示でも、Propsなどをしっかりと網羅したStoryBookファイルを自動生成してくれました。
さらに、同じ要領で以下のように複数のコンポーネントに対してStoryBookファイルの作成をお願いしました。

次のタスクに移ろうか。
今度は同じ要領で`src/stories/form`配下のコンポーネントで、StoryBookファイルが存在しないコンポーネントのStoryBookファイルを作って。

すると、Devinは未作成のコンポーネントを自動でリストアップして確認を取ってくれるなど、タスクを理解したうえで助言してくれたのでスムーズに進みました(ファイル名は伏せています)。

For the new task, I've identified the following components in src/stories/form that don't have story files:
- 〇〇.tsx
- 〇〇.tsx
- 〇〇.tsx
- 〇〇.tsx
- 〇〇.tsx
- 〇〇.tsx
- 〇〇.tsx
- 〇〇.tsx
Would you like me to create story files for all of these components, or should I focus on specific ones?

合計25個くらいのコンポーネントのStoryBookを作ってもらいました!
自分でやるとPropsなどを網羅するのがまあまあ大変だったりする作業なのでとてもありがたいですね。

バックエンドのサービスロジックのテストの作成

次に、NestJSで作られているバックエンドの単体テスト作成を依頼してみました。既にテストカバレッジが高かったので、本当に簡単なメソッドを対象としたテストをお願いしましたが、問題なく実装が進みました。

プロンプト

@Devin

〇〇リポジトリの〇〇クラスの〇〇メソッドの単体テストを〇〇.spec.tsに追加して欲しい。

該当メソッドを読み取ったうえで、予測されるテストケースを網羅的に書いてくれました。もっと複雑なメソッドでも対応できそうなので、機会があれば引き続き任せてみたいところです。

新規APIの開発

新しいテーブルに対してのCRUD操作(Delete以外)を作ってもらいました。
実際のプロンプト

〇〇リポジトリに新しいAPIを立てて欲しい。 schema.prismaに定義されてる〇〇テーブルに対してレコードを作成するAPIを作って欲しい。 〇〇テーブルに対しての処理を書く一連のファイルはまだ存在しないのでまずは「./scaffold.sh 〇〇」を実行してファイルを用意するといいよ。

APIの具体的な要件は以下のとおり
受け取るパラメータ(Create〇〇Inputとして別ファイルで定義してね)
- 〇〇(number、必須)
- 〇〇(string、必須、100文字以内)
- 〇〇(string、必須、1000文字以内)
- 〇〇Flag(boolean、必須)

認可制御に関しては一旦気にしなくていいよ。

上記の指示で一旦シンプルにデータ作成できるAPIは問題なく完成しました。
もちろんここまでシンプルなAPIではないので、追加の要件を依頼しました。

追加の要件があるのでこれも満たすようにしてほしい。
パラメーターで受け取った〇〇Flagがtrueだった場合はユーザーにメールを送るようにしたい。 MailServiceクラスがあるからそれをインジェクションしつつ、送信処理はそこに書いてね。
メール本文の内容は〇〇と〇〇だけejsに渡しておいてくれれば、あとは俺が考えるから適当でいいよ。

これも問題なくクリアかと思われたのですが、データベース操作の前にメールを送信する処理になっていました。Devin君はジュニアエンジニアらしいので仕方がないですね。
プルリク上で「メール送信はDB更新が確実に成功して行うようにして」とコメントをして修正してもらいました。

上記以外にも命名規則の点だったりなどの細かい点を指摘しましたが、一通り必要なAPI計6個をDevinに揃えてもらうことができました。特に指示してないんですけどテストも書いてくれてました。

感想

実際にDevinを業務で使ってみて「CIが通るまで責任をもって修正してくれる点」がありがたかったです。Devinはプルリクエストを出す前にCIが通過することをしっかりと確認してくれるため、レビュー時にCIエラーに関する指摘をしなくて済みました。また、フォーマットコマンドの実行もやってくれるため、小さな手間が省けて非常に助かります。

さらに、StoryBookファイルやバックエンドの単体テスト作成など、ある程度パターン化された作業については、ざっくりとした指示でも想像以上に正確で網羅的な成果物を提供してくれました。特にコンポーネントのStoryBook作成は自分でやるとPropsを漏れなく網羅するのに手間がかかるため、効率化の恩恵を大きく感じました。

一方で、新規APIのような比較的複雑でコンテキスト依存が強いタスクの場合、使い手側が要件を的確に伝えるスキルを試されるかなあと感じました。また、一つのセッションが長くなるとどんどんDevinの精度が悪くなるので、セッションを細かく区切って指示を出したほうが良さそうでした。
少し使ってみただけですが、これ(AIエージェント)を使いこなせることがこれからの開発の大前提となってきそうだなと感じました。

GMOメディアテックブログ

Discussion