データを保存する|SwiftData で、アプリを閉じても消えない記録を作る

コース5 iPhoneアプリ編 4 / 6・読む時間 約9分・最終確認日

このレッスンの要点

  • SwiftData は、アプリのデータを保存して、次に開いたときも残しておくための Apple のしくみです
  • 保存したいものの形を @Model で書き、画面には @Query で出します。書くのは Claude Code にまかせられます
  • 配信したあとでデータの形を変えるときは、使っている人のデータを消さないように、版を分けて移す計画を立てます

SwiftData とは

何も用意しないと、アプリに入れた記録は、アプリを終了すると消えてしまいます。 は、データを保存して、次に開いたときも残しておくための Apple のしくみです。保存先は、はじめは端末の中です(設定すれば iCloud で同じ人のほかの端末と同期することもできますが、このコースでは使いません)。

保存のしくみがない
入力 → 一覧に出る → アプリを終了 → 開くと空っぽ
SwiftData で保存する
入力 → 一覧に出る → アプリを終了 → 開いても残っている
確かめるときは、いったんアプリを終了してから開き直します。

シミュレーターで確かめるときは、記録を入れたら少し待ってから Xcode の Stop で止めて、もう1回 Run します。SwiftData は変えたものをときどき自動で保存するしくみなので、入れた直後に止めると、まだ保存されていないことがあります。すぐに保存したいときは、保存のボタンを押したときにすぐ保存するよう、Claude Code に頼めます。

4つの役目

SwiftData のコードは、4つの役目に分かれています。自分で書く必要はありませんが、Claude Code が何をしたかを読むときの目印になります。

コードの目印役目たとえると
@Model保存するものの形を決める記録カードの欄(日付・内容・時間)
modelContainer保存の置き場所をアプリにつけるカードをしまう引き出し
modelContext足す・直す・消す引き出しを開け閉めする手
@Query保存したものを画面に出す引き出しの中を、新しい順にならべて見せる
変えたものは自動で保存されます。すぐに保存する書き方もあります。

Claude Code への頼み方

「何を保存するか」を項目で伝えれば、4つの役目のコードは Claude Code が書きます。iCloud の同期は、Apple のサービスの設定も必要になるので、最初の版では「まだしないで」と伝えておきます。

Claude Code
記録を SwiftData で保存できるようにして。形は「日付・内容・時間」
記録の形(@Model)を作り、アプリ全体に置き場所をつけ、一覧を @Query で新しい順に出すようにしました。
変えたファイル:記録の形・アプリ全体・一覧の画面・入力の画面
最後に「変えたファイル」を教えてもらうと、Xcode で確かめる場所がわかります。

データを端末の中だけに保存し、インターネットに送らないアプリなら、レッスン6で答える App Store のプライバシーの質問も答えやすくなります。Apple の説明では、データを端末の外に送ることを「収集」と呼ぶからです。

あとから形を変えるときは慎重に

配信したあとに「メモの欄も足したい」となることがあります。そのとき、使っている人の iPhone には、前の形で保存された記録がもう入っています。形を変えるときは、その記録を消さないように気をつけます。

1変える前に、Claude Code に「何が必要か」を説明してもらう
2必要なら、形の版を分けて、移し方の計画を書いてもらう
3前の版のアプリで記録を入れてから、新しい版を上から入れて確かめる
SwiftData には、形の版(VersionedSchema)と移行の計画(SchemaMigrationPlan)のしくみがあります。

変える前に で記録を残しておくと、うまくいかなかったときに戻せます(コース3のレッスン8)。

よくある勘違い

「画面に出ていれば、保存もできている」わけではありません

入力した記録が一覧に出たから大丈夫
保存のしくみがないと、アプリを終了して開き直したときに消えています
アプリを終了して、開き直して確かめる
シミュレーターでも iPhone でも、いったん終了してから開き直し、記録が残っているかを見ます

やってみよう

  1. レッスン3で作った一覧の画面に、何を保存したいか(例:日付・内容・時間)を書き出します
  2. 下の依頼文を Claude Code に送って、SwiftData で保存できるようにしてもらいます
  3. Xcode でシミュレーターに記録を2〜3件入れ、少し待ってから Xcode の Stop で止め、もう1回 Run して、残っているかを確かめます
  4. 記録を消す・直すもできるようにしてもらい、同じように確かめます
SwiftData で保存できるようにする依頼文(Claude Code に)いまの一覧の画面の記録を、SwiftData で端末に保存できるようにして。記録の形は「日付・内容・時間(分)」。@Model で記録の形を作り、アプリ全体に modelContainer をつけ、一覧は @Query で新しい順に出して。追加のボタンで入力の画面を出し、保存できるようにして。iCloud の同期はまだしないで。変えたファイルの名前と、それぞれ何をしたかを最後に教えて
データの形を変える前に聞く依頼文(Claude Code に・配信したあと)記録の形に「メモ」を足したい。すでにアプリを使っている人の記録を消さないために、SwiftData で何をする必要があるかを先に説明して。必要なら、版を分けた形(VersionedSchema)と移行の計画(SchemaMigrationPlan)の案を出して。まだコードは変えないで

確認問題

Q1. SwiftData で、画面に保存したデータの一覧を出すときに使うのは?
Q2. データを端末の中だけに保存し、インターネットに送らないアプリ。App Store のプライバシーの質問で、そのデータは「収集」にあたる?
今日の練習

自分のアプリで保存したいものを「日付・内容・時間」のように、3つまでの項目で書いてみましょう。

この記事の用語

コース5 iPhoneアプリ編の目次

  1. 1iPhoneアプリができるまでの全体図
  2. 2Xcode と SwiftUI のはじめ方
  3. 3画面を作る
  4. 4データを保存する
  5. 5TestFlight で試してもらう
  6. 6審査に出して配信する