メインコンテンツへスキップ
本番環境で稼働しているアプリケーションのほとんどは、コードカバレッジが 100% ではありません。エンジニアリングチームはシビアに優先順位を付ける必要があり、限られた時間から最大の効果を得るために、クリティカルパスのテスト作成に注力しがちです。Devin は、コードベースの既存のテストスイートのスタイルを分析し、クリティカルではないものの依然として重要な関数のカバレッジを拡大することで、このギャップを埋めることができます。
この例では、RealWorld 仕様に基づくオープンソースの Typescript サンプルアプリケーションを扱います。このアプリケーションにはすでにいくつかテストがありますが、カバレッジは十分に網羅的ではありません: https://github.com/SeuRonao/realworld-express-prisma
完全な Run はこちらから確認できますし、そのままこの後の本文を読み進めて、Devin のプロセスの各ステップの要点を追っていくこともできます。この投稿では、Editor や Shell など、Devin の Workspace のさまざまな部分を順に取り上げていきます。
まず、Devin に開発環境のセットアップと、アプリケーションの既存コードカバレッジの評価を行うよう指示するシンプルなプロンプトから Run を開始します。
Devin はシェル内で、まず GitHub からリポジトリをクローンし、README ファイルを読み取り、ローカル環境にプロジェクトの依存関係をインストールします。
続いて Devin は、内蔵エディタを使って .env ファイルを作成し、アプリケーションをローカルで実行できるようにします。Devin と一緒に作業する際は、VS Code を自分で開いて手動で編集したり、Devin が作業しているファイルを確認・レビューしたりすることもできます。
続いて Devin は、自身の Shell でテストスイートを実行します。Devin の大きな利点の 1 つは、チームのコードを変更・作成できるだけでなく、自身の Browser と Terminal から直接作業し、コードベースや開発環境、さらには稼働中のアプリケーションに対して、より高レベルな操作を行えることです。
以下のように、Devin が Shell での結果をどのように解釈し、より人間が読みやすく要点を絞った形にしてチャットに反映しているかがわかります。
ここから、実際のタスクであるコードカバレッジの向上に進みます。デフォルトではほとんどカバレッジがないことから、profileViewer.ts が最初に取り組むのに適した対象のようです。次のステップについて Devin にプロンプトを入力すると、プロセス全体を通して何が起きているかを逐一報告してくれます。
Devin は既存のファイルを読み込み、そこにある機能に基づいてどのようなテストケースを実装すべきかを判断し、介入なしで実際に新しいテストを書いてくれます。新しいテストケースの実装が完了すると、Devin は行った変更内容の最終的な概要を示してくれます。
Devin は新しいファイルも共有してくれるので、それをダウンロードしてレビューできます。あるいは、この新しいファイルをもとに GitHub 上で直接 Pull Request を作成するよう Devin に依頼する こともでき、その場合は通常のコードレビュー プロセスの一部として確認してもらえます。ここではファイルをダウンロードする手間を省くため、Devin に組み込まれているエディタ上でそのままレビューすることにしました。
全体として変更内容は良さそうですが、見落としている実行時バグがないことを確認したいので、テストスイートをもう一度実行して結果を報告するよう Devin に依頼します。
テストは期待どおりに実行され、関数のカバレッジは 28.57% から 57.14% に向上し、まさに達成したかった目標を満たせました。途中で席を外して Devin への次の指示を出すまで時間が空いたにもかかわらず、実装にかかった Devin の実作業時間は 10 分もかかりませんでした。テストカバレッジの向上という煩雑なタスクは、Devin に委任するだけでエンジニアリングチームのバックログから取り除くことができます。
もしテストカバレッジを上げるために頻繁に Devin を使うのであれば、このプロンプト自体を 詳細な Playbook にしておくことで、アプリケーションのさまざまな部分に対して新しい Run を簡単に開始できるようにできます。Devin がどのような種類のプロンプトと相性が良いかをさらに知りたい場合は、Docs にある examples を参照してください。