🤖

Devin縛りで技術的負債を解消する日を作ってみた

に公開

はじめに

私たちのチームでは、毎月SparkJoy Dayという専用日を設けて、日常業務から離れ「技術的負債の返済」や開発環境の改善に集中しています。

https://zenn.dev/mybest_dev/articles/bc7cb2c71e1f2b

先月の SparkJoy Day では、実験的にAI開発アシスタント Devin だけを使って技術的負債を解消するというチャレンジを行いました。

SparkJoy Day × Devin縛りの企画

きっかけ

2月上旬からDevinの社内トライアルを始めていましたが、ドメイン知識が必要な実装がやや苦手なイメージがありCursorやCopilotに比べて利用される頻度が低いという課題がありました
そこで、

「いっそ全員Devinだけで1日開発してみたらどうなる?」

という提案が定例ミーティングで採択され、本企画が生まれました。


定例のmtgで提案したところ実施することに

提案後、約1週間ほどで実際に企画を実施しました!

企画の目的

SparkJoy Dayは、通常の開発業務から離れて技術的負債の解消や開発環境の改善に集中する日です。今回は以下の目的でDevin縛りを企画しました。

  1. 技術的負債の効率的な解消: AIの力を借りて、より多くの技術的負債に対処する
  2. Devinの可能性の検証: 実際の開発現場でDevinがどこまで役立つか検証する
  3. チームのAIリテラシー向上: 全員がDevinを使うことで、AIツールの活用スキルを高める

「Devin縛り」のルール

「Devin縛り」のルールは以下の通りです。

  • 技術的負債の解消作業は全てDevinに依頼する
  • 担当者は基本的にはDevinへの指示出しと、生成されたコードのレビューのみでタスクを行う
  • 最初の依頼は Slackから行い、実行したタスクや消費したACUはNotionでまとめる

このルールにより、AIツールの限界と可能性を明確に把握することを目指しました。

また、参加メンバーがどんなタスクをDevinに依頼するかを判断しやすいように、適したタスクとそうでないタスクを分類して共有しました。

適したタスク

  • リファクタリング(特に同じパターンの繰り返し作業)
  • テストコード作成
  • Dependabotによるライブラリアップデート対応
  • 小〜中規模の機能追加
  • 定形的なバグ修正

避けるべきタスク

  • 複雑なアーキテクチャ設計
  • 高度な性能最適化
  • セキュリティクリティカルな実装
  • 特殊なドメイン知識を要する実装
  • 複雑なビジネスロジック

前提として準備していたルールなど

今回のSparkJoyDayに限らず弊社で整備していた運用ルールになります。

  • あくまでDevinと共同作業で作成したPRという立ち位置なのでで、リリース前には別のメンバーからApproveをもらってからリリースする
  • 機密情報や個人情報は入力しない
    • APIキー、ユーザーデータなど
  • 使わない時はSLEEPする
  • 意図しない挙動やバグが発生した場合はSlackの専用チャンネルで報告する
  • セキュリティリスクがないかBrakeman(静的解析ツール) を通す

またプロンプト例などはNotionにまとめたり、良さそうなものは適宜知見を共有するなどしていました。

Devinに依頼したタスクはうまくいったかと使用したACUや感想などをNotionにまとめるといったルールも整備していました。

成果

1日で27個のPR

SparkJoy Day当日は、朝9時から夕方6時までの間に、チーム全体で27個のPRを作成することができました。これは通常の約3倍のスピードです。

PRの内容は多岐にわたります

  • パフォーマンス改善
  • テストカバレッジの向上
  • 認証認可の改善
  • Flakyテストの改善
  • 事業課題など

特筆すべきは、27個のPRのうち2個が当日中にレビュー・マージされ、本番環境に反映されたことです。これは即時的な効果が見込める改善だったため、優先的に対応しました!

得た学び

Devin環境セットアップの最適化

Dockerでの開発環境構築に時間がかかると、ACUのコストが増えてしまいコストの増大につながります。
今回は、コンテナ起動時に不要なボリュームを外すといったプロンプトをDevinに覚えさせ、開発環境構築手順をKnowledgeとして追加することで毎回細かい指示を出さなくてもDevin自身で環境構築を行えるように整備することができました!
これにより後述するFlakyテスト解消のタスクもよりスムーズに行うことができるようになりました!

Flakyテスト解消ワークフロー

Flakyテスト対応では、

  1. Devin上で該当テストだけをローカル連続実行 → Flakyでないことを確認
  2. 修正が安定したらコミット&プッシュ
  3. CI全体を回して最終確認

という 3ステップに分割することで、CI待ち時間の無駄を削減することができました!

効果的な活用方法の発見と共有

SparkJoy Dayを通じて、チーム全体のDevin活用リテラシーが向上したことも大きな成果です。

ツールを実際に操作するだけでなく、1日の終わりには「DOYA会」という時間を設け、当日こなしたタスクの成果や Devin から得た知見を共有しました。

  • Devin のコンソールでは、必要に応じて主導権を自分に切り替えながら確認して進めると、チケット完了までの成功率が上がる
  • 複雑なタスクはステップに分解して指示するとスムーズに進む
  • デフォルト設定のまま Devin にタスクを依頼すると、Linter を無視したコードで PR が作成されがちなので、push 前に pre-commit を導入する旨のKnowledgeを追加しておくと良い

また、各自各々で調べた中でマネージャー用のセッションを作り、設計や実装方針を立てるとうまくいきそうという話が出て次回以降のTryなども生まれました!
https://note.com/suthio/n/n193a73f9eed4

まとめ

今回のDevin縛りSparkJoy Dayでは、以下の成果を達成することができました!

  • 27個のPR作成:様々な技術的負債に対するPRを効率的に作成
  • 2つのPRマージ:即時的な効果が見込める改善を当日中に本番環境に反映
  • Dockerコンテナのセットアップ改善:環境構築の時間と手間を大幅に削減
  • チーム全体のAI活用リテラシー向上:効果的な活用方法の発見と共有

技術的負債の解消は一朝一夕にできるものではありませんが、AIツールを効果的に活用することで、その効率と効果を大きく高められることが分かりました。今後も定期的なSparkJoy Dayを通じて、技術的負債の解消と開発生産性の向上に取り組んでいきたいと思います。

皆さんも、ぜひDevinなどのAIツールを活用した技術的負債解消の取り組みを試してみてください。思いがけない効率化と学びが得られるかもしれません。

Discussion