SIMPLE

(書きかけ+順次執筆)SwiftUI+SwiftDataによるiPhoneネイティブアプリ開発の全体像

以前C#+WPF+MVVMでアプリ開発をしていた経験から、SwiftUI+SwiftDataで一つのアプリケーションを実現するための鳥瞰図を書いていきます。

 現在取り組んでいるiPhoneアプリ開発*2本がひと段落ついたので、所感を記録しておきたいと思い筆を取りました。また、Swiftでのアプリ開発をする際に必要な知識を、まず俯瞰して全体像を見ておきたい方のためのコンテンツを提供したいとの考えもあり、この記事上で少しずつ鳥瞰図を完成させたいと思います。

 結論から言うと、C#+WPF+MVVMでアプリ開発をしたことのある人にはかなり親和性が高い環境だと思います。(まぁ、どちらも静的型付け・ネイティブアプリ・MVVMアーキテクチャ・宣言型UIであることは共通しているので、当たり前の話ではあるのですが。)また、SwiftUIは宣言的であるおかげでとても読みやすいので、サンプルコードを眺めていればすぐに習得できます。その上、SwiftUIはWPFと比べて抽象度がさらに上がっておりやりたいことを素直に表現できる点が素晴らしいと感じました。それでいてブラックボックス化されていないのも特徴で、XAMLのようなマークアップ式ではなくあくまでSwiftの標準構文に落とし込まれており、FlutterやReactのような関数型パラダイムの考え方が導入されています。そのおかげで、ifForEachといった制御構文を用いることができ、プログラマにとっての標準言語で構成されています。WPFだとDataTriggerSetterというWPF独自の表現方法を用いる必要があり、学習コストが高くブラックボックスのレイヤーが1枚多いことが対照的に感じました。こういった点が、SwiftUIは抽象度が高く他UIフレームワークからの移行がしやすいと考える所以です。

 僕の主観はここまでにして、Swiftアプリケーション開発の地図を見ていきましょう。

(ここにいい感じの図を入れたい)

目次

0. Swiftでアプリケーション開発をする際の基礎的な考え方

  • Appleによる設計思想と全般的に目指したい方針
  • プロトコル指向プログラミング

1. SwiftUIのViewの特徴

  • 宣言型かつ関数型パラダイムを採用している
  • ライフタイムとメモリ管理の特徴

2. MVVMアーキテクチャによるデータフロー設計

  • SwiftUIに適したMVVMパターンの実装方法
  • データバインディングとプロパティラッパー
    • @State, @Binding, @StateObject, @ObservedObjectの使い分け
    • @Environmentと依存性注入
    • データの受け渡しはどうやるか
  • ライフタイムとメモリ管理の最適化(概論的に)

3. SwiftDataによるローカルデータの永続化

  • Overview的なやつ
  • ModelContext, ModelContainerなど登場人物の整理
  • モデルスキーマ定義とマイグレーション戦略(めっちゃ概論的に)
  • CRUD操作とクエリ
  • 非同期データ取得とエラーハンドリング

4. バックエンドAPIとの連携

  • ネットワークレイヤー設計のベスト?プラクティス
  • ライブラリの選択肢(URLSession, Alamofireなど)
  • 非同期処理とAsync/Awaitの活用(?)
  • リクエストのキャッシュと最適化(細かすぎ?)

参考文献

Nao-RandD (2023). SwiftDataの前にCore Dataを学ぶ, https://zenn.dev/nao_randd/articles/24f94ba78bc15b.

hirothings (2021). SwiftUI のState管理, https://zenn.dev/hirothings/scraps/b29b2a8bc7f30f

nafell

大学生、26卒エンジニア志望。アプリ開発サークルを設立し、lounas.jpのバックエンド・DB設計を行いました。2年後期にインターンで設計の手法(要件定義~詳細設計)を学び、IoTシステムの調査・開発を行いました。