Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CA.swift19 恋するAIアプリ開発の裏側
Search
Osaka Miseri
April 15, 2024
Programming
590
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CA.swift19 恋するAIアプリ開発の裏側
Osaka Miseri
April 15, 2024
Other Decks in Programming
See All in Programming
地域 SRE コミュニティ最前線 - ホンマでっかSRE勉強会
tk3fftk
0
270
えっ!!コードを読まずに開発を!?
hananouchi
0
230
吝嗇家のためのAI活用 / AI development for miser - ChatGPT + Issue Driven Development
tooppoo
0
190
Laravel Boostに学ぶ、AIにPHPを書かせる技術 〜OSSの実装から蒸留するエージェント制御の王道〜
kentaroutakeda
3
520
Terraform標準の組織で AWS CDKをどう使うか
mu7889yoon
1
330
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
190
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
380
php-fpmのプロセスが枯渇した日-調査・対処・そして本当にやるべきだったこと-
shibuchaaaan
0
110
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
1.6k
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
1
600
AIエージェントで 変わるAndroid開発環境
takahirom
2
700
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
7
1.9k
Featured
See All Featured
Statistics for Hackers
jakevdp
799
230k
The SEO Collaboration Effect
kristinabergwall1
1
510
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.4k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
620
Facilitating Awesome Meetings
lara
57
7k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
900
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
410
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
What's in a price? How to price your products and services
michaelherold
247
13k
Transcript
CA.swift #19 Osaka Miseri 恋するAIアプリ開発の裏側 1
発表中のリアクションは #ca_swift をつけてツイート🔥 🙌 わいわいしよう 🙌 2
自己紹介👤 プロフィールを見る 逢坂美芹 逢坂 美芹 / Osaka Miseri 株式会社サイバーエージェント @oskmr_
2022年サイバーエージェント新卒入社 タップルのiOSエンジニア 恋するAIの開発を担当 3
目次 1. 恋するAIについて 2. アプリの構成 3. iOSアプリの使用技術・設計 4. AIアバターの実装 5.
まとめ 4
趣味でつながるマッチングアプリ 「タップル」 2014年 サービス開始 累計会員数1,700万人を超える国内最大規模のマッチングアプリ 5
恋するAIについて 今年1月にリリース 記憶するAIパートナーとのチャット・会話アプリ 6
2. アプリの全体構成 7
3つの前提 8
前提①プロトタイプ 弊社エンジニアが制作したプロトタイプの活用 Web、VRMアバター、ChatGPT、VOICEVOX、etc 9
前提②偉い人からのリクエスト 「流行り終わりそうだから早くリリースして!」 「Webで作ったプロトタイプいい感じに使えん?」 「タップルに還元できる知見持って帰ってきてね!」 「Unity as a Libraryとかええやん」 10 偉い人
前提③開発チーム メンバーが若手のみ iOS:2名(新卒+2年目) バックエンド兼インフラ:1名(新卒) 11
前提③ バックエンドの負荷減らしたい 12
アプリの設計を考えるための前提と課題 バックエンドの負荷減らしたい iOSの新しい技術使いたい 13
アプリの設計を考えるための前提と課題 バックエンドの負荷減らしたい iOSの新しい技術使いたい 開発速度最優先 14
アプリの設計を考えるための前提と課題 バックエンドの負荷減らしたい iOSの新しい技術使いたい 開発速度最優先 15 でもクオリティは担保したい
None
全体像 17
特徴① バックエンドがDBを持たない クライアントがアプリの機能に関するコアなドメインロジックを 管理 開発負荷をクライアントに寄せる💪 Firestore: ユーザーの情報などのデータ VectorDB: AIの記憶情報 18
特徴② アバターの表示をWebViewで実装 VRM規格のアバターを表示するviewerとしてのWebアプリ React×TypeScript, three.js アバターの表情, モーションもWebで実装 19
3. iOSの使用技術・設計 20
iOSの開発環境・利用技術 iOS16.7~サポート • Xcode15 • Swift Package Manager • Swift
OpenAPI Generator • Firestore • Xcode Cloud 21
iOSの設計 22
iOSの設計 UIComponent - UIの表示レイヤー UILogic - アプリ画面のViewに1対1対応したViewModel UseCase - アプリのユースケースを定義
Repository - データの取得を抽象化 - APIやFirebaseを叩く(キャッシュデータを持つこともある) Domain - ドメインロジック 親密度、ユーザー情報やメッセージなどのEntity 23
iOSの設計-プロジェクト構成- • dev, prdそれぞれのアプリが存在 ◦ 各環境ごとの設定はxcodeproject内に配 置 ◦ URLなど共通の設定はxcconfigを利用 •
AppFeatureのPackage内に各レイヤーごとの モジュール 24 Swift Package Manager
iOSの設計-DIコンテナ- オブジェクトのインスタンス化や依存関係の解決のためにDIコンテナを利用 モジュール間をまたぐオブジェクトの依存関係の解決 インスタンス化を行う際に疎結合を保つ目的 25
iOSの設計-DIコンテナ- 利用するオブジェクトをコンテナに登録する形で利用 26
iOSの設計 27
iOSの設計 アプリのコアロジック(ドメインやユースケース)が技術詳細に依 存しないクリーンな実装 大体同じ設計になるので可読性が高くレビューコストが低い。 バックエンドのメンバーも一部開発に参加👏 毎回UseCaseやDomainを経由する必要がある →ボイラープレートが増えてしまうこともあり、機能開発における レイヤー分割が過剰に感じられる場合も 28
Xcode Cloud • PRをOpenした際にBuildとテストを実行する • 実機確認, QAの際に特定Branchからアプリを配布 • production環境のアプリをTestFlightの内部テストで配布 •
AppStore Connectへのアップロード 29
Xcode Cloudのメリット • 25時間/月まで無料と安い • 学習コストが低い ◦ GUIでworkflowの設定ができる ◦ 証明書の複雑な設定が不要
◦ モノレポでもディレクトリを選ぶだけで設定完了 • Xcodeからアプリ配れる(不安定で動かない時もある ) 30
Xcode Cloudのデメリット • カスタマイズ性にかける • GUIで設定するため変更差分をGit管理できない ◦ 他プロジェクトの設定を使いまわせない ◦ 一応APIは存在する
• アプリ配布がTestFlightのみ • fastlane等の別ツールを導入する場合は旨みが減る 31
4. AIアバター実装 32
AIアバター 1. ユーザーのアクション 2. WebViewへアバターのイベントをRequest 3. Web側でアバターが動作 33
AIアバター 1. ユーザーのアクション 2. WebViewへアバターのイベントをRequest 3. Web側でアバターが動作 34
AIアバター 1. ユーザーのアクション 2. WebViewへアバターのイベントをRequest 3. Web側でアバターが動作 35
AIアバター 36
AIアバター WebViewで開発してみて • VRMのモーションがUnity想定で挙動に苦戦 • WebViewがあることで一部UIKitに • プロトタイプがあったので早期のリリースには貢献🔥 37
5. まとめ 38
まとめ 一見変な構成✖最新技術で若手でも爆速開発 チームの特性や目的に合った技術選定と柔軟さが大事🙆 新しい技術や挑戦したことない技術での開発が刺激的で楽し かったです!!! 39
ご清聴ありがとうございました 40