🍎

WWDC 2024 開催前に:2019 年から 2023 年にかけての SwiftUI の重要なアップグレードとその影響について

2024/05/30に公開

人々が久しぶりに再会する時、友人の変化に驚くことがよくあります。一方で、日々共に過ごす人々の変化は、しばしば見過ごされがちです。この記事では、最初のバージョンから私に深い印象を残した SwiftUI の重要なアップデートとその影響を整理します。これは SwiftUI の誕生から成熟への過程を振り返るだけでなく、その持つ活力に新たに気づく機会でもあります。

各 SwiftUI のアップデートは多くの新機能と新特性をもたらします。この記事では、私にとって大きな影響を与えた変更を主に議論し、SwiftUI および Apple エコシステムに密接に関連する他のフレームワークや機能の進化を探り、それらがどのように共同で今日私たちが使用しているプラットフォームを形成しているかを示します。

この原文は私のブログ Fatbobman's Blog に掲載されています。Swift、SwiftUI、Core Data、SwiftData に関する最新のアップデートや優れた記事をお見逃しなく。Fatbobman's Swift Weekly に登録して、毎週の洞察と貴重なコンテンツを直接メールボックスにお届けします。

2019 年

SwiftUI の最初のバージョンでは、機能は比較的限られていましたが、ビューの宣言方法、レスポンスメカニズム、レイアウトロジックなど、いくつかの核心的な特徴が示され、多くのバージョンアップを経てもほぼ変わらずに続いています。これは、Apple が SwiftUI を設計した際の洞察と先見の明を証明するものであり、その理念とアーキテクチャの設計の先進性を示しています。

フレームワークの名前からも分かるように、SwiftUI は Swift 言語と切っても切れない関係にあり、その関係は後のバージョンアップでさらに強化され、確認されました。SwiftUI は Swift 言語の特性と利点を十分に活用しており、その発展はある程度 SwiftUI フレームワークの推進によってもたらされています。

SwiftUI と同時にリリースされた Combine フレームワークは、非同期データストリームを強力に制御する能力を提供し、SwiftUI はそれを利用して参照型の観察メカニズムを実現しました。Combine により、Apple とサードパーティ開発者は既存の API を SwiftUI 対応のリアクティブ API に容易に変換できるようになりました。しかし、Combine が高精度の観察能力を提供できなかったため、SwiftUI は一部のシナリオで深刻なパフォーマンス問題に直面し、昨年 Observation フレームワークが導入されるまでこの問題は解決されませんでした。

WWDC 2019 で発表された Core Data with CloudKit は、Core Data に新たな命を吹き込み、Apple エコシステムのアプリケーションに強力で独自のアドバンテージを提供しました。多くの開発者が Core Data を選んだのは、その便利で無料のデータ同期機能に魅力を感じたからです。

今日から見ると、SwiftUI の最初のバージョンはまだ未熟ですが、Apple が推進する宣言的でリアクティブなフレームワークとして、その独特性と潜在力を十分に示しています。

2020 年

  • 新しいプロジェクトテンプレート:Xcode は SwiftUI 用の全新しいプロジェクトテンプレートを提供しました。AppおよびSceneプロトコルを使用することで、開発者はアプリケーションのエントリーポイントをより簡単に構築できるようになりました。このアップデートにより、SwiftUI は macOS 開発をサポートし、iPad 上のマルチウィンドウモードが導入されました。
  • 多くの新しい遅延コンテナ:このバージョンではLazyVStackLazyHStackLazyVGridLazyHGridなど、多くの遅延コンテナが導入されました。これらのコンテナは、より柔軟なレイアウトオプションを提供し、それらは SwiftUI によって純粋に実装されたネイティブの遅延コンテナで

あり、特定の UIKit/AppKit コンポーネントとは無関係です。残念ながら、これらのネイティブ遅延コンテナは現在まで一部のパフォーマンス問題が存在しており、多くの開発者が開発チームに早急な解決を期待しています。

  • @StateObject@StateObjectの導入により、@ObservedObjectを使用した際に発生する参照型インスタンスのライフサイクルが不安定な問題が解決されました。
  • onChangeonChangeは、ビュー内で特定の状態変化に対してロジックを実行する開発者の能力を提供し、onAppearonDisappearと共に、SwiftUI の宣言的プログラミングに対する独特の理解をさらに強化しました。このデザインコンセプトがもたらす利点と欠点については常に議論がありますが、それも SwiftUI に独特の利点を提供しています。
  • スクロール位置決めScrollViewReaderは、スクロールビュー内でidanchorを使用して位置を決める方法を提供し、これは SwiftUI のレイアウト哲学を充分に体現しています:ビュー識別に基づく、絶対位置に依存しない。
  • ウィジェットの導入:iOS 14 から、Apple は WidgetKit を導入しました。これはウィジェットを構築するための専用フレームワークであり、開発者はこれらのウィジェットを構築するために SwiftUI を使用する必要があります。この変更は、元々SwiftUI に慎重な態度を取っていた開発者たちに SwiftUI の学習と採用を促進させる大きな推進力となりました。

