iOSアプリ新規開発時に検討すべき技術選定の観点
iOSの新規プロジェクトを始めるときに検討すべき項目と、どのような選択肢が取りうるかについてまとめました。
開発の初期段階でこれらの方針を明確にしておくことで、その後の開発をスムーズに進めることができます。
この記事では、「これを選ぶのが良い」というおすすめはせず、広く観点を提示することを目的としています。
① 初期設計フェーズ
✅ UIフレームワーク選定(SwiftUI / UIKit)
新規プロジェクトであれば、特別な理由がなければ SwiftUI になると思います。
以前は UIKit でなければ実装が難しいケースもありましたが、近年はそのような制約も解消されつつあります。
Appleの方向性としても SwiftUI へのシフトが進んでいる印象です。
✅ アーキテクチャ
プロジェクトの規模やメンバーの習熟度、組織のナレッジの有無、学習コストなどに応じて選定すべき項目です。
Androidアプリとの共通化を意識する場合は、両OSでアーキテクチャを統一するという方針も検討できます。
主な選択肢
- MV(Model-View)
- MVVM(Model-View-ViewModel)
- Clean Architecture
- VIPER
- TCA(The Composable Architecture)
✅ プロジェクトの構造化
ファイル構成の主な選択肢
- Feature単位(例:
Home/,Settings/) - Layer単位(例:
View/,Model/,ViewModel/) - ハイブリッド(Feature単位にLayerを内包)
モジュール分割
下記のようなメリットがあります。
- 責務の分離
- ビルド時間短縮
- チーム分業効率化
主な選択肢
- SPM(Swift Package Manager)
- Embedded Framework
✅ 環境分け設計
開発(Debug)、ステージング(Staging)、本番(Release)など、環境ごとに設定を切り替えるための設計です。
- Build Configuration / Scheme
-
xcconfig(APIドメインなどの環境依存の値を外部のテキストファイルにまとめて記載)
② 実装フェーズ(開発時の設計・ライブラリ)
✅ 非同期処理の方針
非同期処理の統一は、コードの可読性・保守性に大きく影響します。
主な選択肢
- Swift Concurrency(async/await)
- Combine
- RxSwift
- 現時点で新規に始める場合はあえて選択はあまりされないかもしれないです
✅ リソース管理
画像・カラー・ローカライズ文字列などを安全かつ効率的に管理するためのライブラリです。
主な選択肢
- SwiftGen
- R.swift
✅ アプリ内DB
構造化データの保存
- SwiftData
- Realm
軽量データ・設定情報の保存
- UserDefaults
- Keychain(機密性の高い情報向け)
✅ サードパーティライブラリ管理
Swift Package Manager(SPM)の使用が基本的には推奨されます。
CocoaPods は今後リードオンリーモードに移行するため、新規プロジェクトでは使用を避けるべきです。
参照: https://blog.cocoapods.org/CocoaPods-Specs-Repo/
主な選択肢
- Swift Package Manager
- CocoaPods
- Carthage
✅ ログライブラリ
アプリの動作状況やエラーの把握・分析の効率化のために導入します。
基本的には Debug 時のみ出力されるように設定します。
主な選択肢
- OSLog(Apple純正)
- XCGLogger
- SwiftyBeaver
✅ Lint / Formatter
コードの品質を保つためのコードスタイルの統一と自動整形のために導入します。
主な選択肢
- SwiftLint
- SwiftFormat
③ CI/CD戦略
fastlane を活用しつつ、以下のCIツールを使用することが一般的です。
✅ CIツール
- GitHub Actions
- Bitrise
- CircleCI
自動化対象
- ビルド
- Lint
- テスト
- 自動配布
✅ テスト配布
TestFlight が一般的です。
選択肢
- TestFlight(内部/外部テスト、外部テスターへの配布にはAppleの審査が必要)
- Firebase App Distribution
- DeployGate
④ その他考慮すべき項目
- 対象デバイス(iPhone, iPad, Mac 等)
- サポートOS範囲
- 画面の回転対応
- 多言語対応
- クラッシュ解析ツールの導入
- アクセシビリティ
- ブランチ運用
- バージョン管理
📝 おわりに
すべてを最初から完璧に整備する必要はありませんが、「あとから変えると面倒」な項目だけでも初期に方向性を決めておくことで、後の開発や運用が大きく楽になります。
もし、この記事で挙げた以外にも「他に取りうる選択肢」や「検討しておくべき項目」があれば、ぜひ教えていただけると嬉しいです。
Discussion