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
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
580
『アキハバラ電脳組』から考える、場所がコミュニティを生む理由
mutsumix
0
350
AndroidにBluetoothでいろいろつなげてみた
mutsumix
0
41
2025年 AIに助けられたこと
mutsumix
0
160
あなたに水耕栽培を愛していないとは言わせない
mutsumix
1
390
地域コミュニティを活かす市民開発の可能性
mutsumix
0
270
社員のスキルチェックのためにスマホアプリを作った話
mutsumix
0
100
軽率に資料をスライド化しよう
mutsumix
0
91
AI コードレビューが面倒すぎるのでテスト駆動開発で解決しようとして読んだら、根本的に俺の勘違いだった
mutsumix
0
1.1k
Other Decks in Technology
See All in Technology
Oracle MCP Servers Explained
thatjeffsmith
1
470
AIに持続⼒を与える 判断の⻑期記憶設計
eiei114
1
690
[potatotips #96] Give Your AI Agent the Flutter Playbook
korodroid
0
160
Eight Engineering Unit 紹介資料
sansan33
PRO
3
8.3k
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
12
85k
1000⼈規模のClaude Enterprise運⽤を「Oktaのグループ」と「Slack」に集約する
sansantech
PRO
0
180
平文パスワードはログに“残り” ── 肝心の侵入は“痕跡すら残らない”
kuroneko13
0
130
Digital Credentials API × OpenID4VP ブラウザ完結型本人確認の実装知見(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
120
カーネルまで探検して理解するふたつの自動計装
sumiyae
0
290
内製AIチャットボット開発で学んだ Datadog Agent Observability活用術
mkdev10
0
130
RelayerというPHPのフレームワークを作った
polidog
PRO
0
140
【書籍出版記念】 10周回って、エージェント開発は RAGがすべてだった。〜RAGの歴史と開発現場で見えた実践知〜
akiratameto
20
7.2k
Featured
See All Featured
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
180
Discover your Explorer Soul
emna__ayadi
2
1.3k
Documentation Writing (for coders)
carmenintech
77
5.5k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
3
480
Why Our Code Smells
bkeepers
PRO
340
58k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
260
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.8k
Technical Leadership for Architectural Decision Making
baasie
3
530
Joys of Absence: A Defence of Solitary Play
codingconduct
1
440
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
480
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