Realm Blog

Realm Java 0.88 — Better Objects!

Realm Javaの最新版をwebサイトMavenリポジトリでリリースしました。

このリリースには、数多くの新機能が含まれています。

Better Objects!

本リリース以降、Realm Javaのモデルクラスに課せられていた多くの制限事項が取り除かれ、定義の自由度が増します。具体的にはモデルクラスは以下のことができるようになります。

  • 任意のメソッドを追加できるようになります
  • 任意のインタフェースを実装することができます
  • getterとsetterの中に、自由にロジックを組み込むことができます
  • getter/setterメソッドの名前を自由に決めることができます
  • フィールドをpublicにすることで、getter/setterなしにフィールドへアクセスすることができます
  • 独自のtoString()equals()hashCode()メソッドを定義することができます
  • Lombokとともに使用することができます

これらの制限緩和により、今後はRealmObjectをより通常のPOJOと近い感覚で利用できるようになります。

これを実現するため、いままでのライブラリを依存に追加する方法に代わって使用する新たなGradleプラグインを開発しました。 以前のブログポストで述べたように、Realmを利用する際はbuild.gradleでのRealmの設定方法を変更する必要があります。

buildscript {
 repositories {
    jcenter()
 }

 dependencies {
    classpath 'io.realm:realm-gradle-plugin:0.88.0'
 }
}

apply plugin: 'com.android.application'
apply plugin: 'realm-android'

そしてこのことは、今後Gradle以外のビルドシステムではビルドできないことを意味しています。 もしこのことで不都合が生じる場合は、以下の2つのissueでMaven/Antサポートの要望をあげてください。

いただいた要望を参考に、AntとMavenのプラグイン開発のプライオリティの議論を進めていきます。

モデルクラスに対するいくつかの制限は依然として残っていることにご注意ください。

  • RealmObjectクラスを継承しなければならない
  • フィールドをfinalvolatiletransientにすることができない

その他の変更点

今回のリリースでは、その他にも多くの改善が行われています。

  • RealmQuery.distinct()RealmQuery.distinctAsync()が追加されました
  • RealmQuery.isNotEmpty()String型、RealmList型、byte[]型のフィールドに対して使用できるようになりました
  • ネイティブコードをロードする際Relinkerを使用することで、アプリインストールに関連する問題を解決しアプリクラッシュの可能性を減らしました
  • Realm.deleteAll()メソッドが追加され、対象Realm中のすべてのオブジェクトを簡単に削除できるようになりました

互換性のない変更点 🚨

  • すべての変更通知にLooperを使用する���う���なりました。これまでは、トランザクションをコミットする際、コミットしたスレッドと同じスレッド上のRealmChangeListenerは即座にコールバックの呼び出しが行われていました。リスナーの挙動を予測可能かつ一貫性のあるものにするため、同一スレッドで登録されたリスナーの呼び出しについても、次のLooperのメッセージ処理まで遅延されます。

  • すべてのRxJavaのObservableは、関連するRealmインスタンスへの参照を保持します。このことにより、完全にRealmをクローズするためにはすべてのObservableをunsubscribeすることを必要とします。またこのことにより、アプリケーションのコードでは、doOnUnsubscribeでRealmインスタンスをクローズしても問題なく動作するようになりました。

完全な変更内容一覧と詳細はchangelogから参照することができます。


お読みいただきありがとうございます。Realmが素晴らしいアプリの実装のお役に立てれば嬉しく思います。お困りの際はStack Overflow(日本語)Slack(日本語)Twitter(日本語)GitHub(英語)でご相談ください。


Realm Team

At Realm, our mission is to help developers build better apps faster. We provide a unique set of tools and platform technologies designed to make it easy for developers to build apps with sophisticated, powerful features — things like realtime collaboration, augmented reality, live data synchronization, offline experiences, messaging, and more.

Everything we build is developed with an eye toward enabling developers for what we believe the mobile internet evolves into — an open network of billions of users and trillions of devices, and realtime interactivity across them all.

記事の更新情報を受け取る