SwiftUIで個人開発、最初につまずく3つのポイント
リード文
SwiftUIは「UIKitより簡単」と言われがちですが、実際に個人開発でアプリを作り始めると、思ったところで詰まることが多いです。特に状態管理・レイアウトの考え方・ビルド時間の3つは、公式チュートリアルだけでは見えてこない落とし穴になりがちです。この記事では、自分が実際に手を動かして「ここで時間を溶かした」と感じた部分を中心に、率直にまとめます。
State管理で最初にハマるところ
SwiftUIを触り始めて一番戸惑うのが、@State・@Binding・@ObservedObject・@StateObjectの使い分けです。見た目が似ているのに役割が違うので、最初はとりあえず動くものを適当に選んでしまい、後から「値が更新されない」「二重に初期化されている」といった不具合に悩まされます。
自分の場合、画面をまたいでデータを共有したいときに@ObservedObjectを使い続けてしまい、画面遷移のたびにオブジェクトが再生成されておかしな挙動になったことがありました。原因は単純で、生成元は@StateObjectで持つべきだったという話なのですが、エラーメッセージが出ないタイプの不具合なので気づくまで時間がかかりました。
対策として個人的に効いたのは、「このオブジェクトを誰が生成し、誰が参照するだけなのか」を最初にメモしてから書き始めることです。生成する側は@StateObject、渡された側で参照するだけなら@ObservedObject、という原則を意識するだけでも混乱がかなり減ります。ここは公式ドキュメントやAppleのサンプルコードでも仕様が更新されることがあるので、最新の推奨方法は必ず公式情報で確認してください。
NavigationとレイアウトのAutoLayoutとの違いに戸惑う
UIKit経験者ほど戸惑うのが、レイアウトの考え方の違いです。AutoLayoutのように制約を細かく指定するのではなく、VStackやHStack、Spacerを組み合わせて「余白の力」でレイアウトを作る発想に慣れるまで、思った通りの見た目にならず何度もやり直しました。
特にNavigation周りは、iOSのバージョンによってNavigationViewとNavigationStackのどちらを使うべきかが変わってきており、古い記事の情報のまま実装すると非推奨の警告が出ることがあります。個人開発では「動けばOK」で進めがちですが、将来のOSアップデートで挙動が変わるリスクもあるので、Navigation関連の実装だけは公式ドキュメントで現在推奨されている方法を確認しながら書くことをおすすめします。
レイアウトが崩れたときは、.frame()や.padding()を闇雲に追加するのではなく、まずGeometryReaderを使わずに済む設計にできないかを考えると、後々のメンテナンスが楽になる印象があります。
プレビューが固まる・ビルドが重くなる問題
SwiftUIの売りである「プレビュー機能」は便利なのですが、プロジェクトが大きくなるとプレビューの読み込みが遅くなったり、そもそも固まってしまうことがあります。自分の環境でも、画面数が増えてくるとXcodeのプレビューがくるくる回り続けて、結局シミュレータでビルドし直す方が早いという場面が何度もありました。
これはXcodeやSwiftのバージョンによって改善されたり逆に不安定になったりする部分なので、「今のバージョンでは重い」という情報が数ヶ月後には当てはまらないこともあります。プレビューが不安定なときの対処法としては、画面を細かいコンポーネントに分割してプレビュー対象を小さくする、不要なプレビュー用の#Previewを減らす、といった工夫が効くことがありますが、根本的な解決策は環境によって変わるため、Xcodeのリリースノートを確認しつつ様子を見るのが現実的だと感じています。
おすすめアイテム
SwiftUIのレイアウト崩れやプレビューの表示崩れは、モニターの解像度や画面サイズによって気づきにくいことがあるため、作業環境そのものを見直すのも一つの手です。大きめの画面で作業すると、コード編集画面とシミュレータを並べて表示しやすくなり、細かいレイアウトのズレにも気づきやすくなります。Dell S2725DC 27インチ QHDモニター(USB-C給電)のようなアイテムを一つ導入するだけで、日々の開発効率が変わることもあるので、参考として挙げておきます。
まとめ
- SwiftUIの状態管理は
@StateObjectと@ObservedObjectの役割の違いを最初に整理しておくと後の不具合を減らせる - レイアウトはAutoLayoutの発想を持ち込まず、Stack中心の設計に慣れることが近道
- プレビューやビルドの重さはバージョンで変わりやすいため、最新の公式情報を確認しながら対処するのが安全