AIエージェントをiOSアプリ開発で使ってみる #Sansanxヤプリxディップモバイル勉強会

2.9K Views

January 24, 25

スライド概要

[Sansan x ヤプリ x ディップ 3社合同モバイル勉強会 第1回 - connpass](https://dip-dev.connpass.com/event/342081/) での発表資料です。

profile-image

フリーランスiOSエンジニア 「エンジニアと人生」コミュニティ主宰

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

(ダウンロード不可)

関連スライド

各ページのテキスト
1.

AIエージェントをiOSア プリ開発で使ってみる @shu223

2.

自己紹介 • • • 堤 修一 @shu223 (GitHub, Zenn, Qiita, note, Docswell, 𝕏, YouTube, Podcast, etc...) 書籍(商業出版4冊、個人出版多数 @BOOTH):

3.

今日話すこと AIコーディングエージェントにどこまでiOSアプリ開発を任せられるのか?

4.

今日話すこと AIコーディングエージェントにどこまでiOSアプリ開発を任せられるのか? → AIコーディングエージェントをiOSアプリ開発で使ってみた • そこまで使い込めていないので変更

5.

今日話すこと AIコーディングエージェントにどこまでiOSアプリ開発を任せられるのか? → AIコーディングエージェントをiOSアプリ開発で使ってみた • そこまで使い込めていないので変更 • 個人開発の小さいアプリケーションを想定 • チーム開発や巨大なコードベースでは試していない

6.

AIコーディングエージェントとは コーディングタスクを自律的にやってくれるシステム • コードの解析・編集 • ファイルの作成・変更・削除 • ターミナルコマンドの実行( → Git操作等も可能) etc...を勝手に進めてくれる

7.

百聞は一見にしかず

8.

デモ

9.

環境 • エディタはVS Code • Cursorでも利用可 • Swiftという拡張も入れている • Roo-ClineというAIコーディングエージェントを使用 • VS Code拡張として実装されている • モデルは Claude 3.5 Sonnet(claude-3-5-sonnet-20241022)

10.

タスク:とあるOSSにサンプルを追加する • プロンプト: これはxxxxというOSSのリポジトリです。それに私が xxxxExample というiOSアプ リのターゲットを追加しました。このターゲットに xxxx.framework を使ったiOS サンプルをSwiftUIで書いてください。ブランチは〜を使用してください。作業が 一段落するごとにコミットしてください。 ※ OSSの詳細も、どんなサンプルを作成してほしいかの詳細もなし! 1 • 1 プロジェクト操作だけはやっておいた(ターゲット作成、ライブラリのリンク) そもそも私が何がどこまでできるOSSなのか、どんなサンプルを作って欲しいのか頭にない状態で指示出しした

11.

作業の様子(動画)

13.

(初めてAIエージェントを使う私) ワクワク

14.

待つこと約4分

15.

何をしていたのか追ってみる

16.

1. ブランチ切り替え git checkout をターミナルで実行

17.

2. 現在のコードの把握 → 実装の進め方の検討

18.

3. 基本機能の実装 • ViewModel実装(記事の検索) • ContentView更新(検索結果の表 示)

20.

その後の作業 • 「記事の詳細表示」の実装 → コミット • ArticleDetailView実装, ContentView更新 • 「検索履歴」機能の実装/エラーハンドリングの改善/検索結果が 0件の場合やエラー発生時の表示 → コミット • SearchHistoryManager実装, ContentView更新 • 日本語化/「記事の共有」機能の実装 → コミット

21.

結構気が利いている...! • 「検索履歴」機能の実装 • 「記事の共有」機能の実装 • エラーハンドリングの改善 • 検索結果が0件の場合やエラー発生時の表示 • 日本語化

22.

トータルコスト $0.256(約40円)

23.

どんな成果物ができたのか? Xcodeでビルドして動かしてみる 2 ※ VS Code/Cursorでもビルド&実機テストは可能 2

25.

(案の定)ビルドエラー

26.

エラーの内容を見てみる 1/2 存在しないAPIを呼んでいる

27.

エラーの内容を見てみる 2/2 オプショナルではない値に対して if let

28.

完全にハルシネーション あらためてREADMEを見てみると、全然違う... AIが書いたコード: let results = try await wikipedia.search(searchText) READMEに書いてあったコード: Wikipedia.shared.requestOptimizedSearchResults(...) { result in

29.

AIが書いたコード: let results = try await wikipedia.search(searchText) READMEに書いてあったコード: Wikipedia.shared.requestOptimizedSearchResults(...) { result in search メソッドなんて存在しないし、 そもそも async なメソッドなんてひとつもない 3 3 2023年にアーカイブされたリポジトリなので、モデルが旧バージョンの情報しか持っていなかったということもないはず

30.

→ 人力修正

31.

AIコーディングエージェントが(ほぼ)自動でつくったサンプル

33.

(悪くないのでは...?)

34.

補足 「詳細画面」ではエラーが出て、肝心の記事表示を確認できなかった → READMEをよく読むと、まさに当該メソッドがbreaking changeに より壊れた旨が書かれていた 4 4 当然、ネクストステップはフォークしてきて新しいWikipedia APIのドキュメントをAIに参照させつつ修正してもらうことになる

35.

まとめ AIコーディングエージェントに簡単なiOS開発タスクをやらせてみた • タスクの理解、既存コードの理解はOK • 実際に書くコードはハルシネーションあり

36.

まとめ AIコーディングエージェントに簡単なiOS開発タスクをやらせてみた • タスクの理解、既存コードの理解はOK • 実際に書くコードはハルシネーションあり → ここで初めて重い腰をあげてREADMEを見に行った → 仕様の把握も修正も簡単/サンプルの出来も悪くなかった

37.

「重い腰を上げる」ことこそが人生のボトルネッ クなので、すでに十分有用では?

38.

腰が重いときのAI活用ワークフロー 1. 雑でもいいのでとにかく何かAIエージェントに投げる 2. AIががんばる 3. 期待通りの成果物が出てきたらラッキー/間違った成果物やエラー メッセージを見ると直したくなる

39.

今後の展望 • AIにもっと多くの操作を許可する • コマンドラインからビルドしてエラーを確認し修正するよう指示に明示する • テストも書かせる • Cursor ComposerのAgentモードとCline系をiOSアプリ開発の観点から比較 してみる 5 上に載せた動画では git add も追加しておらず手動承認が必要だった 5

40.

ご清聴ありがとうございました!