WWDC 2020 で、Core Data with CloudKit は公共データベースへの同期機能を新たに追加し、データ管理と複数デバイス間の同期におけるその潜在力をさらに拡大しました。

WWDC 2020 以降、SwiftUI は完全なアプリケーションを構築するための基本的な機能を備えています。比較的単純なアプリケーションシナリオでは、開発者はUIViewRepresentableを使用して UIKit コンポーネントをラップする必要がほとんどありません。

2021 年

  • 新しい並行処理モデルの統合:Swift 5.5 の導入により、Swift には全く新しい並行処理モデルが迎えられました。SwiftUI はtasktask(id:)refreshableといったキーワードを通じて、これらの新しい並行コードに便利なコンテキストを提供し、非同期プログラミングの複雑さを大幅に簡素化しました。
  • ビュー階層に基づくフォーカス管理@FocuseStateを使用することで、SwiftUI は以前欠けていたテキスト入力のフォーカス管理機能を補完するだけでなく、フォーカス管理を新しいレベルに引き上げました。現在、開発者はビュー階層全体で複数のフォーカスの切り替えを統一的に管理し、フォーカス状態を感知することができます。この統一されたフォーカス管理機能は、基本機能を実現するだけでなく、SwiftUI の哲学に合ったより優れた解決策を提供しているため、非常に印象深いものでした。
  • FormatStyle の統合:Swift の Foundation が新しい Formatter API を導入したことに伴い、SwiftUI ではTextおよびTextFieldコンポーネントでこれらのフォーマットインターフェースのサポートを提供しました。これにより、開発者はFormatStyleを使用してテキストの形式を容易に制御し、コンポーネントの表現力、コードの可読性、および保守性を大幅に向上させることができます。ただし、TextFieldFormatStyleを使用する際には、ユーザーの入力時にリアルタイムで設定されたフォーマッターを適用することができないという制約が現在存在します。これは SwiftUI が将来のバージョンで改善する必要がある問題です。
  • AttributedString のサポートAttributedStringのサポートが SwiftUI に導入されたことで、Textコンポーネントのテキスト表示機能と柔軟性が大幅に強化されました。この変更により、開発者にはさらに多様なテキスト処理オプションが提供され、ユーザーインターフェースの表現力が大いに豊かになりました。しかし、Textの機能がこの導入により著しく向上しているにもかかわらず、AttributedStringを導入して以来、他に類似の規模の機能強化は見られていません。さらに残念なことに、TextFieldTextEditorは現在に至るまでAttributedStringをサポートしておらず、これによりこれらのコントロールが複雑なテキストフォーマットを処理する能力と柔軟性が制限されています。
  • 動的な検索条件の変更:このアップデートで、@FetchRequestは検索条件を動的に調整する能力が新たに追加され、開発者は追加のラッパービューを作成することなく検索条件を変更できるよ

うになりました。しかし、2023 年に SwiftData 用に導入された@Queryプロパティラッパーは、現時点でこの機能を持っていません。

WWDC 2021 で、Core Data with CloudKit はデータ共有機能を新たに追加し、Core Data with CloudKit の三大機能が完全に実現されました。

2021 年に SwiftUI が獲得した多くの機能強化は、その年の Swift および Swift Foundation の更新と密接に関連しています。

2022 年

  • Layout プロトコル:導入されたLayoutプロトコルは、開発者にカスタムレイアウトコンテナを構築する能力を与えるだけでなく、SwiftUI の基本となる協議ベースのレイアウトメカニズムを深く示しています。このプロトコルを通じて、開発者は SwiftUI のレイアウトロジックについてより深い理解を得ることができます。新しいGridコンポーネントや既存のVStackHStackなどのレイアウトコンポーネントの実装もLayoutプロトコルに準拠しており、AnyLayoutをサポートすることでレイアウトの柔軟性が大幅に向上しています。現在、Layoutプロトコルは遅延コンテナの構築をサポートしていませんが、将来のバージョンでこの機能が拡張されることを期待しています。
  • 全新のプログラマブルナビゲーションNavigationStackNavigationSplitViewは新しいプログラマブルナビゲーションメカニズムを構成し、以前の SwiftUI ナビゲーションの制限を根本的に改善しました。この変革により、多くの開発者が SwiftUI プロジェクトの最低システム要件を iOS 16 に設定して、新しいナビゲーション機能を利用しています。
  • Swift Charts:Apple が発表した SwiftUI のチャートフレームワークである Swift Charts は、構築方法、視覚効果、SwiftUI との統合の面で業界に新たな基準を設定しました。第二年度のアップデートでは、さらに多くのチャートタイプとインタラクションのサポートが追加され、機能が拡張されました。Swift Charts は現在、Apple エコシステムでのチャートアプリケーションにおけるトップ選択肢となっており、その SwiftUI との緊密な統合は SwiftUI 自身の重要性を高めるだけでなく、実用性も大幅に向上しています。
  • macOS のサポート向上:このバージョンは、特にWindowGroupの扱いやSettingsMenuBarExtraのサポートの面で macOS のサポートを大幅に強化しました。このバージョンから、SwiftUI を使用した macOS アプリの構築能力が実質的に向上しました。

