View in English

  • メニューを開く メニューを閉じる
  • Apple Developer
検索
検索を終了
  • Apple Developer
  • ニュース
  • 見つける
  • デザイン
  • 開発
  • 配信
  • サポート
  • アカウント
次の内容に検索結果を絞り込む

クイックリンク

5 クイックリンク

ビデオ

メニューを開く メニューを閉じる
  • コレクション
  • トピック
  • すべてのビデオ
  • 利用方法

その他のビデオ

ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。

  • 概要
  • トランスクリプト
  • コード
  • SwiftDataについて

    SwiftDataはSwiftのために作られた、パワフルで表現豊かな永続性のあるフレームワークです。Swiftコードから直接得たデータをモデル化したり、SwiftDataをモデルに活用したりSwiftUIに統合したりする方法について解説します。

    関連する章

    • 0:00 - Intro
    • 1:07 - Using the model macro
    • 3:17 - Working with your data
    • 7:02 - Use SwiftData with SwiftUI
    • 8:10 - Wrap-up

    リソース

    • Adopting SwiftData for a Core Data app
    • SwiftData
      • HDビデオ
      • SDビデオ

    関連ビデオ

    WWDC23

    • Swiftの新機能
    • SwiftDataでアプリを構築
    • SwiftDataでスキーマをモデル化
    • SwiftDataへの移行
    • SwiftDataをさらに深く
    • SwiftUIにおけるObservationの説明
    • SwiftUIの新機能
  • ダウンロード

    ♪ ♪

    どうも Ben Trumbullです みなさんにSwiftDataをご紹介します

    SwiftDataはデータモデルと管理のための パワフルなフレームワークで 現代のSwiftアプリを向上させます SwiftUI同様 外部ファイル形式がなく コードだけに集中し シームレスなAPI体験の作成に 新しいマクロシステムを使用しています

    SwiftDataはシームレスな API体験のために Swift language macrosによる 表現性に頼ります またSwiftUIと自然的に統合し CloudKitやWidgetsなどの機能とも うまく作動します ここでは@Model macroとSwiftコードからの データを直接モデルにできる 機能についてお話しします SwiftDataでのデータのfetchと 修正についてご紹介し SwiftDataとシームレスに動く ほかのフレームワークの 概要をみなさんに説明して 締めくくりたいと思います まずは@Modelからです @Modelは新しいSwift macroで Swif codeからのmodel schemaを 定義します SwiftData schemaは 普通のSwift codeですが 必要ならmetadataでpropertiesに アノテーションをつけることができます このschemaでSwiftDataはモデルに パワフルな機能性を足すことができます Classに@Modelを飾るだけで schema生成されます SwiftDataのモデルは アプリのschemaの源で 持続性のある体験を可能にします classの格納型プロパティを 永続型プロパティに変えるのです モデルに@Modelを足せば 可能性が広がります SwiftDataは値型プロパティを 属性としてすぐ使えるよう ネイティブに適合します これらのプロパティはstringやint floatのようなbasic value typesを含みます またstructsやenumsのような complex value typesや collectionsのような codable typesも含みます SwiftDataはreference typesを relationshipsとしてモデル化し relationshipsと数々のmodel typesで model types間にリレーションシップを 作ることもできます @Modelはすべての格納型プロパティを あなたの型で変換します プロパティのmetadataで SwiftDataがどうschemaを作るかに 影響します @Attributeで 一意性制約を追加できます @Relationshipで inversesの選択をコントロールし delete propagation rulesを特定します これらはモデル間のリレーションシップの ビヘイビアを変えます Transient macroでSwiftDataに 特定のプロパティを 含まないよう指定できます これは以前のTripの例です 格納型プロパティにmetadataを足して SwiftDataの schema generationを調整します

    nameに@Attributeを足し 一意であるべきと定義し またbucket listを@Relationshipで装飾し このtripが削除されれば 関連するすべてのbucket listを 削除するようSwiftDataに指示します SwiftData modelingについては 「Model your schema with SwiftData」をご覧ください ではあなたのmodel typesと operationを動かす 2つのkey objectsを どのように使うかお話ししましょう SwiftDataのModelContainerと ModelContextです Model containerはmodel typesの 持続的バックエンドを提供します デフォルト設定のままschemaを指定するか configurationsとmigration optionsで カスタマイズできます 保存したいmodel typesのリストを 指定するだけで model containerを作成できます さらにカスタマイズしたいなら configurationでURLや CloudKitやgroup container identifiers migration optionsを変えます Containerが用意できmodel contextsで データをfetchしsaveします またcontainerの設定にSwiftUIのviewと scene modifiersを使ってviewの環境で 自動的に依存を確立します Model contextsはmodelsへの変化を観察し 実行するactionsを提供します アップデートを探知し データをfetchし変更をsaveし それらの変更 を元に戻すインターフェイスなのです SwiftUIではたいてい model containerを作った後 viewの環境から modelContextを得るものです View階層の外でmodel containerに shared main actor bound contextを 与えるよう指示します それか単にそのmodel containerに 新しいcontextsを例示することもできます Contextが手に入ればdataをfetchできます SwiftDataはpredicateや fetch descriptotのような 新しいSwift native typesからメリットを得られ

    iOS 17では predicateがnative Swift typesと働き 厳密に型指定されたconstructionに Swift macrosを使用します これは型チェックされた NSPredicateの現代的な取り替えものです AutocompleteのようにXcodeのサポートで predicatesを実行するのも簡単です これはSample Tripアプリの predicatesを作る例の一つです まずニューヨークが行き先のトリップを すべて指定できます Queryをbirthdayだけに狭めることもでき 過去の旅行ではなく 将来のトリップだけに興味があると 指定することもできます どのトリップをfetchするか決まったら FetchDescriptor typeを使って ModelContextにそれらのトリップを fetchするよう指示します FetchDescriptorと共に働く Swift SortDescriptorには native Swift typesと keypathsサポートが足されます そのSortDescriptorを使って fetchされたトリップを どのように整理したいか指示します FetchDescriptorはSwiftData queriesに さまざまな形で答えられます Predicatesとsortingに加え 関連するものをあらかじめfetchさせたり 結果を限定したり 保存されていない変更を 除外するなどできます またSwiftDataは ModelContextに作業させることで データの作成や削除そして変更が 簡単になります ほかのSwift classes同様 model objectsを作ったあと contectに挿し込み change trackingやpersistenceなど SwiftData機能を使えます Persistent objectsの削除は ModelContextに削除の印付けを 指示するのと同様に簡単です またこのような未実行の変更を ModelContextにpersistent containerへ 保存とコミットを指示し 保存することができます Model objectsの property valuesを変えるのは property settersを 普通に使うように簡単です Model macroが格納型プロパティを変更し ModelContextが自動的に 変更を記録する手助けをし 次の保存作業に含めます SwiftData containersとcontexts 及びその作業については 「Dive Deeper into SwiftData」 をご覧ください SwiftDataはSwiftUIを念頭にデザインされ 一緒に使うのは簡単です SwiftUIはSwiftDataを 使い始めるのに最も簡単な方法です SwiftData containerの設定であれ データのfetchであれ viewのアップデートであれ これらのフレームワークに 直接統合してAPIsを作成します SwiftUI sceneとview modifiersは SwiftDataアプリを最も簡単に 作成できる方法です SwiftUIでデータの保存を設定でき オプションの変更やundoや autosavingを可能にできます SwiftUIはその環境内で model contextを広く使うことができます 設定が済めば @Query property wrapperで 簡単に始められます わずか一行のコードで データベースに保存されたものを 呼び出し フィルターできます SwiftDataはObservable機能を modeled propertiesに使用できます SwiftUIはobserved propertiesを 自動的に更新します SwiftUIとSwiftDataは一緒になって 魅力のあるパワフルなアプリ作成の 助けとなります これらのフレームワークを 一緒に使うことについては 「Build an app with SwiftData」を ご覧ください

    SwiftDataはデータ管理の パワフルで新しい解決策で Swiftの機能を サポートするようデザインされています あなたのコードだけに集中するため Swiftの新しいMacro systemを使用します @modelを使ってschemaを設定し model containerで persistence experienceを設定します 簡単にpersistenceにundoやredo iCloud synchronizationに ウィジェット開発などが行えます SwiftUIのシームレスな統合を利用して SwiftDataをアプリに 今すぐ取り込みましょう みなさんが何を作るか楽しみです ありがとうございました ♪ ♪

    • 1:27 - Adding @Model to Trip

      import SwiftData
      
      @Model
      class Trip {
          var name: String
          var destination: String
          var endDate: Date
          var startDate: Date
       
          var bucketList: [BucketListItem]? = []
          var livingAccommodation: LivingAccommodation?
      }
    • 2:46 - Providing options for @Attribute and @Relationship

      @Model
      class Trip {
          @Attribute(.unique) var name: String
          var destination: String
          var endDate: Date
          var startDate: Date
       
          @Relationship(.cascade) var bucketList: [BucketListItem]? = []
          var livingAccommodation: LivingAccommodation?
      }
    • 3:43 - Initialize a ModelContainer

      // Initialize with only a schema
      let container = try ModelContainer([Trip.self, LivingAccommodation.self])
      
      // Initialize with configurations
      let container = try ModelContainer(
          for: [Trip.self, LivingAccommodation.self],
          configurations: ModelConfiguration(url: URL("path"))
      )
    • 3:58 - Creating a model container in SwiftUI

      import SwiftUI
      
      @main
      struct TripsApp: App {
          var body: some Scene {
              WindowGroup {
                  ContentView()
              }
              .modelContainer(
                  for: [Trip.self, LivingAccommodation.self]
              )
          }
      }
    • 4:20 - Accessing the environment's ModelContext

      import SwiftUI
      
      struct ContextView : View {
          @Environment(\.modelContext) private var context
      }
    • 5:13 - Building a predicate

      let today = Date()
      let tripPredicate = #Predicate<Trip> { 
          $0.destination == "New York" &&
          $0.name.contains("birthday") &&
          $0.startDate > today
      }
    • 5:32 - Fetching with a FetchDescriptor

      let descriptor = FetchDescriptor<Trip>(predicate: tripPredicate)
      
      let trips = try context.fetch(descriptor)
    • 5:46 - Fetching with fetch and sort descriptors

      let descriptor = FetchDescriptor<Trip>(
          sortBy: SortDescriptor(\Trip.name),
          predicate: tripPredicate
      )
      
      let trips = try context.fetch(descriptor)
    • 6:15 - Working with a ModelContext

      var myTrip = Trip(name: "Birthday Trip", destination: "New York")
      
      // Insert a new trip
      context.insert(myTrip)
      
      // Delete an existing trip
      context.delete(myTrip)
      
      // Manually save changes to the context
      try context.save()
    • 7:38 - Using @Query in SwiftUI

      import SwiftUI
      
      struct ContentView: View  {
          @Query(sort: \.startDate, order: .reverse) var trips: [Trip]
          @Environment(\.modelContext) var modelContext
          
          var body: some View {
             NavigationStack() {
                List {
                   ForEach(trips) { trip in 
                       // ...
                   }
                }
             }
          }
      }
  • 特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。

    クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。

