1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ラクスAdvent Calendar 2024

Day 21

iOSアプリ開発をキャッチアップしている話

Last updated at Posted at 2024-12-20

前書き

私は普段Androidアプリエンジニアとして働いています。これまでiOSエンジニアが不足している状況で一時的に画面の実装や改修を手伝った経験はありました。しかしアーキテクチャやライブラリの選定といった部分に関わる機会はここ数年あまりありませんでした。

Androidアプリ開発がJetpack ComposeやKotlin Coroutinesの登場で大きく変化したように、iOSアプリ開発の世界でもSwiftUIやCombine、Swift Concurrencyなどが広く使われ始めています。

そこで最近、個人的な興味としてiOSアプリ開発を改めてキャッチアップしています。今回はその学習内容をアドベントカレンダーの記事としてまとめました。
Androidエンジニア視点での比較も交えながら記載するので、同じようにiOSアプリ開発をキャッチアップする方の参考になれば幸いです。

1. UI (SwiftUI)

1-1. SwiftUI とは

  • iOS13 から登場した 宣言的UIフレームワーク
  • Androidで言う Jetpack Compose と似た思想で、Viewをコードベースで宣言し、データや状態が変化すると画面が自動的に再構築される

1-2. UIKit(従来のUI実装)との違い

  • UIKit: UIViewControllerUIView を継承し、Auto Layout・Storyboardなどで Imperative(命令的)にUIを記述していた。
  • 学習コスト: UIKitに慣れたエンジニアには新しい概念だが、Android の Jetpack Compose に触れたことがあれば比較的スムーズに理解できる。
  • 互換性: 既存プロジェクトに SwiftUI を少しずつ導入するハイブリッド構成も可能(UIKit 上に SwiftUI を埋め込む、またはその逆)

1-3. Androidエンジニア目線でのポイント

  • Jetpack Composeで宣言的UIのパラダイムに慣れていれば大まかなイメージは同じ
  • Preview 機能などもComposeと同様に用意されており、画面の即時フィードバックが得られる
  • Storyboardを使って実装していた頃よりかなり取っ付きやすくなった

2. 非同期処理(Combine/Swift Concurrency)

2-1. Combine

  • Apple製の リアクティブプログラミング用フレームワーク
  • PublisherSubscriber という概念でイベントストリームを扱う
  • Androidの Kotlin Coroutines FlowRxJava/RxKotlin に近い動作概念

2-2. RxSwift との比較

  • Combine は Apple 公式フレームワークとして OS の各機能と親和性が高い
  • RxSwift はサードパーティとして豊富なオペレータや実績があるが、Combine の登場以降、公式を優先する風潮が強まりつつある
    Androidアプリ開発におけるRxからKotlin Coroutinesに移行する流れと近い。

2-3. Swift Concurrency

  • iOS15 以降は Swift Concurrency も導入され、Combine と組み合わせるケースが増えている。
  • 特に async/await は Coroutines と似た感覚で直感的に書きやすい。
  • Combine と Swift Concurrency は共存可能だが、場面に応じて使い分けるプロジェクトが多い

3. パッケージ管理

3-1. Carthage / CocoaPods から Swift Package Manager (SPM) へ

  • CocoaPods: 一時期は iOS開発のデファクトスタンダードだったが、PodfilePod install 等の煩雑な管理が必要
  • Carthage: 観測範囲だとここ最近は使われなくなりつつある(?)
  • Swift Package Manager (SPM): Apple公式のパッケージ管理。Xcode上で直接ライブラリを追加・管理可能。設定が簡潔で、CocoaPodsよりも標準的に使われつつある

3-2. SPM のメリット

  • 公式ツール なので Xcode との統合がスムーズ。
  • Package.swift というSwiftベースのファイルで依存を記述。
  • Gitリポジトリさえあれば独自ライブラリとして管理もしやすい

4. DI

DIのAndroidとiOSの違い

  • Android
    • Google 製の Dagger / Hilt がデファクトスタンダード
    • Kotlin では Koin など軽量なDIフレームワークも人気
  • iOS
    • 公式の DI フレームワークは存在しない
    • サードパーティで Swinject, Needle, Resolver などが有名(?)
    • Androidよりも 自前DI(コンストラクタ注入) で完結する場面が多い

その他トピック

以降はまだ学習中のトピック

Swift

Swift5.9で所有権など多くの機能が追加された

アーキテクチャ

TCA (The Composable Architecture) をよく見聞きする機会が増えたが、まだ学習しきれていない。AndroidでいうとCompose + MVI が近い?

データ永続化についてのトレンド

  • Realm: iOS/Android 双方で使われるDBライブラリだったが、AndroidではRoomが定番化。iOSだと Realm を今でも使っているプロジェクトが多い印象

まとめ

SwiftUICombine、Swift ConcurrencySwift Package ManagerTCA などが、ここ数年でモダンiOS開発の中心的存在になっている。
Androidエンジニアから見ると、Jetpack ComposeKotlin CoroutinesMVI と類似した関係にあるため、全体像をつかむハードルはそこまで高くなさそう
ただし、DI周りやデータ永続化(Core Data)などは iOS特有の文化が残っているため、Androidエンジニアの感覚でそのまま移行すると違和感を覚えることもある

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?