📲

iOSエンジニアがAndroidの後追い実装する際にAIエージェント(Devin)を活用して感じたこと

に公開

こんにちは!こんばんは!
毎朝ジムに通うことが習慣になった、delyでクラシルリワードの開発を行っているiOSエンジニアのtakkyです!
今回は、iOS先行している機能のAndroidでの後追い実装の一部をDevin縛りで行った際に、感じたことや今後のための改善点についてまとめたいと思います。

iOSエンジニアがAndroidアプリの後追い実装をするに至った背景とやりたかったこと

そもそもこの取り組みを行うに至った動機は、『iOSで先に実装したものをAndroidでローコストで後追い実装をできないか』ということに始まりました。私の所属するスクラムでは、Androidエンジニアが不在なのでiOSで先行実装しリリース後の効果検証で実装により効果が見られれば、Androidに反映するような形のスタイルを取っていました。そのため、実装が必要になった機能をチーム内で実装を完結させる際に、『AIエージェントを活用して工数削減できるかもしれない』という仮説を検証に至りました。

今回利用したAIサービスDevinとは、「自立型のAIエージェント」で、ご存知の方も多いと思いますが、Devinはプロンプトを用意して特定の箇所の変更を行い実装が終了すると、PRまで作成をしてくれるAIエージェントです。設定次第では直接Githubのリポジトリ内をみてくれるので、指示次第ではリポジトリ内のコンテキストを読み取ることもできます。

devin
詳細はこちら

幸いにも、delyではDevinの利用がPoC段階を経てチーム契約しているので、利用したいエンジニアは全員利用できる状態でした。

https://zenn.dev/dely_jp/articles/ddcdf550cd501f

https://zenn.dev/dely_jp/articles/6e3b0e89bcdbc6

実際に行ったこととDevinに実装してもらった際のアプローチについて

具体的にDevinを用いる実装対象としたのは 「CRMツールでJSONを設定し取得して、リワードアプリ内で利用する型にパースしてアプリ内でデータを使えるようにコンバートする処理」 の実装です。

基本的なアプローチとしては、Devinを普段利用する時と同じようにプロンプトを渡すのですが、今回はiOSで実装した機能の後追い実装になるので、iOSのリポジトリで実装したPR情報を参考情報として渡してみて、どこまでやってくれるのかを検証したいこととしていました。

基本的にクラシルリワードiOS実装やクラシルリワードAndroidでの細かい規則については言及せず実装を依頼し、これを繰り返すアプローチを取りました。

プロンプトとして渡した情報
  • 最終的にどのような実装をしたいかの説明
    • JSONを取得して、リワードアプリ内で利用する型にパースしてアプリ内でデータを使えるようにコンバートする処理を実装して欲しい旨
    • どのようなUIになるのか
  • 配信されるJSONの例
    • dev環境で利用している具体的なJSON情報
  • PR作成時はDraft状態かつ日本語で説明文を書いてもらうように指示

上記で実装をお願いしてみると、大方期待値通りの実装にはなっていたものの細かい修正がかなり多く、iOS側のPRから意図を汲み取りすぎて今回想定している差分以上の差分が発生しました。

再度その修正もDevinに依頼したのですが、不要かつ誤ったpackageのimportが多く、今回実装したかった処理と同じような処理を参考にするまでの確認はしてくれていなかったみたいです。
その後もDevinに何度か細かく指示しても進展が見られなかったため、一度仕切り直して別ブランチを作成するように指示して、より細かいスコープに限って実装してもらうように 『お願いした内容に関係のない変更を含めないでください』 という文言を添え加えて、参考にして欲しい実装のファイル名と関数名までは渡してました。
そうすると少し修正すれば動きそうなものが生成されたのでそちらを活用しつつ、自分で直した方が早そうな箇所はサクッと自分で修正して実装を終了させてマージしました。
結論結果だけを言うと、Devinで別リポジトリの実装を参考にさせて実装を完結するはまだ少し時間がかかりそうです。

振り返り

今後工夫できることとしては、実装したいことはできる限り細かく指示しつつ、無駄なことは実装させないようにすることで、実装を依頼した後に確認するコストとPRをみてもらうコストも少なくなると思います。
クラシルリワードのモバイルチームでは細かく作って早くmasterにマージするトランクベース開発方針を採用しているので、Devinで実装する際も同じで、『PRは分割して実装して都度masterにマージするので、該当部分のPRのみ実装するよう』 に指示することはマストで結局この辺は人が見る部分もあるので、人が実装してもAIが実装しても同じかなと思います。

devin flow
チーム方針 “細かく作って細かくマージ” を Devin でも徹底すると失敗が減りそう

小刻みに実装依頼することで出来上がったアウトプットが大きく方向が違うことが減りそうですし、チューニングしやすくなるはずでメリットが多いと考えられるので、Devinに別OSの実装PRを利用して依頼する際でもかなり細かい粒度で具体的な指示を出して進めていくのが良さそうです。

さいごに

正直なところネイティブアプリ開発においてDevinやCursorのようなAIエージェントの活用方法についての情報はかなり少ない状態で手探りで行っているところはあります。
ただ、今のうちにAIエージェントに実装させる前提のコード整備やドキュメントのgithubへの移植等を行うことで、より精度高く高速に「実装を AI が、自分は設計とレビューに集中する未来」がもうすぐそこまで来てるんじゃないかなと毎日感じさせられています。

ネイティブアプリ開発におけるAI関連活用のtipsがあれば、今後も随時アウトプットしていきたいと思います。

参考資料

https://devin.ai/

https://www.cursor.com/ja

https://zenn.dev/dely_jp/articles/ddcdf550cd501f

https://zenn.dev/dely_jp/articles/6e3b0e89bcdbc6

dely Tech Blog

Discussion