Developer Footer

  • ビデオ
  • WWDC23
  • SwiftDataについて
  • メニューを開く メニューを閉じる
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • SF Symbols
    メニューを開く メニューを閉じる
    • アクセシビリティ
    • アクセサリ
    • App Extension
    • App Store
    • オーディオとビデオ(英語)
    • 拡張現実
    • デザイン
    • 配信
    • 教育
    • フォント(英語)
    • ゲーム
    • ヘルスケアとフィットネス
    • アプリ内課金
    • ローカリゼーション
    • マップと位置情報
    • 機械学習
    • オープンソース(英語)
    • セキュリティ
    • SafariとWeb(英語)
    メニューを開く メニューを閉じる
    • 英語ドキュメント(完全版)
    • 日本語ドキュメント(一部トピック)
    • チュートリアル
    • ダウンロード(英語)
    • フォーラム(英語)
    • ビデオ
    Open Menu Close Menu
    • サポートドキュメント
    • お問い合わせ
    • バグ報告
    • システム状況(英語)
    メニューを開く メニューを閉じる
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles(英語)
    • フィードバックアシスタント
    メニューを開く メニューを閉じる
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program(英語)
    • News Partner Program(英語)
    • Video Partner Program(英語)
    • セキュリティ報奨金プログラム(英語)
    • Security Research Device Program(英語)
    Open Menu Close Menu
    • Appleに相談
    • Apple Developer Center
    • App Store Awards(英語)
    • Apple Design Awards
    • Apple Developer Academy(英語)
    • WWDC
    Apple Developerアプリを入手する
    Copyright © 2025 Apple Inc. All rights reserved.
    利用規約 プライバシーポリシー 契約とガイドライン