無限大な夢のあと

テニスとアニメが大好きな厨二病SEのブログ

#realm_jp #tryswiftconf try!Swift2017 3日目 Realmワークショップ @k_katsumi さん 午前の部

try!Swift3日目に参加させて頂いたRealmのワークショップについて、簡単に記事にまとめさせていただきます。

try!Swiftのコアメンバーで、Realmの中の人でもある岸川さん( @k_katsumi )直々に教えていただける豪華なワークショップでした。

発表資料及びソースコードはこちらになります。
GitHub - kishikawakatsumi/Realm-Hands-On

基本的には資料に書いてあるところの中で、口頭で説明して頂いた点および会場内で質問が出た点について書かせて頂きます。
全体の流れは以下ですが、今回は午前の部について、取り上げさせていただきます。

全体の流れ

午前の部

Realmについて説明。

モバイル用途に最適化されている点としては次が挙げられる。

  1. 遅延ロード
  2. ゼロコピー・アーキテクチャ
    1. 実際に使われるまでメモリが使われない。いわゆるプロセスでいうコピーオンライト。
    2. SQLでいうwhere条件のようなものを指定した場合でも、内部では実際にデータ取得するまではメモリに書き込まれないような仕組みになるらしい。
  3. ネイティブリンク
    1. RDBのJOINなどのコストが高い処理ではなく、オブジェクトのマッピング情報を持っている。
    2. 画面ごとに必要なデータをRealmに格納できる。
    3. ただのKey/Valueではない

Realm設定では以下のようなことも設定できる。

  1. 暗号化
    1. 個人情報などを使用。
  2. マイグレーション時にファイル削除
    1. Realmオブジェクトの構造が変わった時に必要。
  3. このファイルで使用するテーブルを限定
    1. 他のユーザからは絶対に見れないように分割する時に使用する。
    2. AppExtensionなどではメモリで5MBなどの制約があるので、保存されるデータを指定したい時に使う。
  4. 保存場所/ファイル名
    1. 保存場所を用途ごとに変えたい時に使用する
    2. 何も指定しないと~/Library/Developer/CoreSimulator/Devices配下の深い階層にRealmファイルができます。

個人的には初めてRealmを使った時にデータを確認する時にハマりましたが、次のコードでRealmのファイルの場所を確認できます

        let realm = try! Realm()
        print(realm.configuration.fileURL?.path)

また、RealmBrowerをインストールし、ターミナルで次のコマンドを叩けば、Realmに保存されたデータを確認することができます。

    open 先ほど取得したファイルパス


上記を指定した例

let config = Realm.Configuration(fileURL: URL(fileURLWithPath: "..."),
                                 encryptionKey: key,
                                 deleteRealmIfMigrationNeeded: true,
                                 objectTypes: [Article.self, User.self, Comment.self])
let realm = try! Realm(configuration: config)

マルチスレッド

  1. 従来、バックグラウンドスレッドでは、再度PKで取り直したりする方法しかなかった。
  2. 最近追加されたスレッドセーフリファレンスを使えば、スレッドセーフに使える。

Realmオブジェクトの初期化

  1. Realmオブジェクトの初期化にはtry!を普段使う。
    1. クラッシュするのは9割は使い方を間違えたプログラマーのミスで、残りの1割はディスク容量がいっぱいになった時。
    2. 他のアプリで容量を取られていたりするケースがあるので、リカバリーは難しいかも。
    3. よって、try!で十分ではないかという見解だそうです。

Realm Mobile Platformについては午前の部ではさっと流しただけなので、午後の部のところでお話しして頂いたことをまとめようと思います。

午後の部

簡易なTwitterクライアント手を動かすハンズオン。
Realm Mobile Platformのデモ。

→次回のブログに続く。

Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 (WEB+DB PRESS plus)

Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 (WEB+DB PRESS plus)