MENU

SwiftDataの@Modelマクロを理解しよう

iOS 17/macOS 14から登場したSwiftData。その中核となる@Modelマクロについて、わかりやすく解説します。

目次

@Modelマクロとは?

@Modelは、普通のSwiftクラスを「データを保存できるクラス」に変身させる魔法のようなマクロです。

従来、iOSアプリでデータを保存するにはCore Dataという仕組みを使う必要がありましたが、設定が複雑で初心者には難しいものでした。SwiftDataの@Modelマクロを使えば、たった1行追加するだけでデータの永続化が可能になります。

何ができるの?

@Modelを付けたクラスには、自動的に以下の機能が追加されます:

データの保存と読み込み アプリを閉じても、データがデータベースに保存され、次回起動時に復元できます。

変更の自動追跡 プロパティの値を変更すると、自動的にデータベースに反映されます。自分で保存処理を書く必要はありません。

他のデータとの関連付け 複数のモデル間で関係性を簡単に定義できます。例えば「著者」と「本」のような関係です。

実際に使ってみよう

例えば、読書管理アプリを作る場合、本の情報を保存するモデルはこんな感じで定義できます:

import SwiftData

@Model
class Book {
    var title: String
    var author: String
    var publishedYear: Int
    var isRead: Bool
    
    init(title: String, author: String, publishedYear: Int, isRead: Bool = false) {
        self.title = title
        self.author = author
        self.publishedYear = publishedYear
        self.isRead = isRead
    }
}

たったこれだけです!@Modelを付けるだけで、このクラスは自動的にデータベースに保存できるようになります。

より実践的な例:リレーションシップ

複数のモデルを関連付けることもできます。著者と本の関係を表現してみましょう:

@Model
class Author {
    var name: String
    var books: [Book]
    
    init(name: String) {
        self.name = name
        self.books = []
    }
}

@Model
class Book {
    var title: String
    var author: Author?
    var publishedYear: Int
    
    init(title: String, author: Author? = nil, publishedYear: Int) {
        self.title = title
        self.author = author
        self.publishedYear = publishedYear
    }
}

このように、普通のSwiftのプロパティとして関連を定義するだけで、データベース上でも正しく関係性が保存されます。

SwiftUIとの連携

SwiftDataの真価は、SwiftUIと組み合わせたときに発揮されます:

import SwiftUI
import SwiftData

struct BookListView: View {
    @Query private var books: [Book]
    @Environment(\.modelContext) private var modelContext
    
    var body: some View {
        List(books) { book in
            VStack(alignment: .leading) {
                Text(book.title)
                    .font(.headline)
                Text(book.author)
                    .font(.subheadline)
            }
        }
        .toolbar {
            Button("追加") {
                addBook()
            }
        }
    }
    
    func addBook() {
        let newBook = Book(
            title: "新しい本",
            author: "著者名",
            publishedYear: 2024
        )
        modelContext.insert(newBook)
    }
}

@Queryを使うと、データベースから自動的にデータを取得し、変更があればUIも自動的に更新されます。

まとめ

@Modelマクロを使えば:

  • シンプル: クラスに1行追加するだけ
  • 自動化: 保存・読み込み・変更追跡が自動
  • 型安全: Swiftの型システムがそのまま使える
  • SwiftUIと相性抜群: リアクティブなUIが簡単に作れる

Core Dataに比べて圧倒的に使いやすくなったSwiftData。これからiOSアプリでデータを扱うなら、ぜひ@Modelを活用してみてください!

プログラミングの独学におすすめ
プログラミング言語の人気オンラインコース
独学でプログラミングを学習している方で、エラーなどが発生して効率よく勉強ができないと悩む方は多いはず。Udemyは、プロの講師が動画で実際のプログラムを動かしながら教えてくれるオンライン講座です。講座の価格は、セール期間中には専門書籍を1冊買うよりも安く済むことが多いです。新しく学びたいプログラミング言語がある方は、ぜひUdemyでオンライン講座を探してみてください。
目次