Realm Swiftでアプリの情報を保存しよう

Realm Swiftでデータ保存Tech
この記事は約4分で読めます。

Realmとは?

iOS/Androidアプリを作成する時に、サーバーにデータを置かず、アプリでデータを保存しておきたい仕様が出てくる事があります。

そういったアプリ内でデータを保存・編集する際にDBを簡単に構築する事ができるライブラリ。

主に以下の特徴があります。

  • SQLiteなど他のDBライブラリより早い
  • マルチプラットフォーム
    • Swift
    • Kotlin
    • Objective-C
    • Java
    • JavaScript
    • .Net
  • スレッドセーフ

iOS、Android両プラットフォーム対応しているので、チーム間でDB仕様を合わせやすくなり、

特にiOSでDBライブラリとして採用される事が多い定番ライブラリです。

この記事では基本的な使用方法を解説していきます。

Welcome to the Realm Docs — Realm

前提

当記事を執筆中の環境は以下の様になっています。

  • macOS Catalina 10.15.6
  • Xcode 11.6
  • RealmSwift 5.3.3

インストール方法

Realmをインストールするにはライブラリをダウンロードして直接インポートする方法の他に以下があります。

CocoaPods
  1. 最新のRealmをインストールするためにコマンドラインからpod repo updateを実行して、CocoaPodsのSpecリポジトリを更新してください。
  2. Podfileにuse_frameworks!と追加します。そしてアプリケーションとテストのターゲットに対してpod 'RealmSwift'と追加してください。
  3. コマンドラインでpod installを実行してください。
  4. CocoaPodsによって作られた.xcworkspaceファイルを開いてください。
Carthage
  1. Cartfileにgithub "realm/realm-cocoa"を追加してください。
  2. コマンドラインでcarthage update を実行してください。
  3. RealmSwift.frameworkRealm.frameworkCarthage/Build/ディレクトリ内の各プラットフォームのディレクトリから適切なものを選択し、Xcodeの“General”タブにある“Linked Frameworks and Libraries”にドラッグしてください。
  4. アプリケーションのターゲットの“Build Phases”の“+”ボタンをクリックし、以下のような“New Run Script Phase”を追加します。/usr/local/bin/carthage copy-frameworksこのとき、“Input Files”にはフレームワークのパスを指定します。例:$(SRCROOT)/Carthage/Build/iOS/Realm.framework
    $(SRCROOT)/Carthage/Build/iOS/RealmSwift.framework

オリジナルはこちら

モデルを作成

プロジェクトにRealmSwiftライブラリを追加できたら、Realmに保存するモデルオブジェクトの生成を行います。

ObjectはNSObjectのサブクラスになるので、classで定義します。

プロパティでnilを許可する値にはOptionalで定義します。

Realmインスタンス生成

Realmインスタンスのコンストラクタはexceptionを投げてくるので、メソッド前にtryを書く必要があります。

公式などでは try! で定義していますが、この呼び方だとRealmインスタンス生成に失敗した場合クラッシュしてしまうので、あまりオススメはしません。

Realmにデータを保存する

Realm.writeのクロージャの中でRealmインスタンスに書き込み処理を行えるので、Realm.addでHomeContentを追加できます。

Realmからデータを取得する

Realm.objectsで引数に指定したclassの配列を取得できます。

Realmに登録した情報を更新する

更新したいオブジェクトをRealm.objectsから抜き出して、Realm.writeクロージャの中で抜き出したオブジェクトのプロパティを変更することで、Realm内データも更新されます。

Realmに登録した情報を削除する

削除したいデータをRealm.objectsから抜き出して、Realm.writeクロージャの中でそのオブジェクトをRealm.deleteの引数に渡してあげると削除できます。

Realm使用感まとめ

モデルオブジェクトの受け渡しで操作を行えるので、コードセーフにデータを扱う事ができるので、アプリにデータを保存する必要があるアプリを作成する場合は使用する事を検討するのはありだと思います。

Realmを使用した個人開発アプリをリリースしました。

‎Scannable - Simply Recognizer
‎Scannable - Mobile Scanner App. 無料 スキャンアプリ / 書類 スキャン / OCR / 写真 スキャン シンプル操作で画像からテキスト解析! 教科書や手紙、レシートをデジタルデータにして保存できます。 データ化したテキストは編集・共有可能です。 日本語・英語・中国語(簡体字)...
タイトルとURLをコピーしました