2.9K Views
January 24, 25
スライド概要
[Sansan x ヤプリ x ディップ 3社合同モバイル勉強会 第1回 - connpass](https://dip-dev.connpass.com/event/342081/) での発表資料です。
フリーランスiOSエンジニア 「エンジニアと人生」コミュニティ主宰
AIエージェントをiOSア プリ開発で使ってみる @shu223
自己紹介 • • • 堤 修一 @shu223 (GitHub, Zenn, Qiita, note, Docswell, 𝕏, YouTube, Podcast, etc...) 書籍(商業出版4冊、個人出版多数 @BOOTH):
今日話すこと AIコーディングエージェントにどこまでiOSアプリ開発を任せられるのか?
今日話すこと AIコーディングエージェントにどこまでiOSアプリ開発を任せられるのか? → AIコーディングエージェントをiOSアプリ開発で使ってみた • そこまで使い込めていないので変更
今日話すこと AIコーディングエージェントにどこまでiOSアプリ開発を任せられるのか? → AIコーディングエージェントをiOSアプリ開発で使ってみた • そこまで使い込めていないので変更 • 個人開発の小さいアプリケーションを想定 • チーム開発や巨大なコードベースでは試していない
AIコーディングエージェントとは コーディングタスクを自律的にやってくれるシステム • コードの解析・編集 • ファイルの作成・変更・削除 • ターミナルコマンドの実行( → Git操作等も可能) etc...を勝手に進めてくれる
百聞は一見にしかず
デモ
環境 • エディタはVS Code • Cursorでも利用可 • Swiftという拡張も入れている • Roo-ClineというAIコーディングエージェントを使用 • VS Code拡張として実装されている • モデルは Claude 3.5 Sonnet(claude-3-5-sonnet-20241022)
タスク:とあるOSSにサンプルを追加する • プロンプト: これはxxxxというOSSのリポジトリです。それに私が xxxxExample というiOSアプ リのターゲットを追加しました。このターゲットに xxxx.framework を使ったiOS サンプルをSwiftUIで書いてください。ブランチは〜を使用してください。作業が 一段落するごとにコミットしてください。 ※ OSSの詳細も、どんなサンプルを作成してほしいかの詳細もなし! 1 • 1 プロジェクト操作だけはやっておいた(ターゲット作成、ライブラリのリンク) そもそも私が何がどこまでできるOSSなのか、どんなサンプルを作って欲しいのか頭にない状態で指示出しした
作業の様子(動画)
(初めてAIエージェントを使う私) ワクワク
待つこと約4分
何をしていたのか追ってみる
1. ブランチ切り替え git checkout をターミナルで実行
2. 現在のコードの把握 → 実装の進め方の検討
3. 基本機能の実装 • ViewModel実装(記事の検索) • ContentView更新(検索結果の表 示)
その後の作業 • 「記事の詳細表示」の実装 → コミット • ArticleDetailView実装, ContentView更新 • 「検索履歴」機能の実装/エラーハンドリングの改善/検索結果が 0件の場合やエラー発生時の表示 → コミット • SearchHistoryManager実装, ContentView更新 • 日本語化/「記事の共有」機能の実装 → コミット
結構気が利いている...! • 「検索履歴」機能の実装 • 「記事の共有」機能の実装 • エラーハンドリングの改善 • 検索結果が0件の場合やエラー発生時の表示 • 日本語化
トータルコスト $0.256(約40円)
どんな成果物ができたのか? Xcodeでビルドして動かしてみる 2 ※ VS Code/Cursorでもビルド&実機テストは可能 2
(案の定)ビルドエラー
エラーの内容を見てみる 1/2 存在しないAPIを呼んでいる
エラーの内容を見てみる 2/2 オプショナルではない値に対して if let
完全にハルシネーション あらためてREADMEを見てみると、全然違う... AIが書いたコード: let results = try await wikipedia.search(searchText) READMEに書いてあったコード: Wikipedia.shared.requestOptimizedSearchResults(...) { result in
AIが書いたコード: let results = try await wikipedia.search(searchText) READMEに書いてあったコード: Wikipedia.shared.requestOptimizedSearchResults(...) { result in search メソッドなんて存在しないし、 そもそも async なメソッドなんてひとつもない 3 3 2023年にアーカイブされたリポジトリなので、モデルが旧バージョンの情報しか持っていなかったということもないはず
→ 人力修正
AIコーディングエージェントが(ほぼ)自動でつくったサンプル
(悪くないのでは...?)
補足 「詳細画面」ではエラーが出て、肝心の記事表示を確認できなかった → READMEをよく読むと、まさに当該メソッドがbreaking changeに より壊れた旨が書かれていた 4 4 当然、ネクストステップはフォークしてきて新しいWikipedia APIのドキュメントをAIに参照させつつ修正してもらうことになる
まとめ AIコーディングエージェントに簡単なiOS開発タスクをやらせてみた • タスクの理解、既存コードの理解はOK • 実際に書くコードはハルシネーションあり
まとめ AIコーディングエージェントに簡単なiOS開発タスクをやらせてみた • タスクの理解、既存コードの理解はOK • 実際に書くコードはハルシネーションあり → ここで初めて重い腰をあげてREADMEを見に行った → 仕様の把握も修正も簡単/サンプルの出来も悪くなかった
「重い腰を上げる」ことこそが人生のボトルネッ クなので、すでに十分有用では?
腰が重いときのAI活用ワークフロー 1. 雑でもいいのでとにかく何かAIエージェントに投げる 2. AIががんばる 3. 期待通りの成果物が出てきたらラッキー/間違った成果物やエラー メッセージを見ると直したくなる
今後の展望 • AIにもっと多くの操作を許可する • コマンドラインからビルドしてエラーを確認し修正するよう指示に明示する • テストも書かせる • Cursor ComposerのAgentモードとCline系をiOSアプリ開発の観点から比較 してみる 5 上に載せた動画では git add も追加しておらず手動承認が必要だった 5
ご清聴ありがとうございました!