◉RORK LABEN
●EXPO — EAS Observe がネイティブクラッシュも記録(10/07)。SDK 57 は 57.0.21 以降で確認できます●SDK 58 — SDK 58 Beta は 9/15 公開。stable の日付はまだ未確認です●RN 0.88 — React Native 0.88.x の正式リリース予定は 10/12、残り3日●Q&A — expo-widgets が本番ビルドだけ真っ黒になる、という問いが出ています●RORK — 09-29 に GPT-6.1 Sol を追加。Pro・Max プランで利用できます●NEW — クライアントのアプリを作る前に決める、公開アカウントの持ち主●EXPO — EAS Observe がネイティブクラッシュも記録(10/07)。SDK 57 は 57.0.21 以降で確認できます●SDK 58 — SDK 58 Beta は 9/15 公開。stable の日付はまだ未確認です●RN 0.88 — React Native 0.88.x の正式リリース予定は 10/12、残り3日●Q&A — expo-widgets が本番ビルドだけ真っ黒になる、という問いが出ています●RORK — 09-29 に GPT-6.1 Sol を追加。Pro・Max プランで利用できます●NEW — クライアントのアプリを作る前に決める、公開アカウントの持ち主
記事一覧/開発ツール
⬡ 開発ツール/2026-07-06上級

Rork Max の SwiftUI を @Observable へ移す — ObservableObject で広がっていた再描画を絞り込む

Rork Max が生成する SwiftUI アプリは ObservableObject と @Published をよく使いますが、状態が一つ変わるだけで購読しているビュー全体が再評価されます。Observation フレームワークの @Observable へ移すことで、プロパティ単位に再描画を絞り込む手順と、Instruments で実測したビュー実行回数の変化を、個人開発の作業ログとしてまとめました。

Rork Max235SwiftUI66Observationパフォーマンス33iOS114リファクタリング5

✦ プレミアム記事

Rork Max で生成した SwiftUI の一覧画面を実機で触っていて、スクロールの終わり際にわずかな引っかかりを感じたのが、この記事を書くきっかけでした。フレームレートを落とすほどではありません。ただ、指を離した瞬間に一拍遅れるあの感触が、どうにも気になっていました。

Instruments の SwiftUI テンプレートを当ててみて、理由がはっきりしました。セルを一つタップしてお気に入り状態を切り替えるだけで、画面に並んだ数十枚のカードの body がまとめて再評価されていたのです。原因は Rork Max が生成した ViewModel の作りにありました。ObservableObject に @Published を並べる、あの定番の形です。

扱うのは、その ViewModel を Observation フレームワークの @Observable へ移し替え、再描画をプロパティ単位まで絞り込む手順です。私自身が個人開発で実際に移行してみて、どこが素直に置き換えられて、どこが静かに壊れるのかを、作業ログとして残しておきます。

なぜ ObservableObject は再描画を広げてしまうのか

ObservableObject の仕組みはシンプルです。@Published なプロパティのいずれかが変わると、そのオブジェクトが持つ objectWillChange パブリッシャーが一度だけ発火します。SwiftUI 側でこのオブジェクトを @ObservedObject や @StateObject として購読しているビューは、どのプロパティが変わったかを区別できません。オブジェクトが「変わった」という事実だけを受け取り、自分の body を無効化します。

つまり、一覧のフィルタ文字列を一文字打ち込んだだけでも、同じ ViewModel を見ているカード群がすべて再評価の対象になります。SwiftUI は差分計算で最終的な描画を最小化してくれますが、body の実行そのものは走ります。body の中で重い整形やフォーマッタ生成をしていれば、その回数だけコストが積み上がります。

Rork Max のようなコード生成では、状態をまとめて一つの ViewModel に集約する傾向があります。集約は読みやすい一方で、objectWillChange の粒度が粗いという ObservableObject の弱点をそのまま増幅してしまいます。

@Observable が変えるのは「追跡の粒度」

Observation フレームワークの @Observable マクロは、この粒度を根本から変えます。ビューの body が実行されるとき、その中で実際に読み取ったプロパティだけが、そのビューの依存として記録されます。あるカードが wallpaper.isFavorite しか読んでいなければ、isFavorite が変わったときにだけ再評価されます。フィルタ文字列が変わっても、その文字列を読んでいないカードは無傷です。

言い換えると、ObservableObject が「オブジェクト単位」で無効化するのに対し、@Observable は「読み取ったプロパティ単位」で無効化します。この差が、一覧画面のような同一オブジェクトを大量のビューが共有する場面で効いてきます。

Observation は iOS 17 以降で利用できます。Rork Max が生成するアプリの多くは最近の iOS をターゲットにしているため、移行の前提はたいてい満たせます。デプロイメントターゲットだけは最初に確認しておいてください。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦ObservableObject が再描画を広げる仕組みと、@Observable がプロパティ単位に絞り込む理由を Before/After のコードで示します
✦Instruments の SwiftUI テンプレートで実測した、移行前後のビュー body 実行回数(スクロール中の一覧画面で約 3.6 倍から 1.0 倍へ)
✦@Bindable・Optional な @Environment・didSet など、移行時に静かに壊れる 5 か所と、その回避パターン
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Rork Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥2,480 の永久アクセス
メンバーシップを見る →

関連記事

⬡ 開発ツール2026-07-18
文字サイズ最大とドイツ語で、生成された画面は静かに詰まる — Rork Max の SwiftUI にレイアウト耐性の検証を通した記録
Rork Max が生成した SwiftUI 画面を疑似ローカライズと最大文字サイズに通し、どこから詰まるかを機械的に洗い出した記録です。ViewThatFits・ScaledMetric・layoutPriority の使いどころと、再生成のたびに回帰を捕まえるスナップショット検証を、実際の数値とともにまとめました。
⬡ 開発ツール2026-05-17
Rork Max の SwiftUI 機能を壁紙アプリ開発で検証した結果 — 実際に動いた機能と手を入れた機能
運用中の壁紙アプリの本番コードを基準に、Rork Max の SwiftUI ネイティブ生成を検証しました。そのまま使えた機能、手を入れた機能、生成を諦めた機能を、動くコードと実機での計測値とともにお伝えします。
⬡ 開発ツール2026-05-16
Rork Max 製 iOS アプリの Firebase CocoaPods を Swift Package Manager へ移行した実録——2026年10月の廃止前に対応した手順と3つの落とし穴
Firebase Apple SDK の CocoaPods 配信が2026年10月に停止します。Rork Max 製 iOS アプリ4本を Swift Package Manager へ移行した実体験をもとに、手順・落とし穴・Dropbox競合コピー問題の解決策を詳細に解説します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます