@numa08 猫耳帽子の女の子

明日目が覚めたら俺達の業界が夢のような世界になっているとイイナ。

Realm meetup #7 で発表をしてきました #realm_jp

f:id:numanuma08:20151002075945j:plain

Realm meetup #7 で「Realm 正しく使うには」と題して発表をしてきましたので、資料と補足のまとめをします。

realm.connpass.com

資料

タイトルについて

タイトルは「Realm を正しく使うには」としましたが、内容はコンテキストに依存をします。つまり、現場によっては正しさが異なります。

例えば、スレッド間通信やコンポーネント間通信の実現をするため、私は RealmObject の識別子やクエリを共有する方法を紹介させて頂きました。しかし、実際には独自のオブジェクトへ展開し、 Realm 管理下から外す手法が適している場合もあります。

自分で実装をする際にはどの方法が適しているのかを考えてから、資料を参考にしていただけると有り難いです。

キャッシュに利用するってどういうことですか?

発表では、 Realm をキャッシュに利用していると説明をさせて頂きました。これは、オンメモリDBを利用しているとかそう言った意味ではなく、 Realm のファイルをキャッシュ用のディレクトリに置いているというだけのことです。

識別子、クエリをやりとりするって?

識別子とは、 RealmObject で @PrimaryKey に指定する値。クエリは RealmQuery を作る時に利用するパラメータのことです。これらは単純な String や long, byte[] と言ったプリミティブ(Stringはプリミティブじゃないけど・・・)な型なので、スレッドを跨いで利用をしても Realm の制限に触れることはありませんし、コンポーネント間でやりとりすることができます。

UI スレッドでクエリを実行していいの?

UI スレッドでクエリを実行してもスレッドをロックしないのでしょうか? しません。

それほどに、 Realm は高速です。遅延ロードの仕組みも速くなる要因の一つですが、そもそも Realm の仕組み自体が高速というのもあるようです。

JVM でテストはできない?

JVM でテストは全くできないのでしょうか?実際には、その限りではないです。

RealmObject をインスタンス化するだけなら JVM のテストでも可能です。

また、 Realm のインスタンス化も mockit などのモックライブラリを利用すること、モックによってテストが可能です。

ただ、準備するべきメソッドが多くてあんまり現実的ではないと利用中に感じたので紹介を省略しました。

終わりに

Realm meetup は今後も開催されるようなので、チェックをしておくと良いと思います。

realm.connpass.com

今回、資料の中で紹介をさせて頂いた feather ですが、リリースされました。よければ、購入をして頂くと嬉しいです。

feather - 軽快なTwitterアプリ - Google Play の Android アプリ

Get it on Google Play