📘

DevinにCIテストを待たせずローカルでテスト実行可能にし、爆速で開発させる

2025/01/14に公開

はじめに

弊社では新年始まったタイミングでDevinを導入し、一週間が経過しました

Devinは月額$500ですが、これは毎月250ACUのクレジットが付与される価格です
※ ACUとは、使用量を表す単位で、1ACUがおおよそ15分間の使用量となっています

なので色々試している最初の段階などは、ACUを必要以上に使ってしまいますね

なんとかACU消費を抑えて効率的にDevinに働いてもらう必要があります

その中でも今回はSetUp段階での効率化に着目して対応した内容をまとめていきます

というのも、DevinはPRを作成後にCIの実行完了を待機し、ステータスによって修正するので、その待機時間を短縮することができればACU消費を抑えることができます

対応した内容

今回対象としたのは、APIのレポジトリで言語は TypeScript です
ローカルの開発環境は Dev Container で API, MySQL, FirebaseEmulator の3つのコンテナを動かしています

  • apiのアプリケーションをローカルで動作させて npm run test を実行可能にする
  • Devinのレポジトリ SetUp コマンドでテストが実行可能な環境を作成する

ローカルでのテストを実行可能にする対応

対象とした API レポジトリの環境に大きく依存した話なので、Devin の SetUp コマンドで実行可能な状態を作成 まで読み飛ばして頂いても大丈夫です

DevinではDockerコンテナの実行が可能なので、MySQLとFirebaseEmulatorについては引き続きコンテナを起動します

  1. Makefileに記述した db migration の実行のために環境変数を展開可能にする
- MYSQL_HOST := db
+ MYSQL_HOST ?= db

既存の開発環境は docker-compose での命名解決がされているのですが、環境変数が指定されていればそちらを優先するように修正

  1. 環境変数に展開するための .env.sample ファイルの用意

後述するようにDevinにはSetUpのコマンドを指定できるので、ローカル用の環境変数を .env.sample ファイルに準備しておきます

  1. Makefileで .env ファイルを展開するように修正
+ -include .env
+ export

-include.env と記述しておくことでファイルが存在しない既存の利用ケースにも影響が出ないようにします

  1. Vitest の実行時に .env ファイルを読み出す

テストは Vitest を使用していますので実行時に環境変数が解決されるように修正
今回は Vitest 実行時に .env ファイルを展開しましたが、Devinのローカル環境に .env ファイルを展開しておく方針でも良いかもしれません

// Vitest の globalSetup 内で展開
export const setup = async () => {
+  const envPath = ".env";
+  if (existsSync(envPath)) {
+    config({ path: envPath });
+  } 

Devin の SetUp コマンドで実行可能な状態を作成

今回は最初にレポジトリを設定したものを修正するため、設定画面よりSetUp画面に入ります
初めてDevinを利用する場合は最初のレポジトリを選んだ際に同じ画面に来るはずです

  1. レポジトリの依存を設定

VSCodeのWebエディタのターミナル上でコマンドを実行し、依存の解決ができた状態でDoneを押下

  1. 設定を確認&修正する

テストのためにMySQL, FirebaseEmulatorが必要なことは先に述べましたが、加えてPrismaを使用し、TypedQueryも使用しているので、PrismaのgenerateのためにMySQLコンテナにDB Schemaが作成されている必要があります

そういった細かいコマンド設定もここで修正などテストを行い実行を確認します

作業実行時に Knowledge にしていく

あとは、実行時に指摘した内容を Knowledge にして取り込んでいきます

最後に

Devinを使用し始めたタイミングは、PR作成後にCIの実行完了を待機しステータスによって修正する動きに驚きを覚えていました
しかし ACU に限りがある中で働いてもらうためには Devin に仕事をしやすい環境を作ることが必要ですね

AIエージェントが仕事しやすい環境を作る = 人の開発体験も上がる なので既存のワークフローにとらわれずに、人とAIどちらにもフレンドリーな開発体験を引き続き追求していきます

ABEL, Inc.

Discussion