2022 年のアップデートにより SwiftUI には多くの重要な改善がもたらされましたが、特にLayoutプロトコルと新しいナビゲーションシステムは、今後の SwiftUI アプリ開発に深い影響を与えています。

2023 年

  • 全新の観察フレームワーク Observation:Swift 5.9 のリリースとともに導入された新しい Observation フレームワークは、観測可能オブジェクトのプロパティレベルでの観察能力を提供し、Combine による観察精度不足が原因で発生していた SwiftUI ビューの無効な更新が多すぎる問題を根本から解決しました。Observation を全面的に採用することで、アプリケーションの効率が顕著に向上します。また、このアップデートは SwiftUI の状態の宣言と注入メカニズムを簡素化し、Combine を捨てた後、開発者は@StateEnvironmentだけでさまざまな状態を管理できるようになりました。
  • 革命的なアニメーションとビジュアルエフェクトのアップグレード:2023 年のアップデートは、アニメーション完了コールバック、フェーズアニメーション、キーフレームアニメーション、新しい Transition と Shape プロトコル、Shader のサポートなど、一連の革新的な機能を SwiftUI にもたらしました。これらの機能は、アニメーションとビジュアルエフェクトの創作における開発者の自由度を大幅に向上させました。新たに導入されたanimationvisualEffectの修飾子はクロージャを使用してよりクリアなロジック処理を提供し、ビューツリーの上流および下流コンポーネントへの影響を効果的に減少させ、SwiftUI ビュー修飾子の未来の発展に新たな方向を示しました。
  • スクロールコンテナ機能の全面的な強化:スクロールコンテナにも多くの新機能が導入されました。たとえば、スクロールインジケータの設定、マージン調整、スクロール切り取り、ScrollViewReaderに依存しない高度なスクロール機能などです。これらの個々の機能は単独で目立つものではないかもしれませんが、それらが集中的に登場することで、将来的に大規模なアップデートが行われる可能性のある惰性コンテナ機能についての想像をかき立てます。
  • SwiftData:長らく待望されていた SwiftData がついにリリースされ、Core Data の後継として、そのコード化されたモデリング方式と Observation フレームワークとの緊密な統合により、SwiftUI 時代に最適なデータ管理フレームワークとなりました。もし来たる WWDC 2024 で SwiftData がNSFetchedResultsControllerのようなビュー外でのデータリトリーブ(リアルタイムでの変更感知)機能を提供していなければ、それは Apple が SwiftUI を将来唯一の UI フレームワークと位置付け、そのプロセスを加速する戦略的決定の一環であることをさらに証明することになります。
  • visionOS:Apple Vision Pro の登場により、それは

Apple エコシステムの中で唯一 SwiftUI のみをサポートするネイティブアプリ開発プラットフォームとなりました。この変更は、Apple Vision Pro チームが SwiftUI を使用してより多くのネイティブアプリを構築することを示唆しており、これは多くの開発者にとって待望の展開です。Apple 公式チームによる SwiftUI の大規模採用は、フレームワークの問題修正、パフォーマンスの最適化、新機能の迅速なイテレーションを促進します。今年の WWDC 2024 で iOS および macOS プラットフォーム上で SwiftUI を使用した公式アプリのさらなる展開を期待しています。

2023 年は SwiftUI の発展にとって重要な年となり、Observation フレームワークや SwiftData などの革新技術が SwiftUI を主流開発プラットフォームとしての地位を固めるのに役立ちました。

WWDC 2024 に向けての展望

AI が主流のトレンドとなる時代において、SwiftUI はどのようにして AI の強力な推進力を利用して飛躍的な進歩を遂げるのでしょうか?2 週間後に開催される WWDC 2024 で、私たちはさらに多くの刺激的な変革を目の当たりにすることでしょう。

WWDC 2024 がもたらす驚きを一緒に楽しみにしましょう!

Discussion