
Swiftでデータの保存や永続化を扱うときに便利なのが @Transient です。
これは、SwiftData といったフレームワークで使われる属性で、通常は保存対象になるプロパティを「一時的(保存しない)」にするための仕組みです。
この記事では、@Transient の基本的な意味や使い方、活用シーン、注意点までわかりやすく解説します。
@Transient とは?
@Transient はSwiftData における “マクロ(macro)”の一つで、「永続化しない一時的なプロパティ」を定義する時に使います。
通常、SwiftData のモデルに定義したプロパティはデータベースに保存されますが、計算途中の値やアプリ起動中だけ必要な値まで保存する必要はありません。
そんなときに @Transient を付けることで、「これは保存しないでOK」と SwiftData に明示できるのです。
つまり、一時的に使いたいけど、保存対象にはしたくない値を扱うための仕組み です。
具体例:保存しないプロパティを作る
例えば、「ユーザーのフルネーム」を扱う場合、データベースには firstName と lastName を保存しておけば十分です。
しかし、画面に表示するために「firstName + lastName を結合したフルネーム文字列」をプロパティとして持っておきたいことがあります。
そんなときに @Transient を使います。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import SwiftData @Model class User { var firstName: String var lastName: String // 保存されない一時的なプロパティ @Transient var fullName: String { "\(firstName) \(lastName)" } init(firstName: String, lastName: String) { self.firstName = firstName self.lastName = lastName } } |
この例では、firstName と lastName はデータベースに保存されますが、fullName は保存されません。
代わりに、アプリ実行時にその場で計算されるプロパティとして利用できます。
つまり、「永続化の対象にしなくてもいい補助的なプロパティ」を作るときに便利です。
主要な用途と活用シーン
@Transient は次のような場面でよく使われます。
計算プロパティの補助
保存対象のデータから計算で取得できる値を一時的に持ちたい時。
例:birthDate から計算した age プロパティ。
データベースを肥大化させず、動的な値を簡単に扱えるようになります。
一時的なフラグや状態
データベースには保存せず、アプリ起動中だけ使うフラグ。
例:UI表示のための isExpanded フラグ。
起動ごとにリセットしたい状態や、一時的なUIの状態を管理するのに最適です。
パフォーマンス最適化
計算コストが高い値を一時的にキャッシュしたいとき。
繰り返し使う値を保持して、不要な再計算を避けることで、パフォーマンスの向上につなげることができます。
このように、@TransientはアプリのロジックやUIに必要だけど、「データベースに保存して永続化する」までは不要なデータに適しています。
注意点
便利な @Transient ですが、使うときにいくつか注意すべき点があります。
- 永続化されないので、アプリを再起動すると値は消える
→@Transientの値は 保存されません。 あくまでアプリ起動中の一時データとして使うことを前提にしましょう。重要な情報を保持する用途には不向きです。 - モデル変更時のマイグレーション(データ構造の変更)には影響しない
→@Transientはデータベーススキーマに含まれないため、データ構造の変更にも一切影響しません。。つまり、あとからプロパティを追加・削除しても、既存データが壊れたり、再構築の必要が出たりすることはありません。 - 計算ロジックを入れすぎない
→@Transient は毎回プロパティを参照するたびに計算が実行されます。そのため、重い処理や複雑なロジックを入れるとパフォーマンスに影響することがあります。
短い計算やUI表示用の軽い処理にとどめておくのが理想です。
@Transient は一時的で軽量なデータ処理には最適ですが、「永続化が不要な値」をしっかり見極めて使うことが重要です。
まとめ
最後にもう一度、@Transient の要点を整理しましょう。
アプリ設計において、どのデータを保存し、どのデータを保存しないかを明確に区別できることは非常に重要です。
@Transient はその区分を明示的に行うための便利な手段です。
@Transientは、SwiftData で「保存しないプロパティ」を作るための属性。- 計算値やUI表示用のフラグなど、永続化不要のプロパティに便利。
- 保存されないため、アプリを再起動するとリセットされる。
これらのポイントを理解すれば、「永続化すべきデータ」と「アプリ実行中だけ扱う補助データ」をきれいに分けることができます。
必要なデータだけを保存するために、ぜひ @Transient をうまく活用してみてくださいね!

