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
AIでAndroid→iOS アプリ移植をやってみた
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Mutz
February 23, 2026
Technology
56
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AIでAndroid→iOS アプリ移植をやってみた
Mutz
February 23, 2026
More Decks by Mutz
See All by Mutz
AI時代になぜ書くのか
mutsumix
0
530
『アキハバラ電脳組』から考える、場所がコミュニティを生む理由
mutsumix
0
330
AndroidにBluetoothでいろいろつなげてみた
mutsumix
0
33
2025年 AIに助けられたこと
mutsumix
0
150
あなたに水耕栽培を愛していないとは言わせない
mutsumix
1
360
地域コミュニティを活かす市民開発の可能性
mutsumix
0
240
社員のスキルチェックのためにスマホアプリを作った話
mutsumix
0
94
軽率に資料をスライド化しよう
mutsumix
0
85
AI コードレビューが面倒すぎるのでテスト駆動開発で解決しようとして読んだら、根本的に俺の勘違いだった
mutsumix
0
1.1k
Other Decks in Technology
See All in Technology
プロンプト_きのこカンファレンス2026_LT
yurufuwahealer
0
150
LLMやAIエージェントをソフトウェアに組み込むプラクティス
shibuiwilliam
1
360
シンガポールで登壇してきます
yama3133
0
100
「最後に責任を取るのはチーム」— 人間のPRレビューを最小化してアップデートしたメンタルモデル
jnishime_dresscode
0
570
非定型なドキュメントを効率よくリファクタする 〜えぇ!?仕様書27本の移行が1日で終わったって!?〜
subroh0508
1
290
10年目を迎えた「ABEMA」がどのように AI 活用を推進して、AI 駆動開発にシフトしているのか / How ABEMA, entering its 10th year, is promoting the use of AI and shifting toward AI-driven development
miyukki
0
120
Control Planeで育てるBtoB SaaSの認証基盤 - SRE NEXT 2026
pokohide
1
2.3k
Empower GenAI with Agile - あなたのアジャイルが生成AIのバフになる仕組み
hageyahhoo
1
180
Terraform共通モジュールをチーム横断で“変えられる”運用へ ― リリースと適用の分離
kekke_n
1
2.8k
AIと共生する開発者プラットフォーム:バクラクのモノレポ×マイクロサービス基盤
sakajunquality
2
3.4k
CIで使うClaude
iwatatomoya
0
240
あなたの『Site』はどこですか? — xREという考え方
miyamu
0
1.2k
Featured
See All Featured
Music & Morning Musume
bryan
47
7.3k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
220
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
360
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
490
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
How to train your dragon (web standard)
notwaldorf
97
6.7k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
How to Ace a Technical Interview
jacobian
281
24k
Transcript
1
梶原 睦 / かじはら むつみ 株式会社 シスマック DX ソリューション事業部 部長
Twitter(現 X): @Mutsumix_dev 最近の執筆: 技術書典: データ菜園入門 Findyメディア: エンジニアが自宅野菜サーバーを運用して得られたIoTの「収穫」 普段は受託開発の提案やったり営業やったり研修講師やったり総務やったり 自己紹介 2
「片側ネイティブ開発 + AI移植」がどの程度成立するかを検証してみた結果の共有 今日のゴール 3
業務や個人開発で React Native + Expo を中心に開発 クロスプラットフォームの手段としては、Flutter / Kotlin Multiplatform
も世に存 在 課題 UIやCRUDの実装は速いが、込み入った機能でネイティブ依存が強くなる 例: Bluetooth, バックグラウンド処理, 音声制御, 端末ファイルアクセス, 権限制 御 結果として「JavaScript/TypeScript + Android + iOS」の3層知識が必要になる or人が必要になる 背景(これまでの開発スタイル)など 4
React Native/Expoでも、最終的に以下が必要になりがち Android: Kotlin, Gradle, AndroidManifest, Activity/Service iOS: Swift, Xcode,
Info.plist, Capability/Signing たとえば BLE Android: BluetoothGatt , ScanCallback , BLUETOOTH_SCAN/CONNECT iOS: CoreBluetooth(CBCentralManager/CBPeripheral) 抽象化レイヤを使っていても、デバッグでは結局ネイティブコードを見ることになる 問題意識 5
片側(今回は Android)をネイティブで先に完成させる もう片側(iOS)は AIに移植支援させる これにより 学習・実装の対象言語を1つへ集中 もう片側は「移植 + 差分吸収」に限定 成否は感覚でなく、指標で判断することに
仮説 6
発車ベルシミュレータ 電車好きの息子のために作っ たAndroidアプリ ON/OFFで音声再生 発車ベルの音声を選択して再生 ユーザー音声ファイルの追加 / 削 除 選択状態・追加音源の保存/復元
ストア公開はしていない(実機で の確認まで) 今回対象としたアプリ 7
ファイル選択 Android: ActivityResultContracts.OpenMultipleDocuments() iOS: UIDocumentPickerViewController + UTType.audio 音声再生 Android: MediaPlayer
or ExoPlayer iOS: AVAudioPlayer / AVPlayer 状態保持 Android: DataStore iOS: UserDefaults + Codable / FileManager 込み入った実装の例 8
パーミッションの差 を最初に吸収する Android 13+: READ_MEDIA_AUDIO Android 12+: BLUETOOTH_SCAN , BLUETOOTH_CONNECT
(BLE時) iOS: Info.plist の Usage Description(例: Bluetooth, Microphone等) 同じ要件でも「許可の取得タイミング」がOSで違う 「一度選べたファイルが再起動後に読めない」問題はよくある 移植時は API置換よりも 権限とライフサイクル整合 を重点的に確認 実装上の注意点 9
Kotlin と Swift はどちらも型安全・null安全寄り asyncモデルも対応可能 Kotlin: Coroutines / Flow Swift:
async/await / Combine ただし差が出るのは言語より プラットフォームAPIの設計思想 致命的なのは「言語差」より「OSの責務の違い(権限・ライフサイクル・I/O) 」 言語レベルの違いは致命的か? 10
宣言的UI: Jetpack Compose / SwiftUI パターン: MVVM (ViewModel中心で状態管理) 状態は単一方向データフローで管理(State +
Event) ドメインモデル(AudioItem等)を先に固定してからUIを移植 ベストプラクティス(移植前提) 11
※ 実装支援ツールは Claude Code を利用 1. Androidを正しい仕様として固定 2. 機能単位でiOSへClaude Codeで移植
3. 各機能で 実装 -> ビルド -> 実機確認 -> 修正 4. 自動レポート(Markdown)で結果を保存 実験手順 12
ON/OFFで音声再生 選択ファイルが変更できる オリジナルの音声ファイル追加と再生ができる 削除後、選択中IDが無効ならフォールバックする 再起動後に選択状態・追加音源が維持される 再生不可ファイル時にエラー表示される 連打時に二重再生・クラッシュしない チェック内容 13
結果 14
実施内容 Androidアプリを仕様として iOSへ移 植 Phase 1: ON/OFF再生・音源選択・永 続化 Phase 2:
ファイル追加・録音・音声管 理 機能対応 主要機能はすべて移植完了 ON/OFF再生、選択即時反映、追加/削 除/改名、録音、復元 測定指標と結果 15
移植時間: 約33分 手修正時間: なし テスト合格率(自動): 11 / 11(100%) テスト合格率(手動): 6
/ 6(100%) 起動時間: 体感的には即時起動 測定指標と結果 16
発生した不具合 ビルドエラー4件(AppIcon不足、Info.plist設定、xcodegen再生成漏れなど) テスト失敗2件(UserDefaults残留、@MainActor境界) すべてClaudeCodeが自動で解消済みで、レポートを見るまでそんなことが起こって たのは知らなかった 測定指標と結果 17
「Android先行 + AIでiOS移植」は、今回の規模では実用的に成立 その逆(iOS→Android)については検証していない 主要機能移植 + テスト完了まで、約33分(実測ベース) 注意すべき点は、言語差より iOSプロジェクト設定とOS責務の差分 実装面では、宣言的UI(Jetpack
Compose / SwiftUI)を土台にMVVMで責務を 分離し、状態は単一方向データフローで管理する構成が有効だったと思う 実務で効かせるコツは、先に「正しい仕様」を固定し、AIにはOS間の差異を吸収さ せる まとめ(今回の結論) 18
AIってすごいね 最後に 19