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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Mutz
February 23, 2026
Technology
64
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
590
『アキハバラ電脳組』から考える、場所がコミュニティを生む理由
mutsumix
0
350
AndroidにBluetoothでいろいろつなげてみた
mutsumix
0
41
2025年 AIに助けられたこと
mutsumix
0
160
あなたに水耕栽培を愛していないとは言わせない
mutsumix
1
400
地域コミュニティを活かす市民開発の可能性
mutsumix
0
270
社員のスキルチェックのためにスマホアプリを作った話
mutsumix
0
100
軽率に資料をスライド化しよう
mutsumix
0
91
AI コードレビューが面倒すぎるのでテスト駆動開発で解決しようとして読んだら、根本的に俺の勘違いだった
mutsumix
0
1.1k
Other Decks in Technology
See All in Technology
tamachi.go 誕生の裏側
rymiyamoto
1
210
1000⼈規模のClaude Enterprise運⽤を「Oktaのグループ」と「Slack」に集約する
sansantech
PRO
0
380
国家プロジェクトを支える「さくらONE」 大規模LLM開発におけるGPU障害を乗り越えるクラスター運用戦略
gpuunite_official
0
280
形式手法特論:Hyperproperty とモデル検査 #kernelvm / Kernel VM Study Tokyo 19th
ytaka23
0
810
AWSとGitHub Actionsの責任境界と 組織で安全に使用する取り組み
nealle
0
150
EMの役割で 変わったこと・変わらなかったこと
sansantech
PRO
0
120
AI時代の「OAuth認証」にどう物申すか?(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
250
AIエージェントのためのデータ設計
daiz21
0
220
紙 to デジタル
ichien178
0
130
Introduction to Sansan Meishi Maker Development Engineer
sansan33
PRO
0
460
Master Dataグループ紹介資料
sansan33
PRO
1
4.8k
コミュニティから始まった農業IoTとの7年間 ——人との関わりが教えてくれたこと
peacemaker07
0
110
Featured
See All Featured
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
260
How to make the Groovebox
asonas
2
2.3k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
790
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.5k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
500
Statistics for Hackers
jakevdp
799
230k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
480
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
660
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.8k
Automating Front-end Workflow
addyosmani
1369
210k
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