Realm Blog

Realm2016まとめ

Realm Advent Calendar 2016 1日目の記事です。

2014年にObjective-C向けのモバイルデータベースとしてスタートしたRealmは、3年目となる2016年に、対応プラットフォームと機能の両面において大きく進化しました。

そこで、2016年のRealm関連重大トピックと、Realm製品群についてまとめてみました。


トピック

まずはじめに、2016年に起こったRealm関連のトピックのうち大きなものを見ていきます。

Realm 1.0

はじめに挙げられる大きなトピックといえば、Realm Java、Realm Objective-C、Realm Swiftがそろって1.0を迎えたということでしょう。

それまではバージョン1未満のベータ版という扱いでリリースを重ねつつフィードバックを元に互換性のない変更も取り入れてきましたが、APIも安定してきたと判断され1.0を迎えることになりました。

バージョン1.0以降、セマンティックバージョニングのルールに従いバージョン番号が更新されています。

この時点でRealm React NativeやRealm Xamarinも公開されていましたが、公開からまだ間もないということもあり1.0とするのは見送られました。

プラットフォームの拡大

2016年はRealmにとってプラットフォーム拡大の年でもありました。今年リリースされた新プラットフォームには以下のものがあります。

これらのリリースにより、広範囲なモバイルプラットフォームとNode.jsによるサーバーサイドの対応がなされました。

Realm Mobile Platform

9月27日、マルチプラットフォームを含む複数デバイス間でのデータ同期ソリューションを提供するRealm Mobile Platformをリリースしました。

このリリースに合わせ、それまで単にRealmと呼ばれていた各モバイルプラットフォーム上でのデータベースプロダクトが新たにRealm Mobile Databaseと呼ばれるように変更されています。

Realm Mobile Platformは、サーバーサイドで動くRealm Object Serverをハブとして、複数のRealm Mobile Databaseが保持するデータを同期する構成になっています。

The Realm Mobile Platform

現時点でRealm Mobile Platformに対応するRealm Mobile DatabaseはJava、Swift、Objective-C版のみですが、その他のプラットフォームについても順次対応していく予定です。

詳細については、リリースのお知らせや、公式ドキュメンテーションを御覧ください。

Coreのオープンソース化

Realm Mobile Platformの公開に合わせてRealm Coreがオープンソース化されました

リポジトリはこちらです。

Realm CoreはすべてのRealm Mobile Databaseで利用されているデータベースエンジンで、C++で記述されています。CoreはRealmの高速性を実現するための大切な要素です。

Realm Mobile Database

次に、各プラットフォーム上で動作するデータベース製品であるRealm Mobile Databaseについて、見ていきます。

Swift/Objective-C

Objective-C版とSwift版は、基本的に同じ機能を提供するためまとめて紹介します。

公���ドキュメンテーションはSwift版はこちらObjective-C版はこちらです。

ソースコードのリポジトリはこちらです。

最も歴史の長いプロダクトであり、Realm Mobile Platformへの対応、Realm Mobile Databaseの機能両面において一番多くの機能を提供しています。

iOS上での動作に加え、OS X上での実行もサポートしています。

Java(Android)

Java版と呼ばれていますが、現時点ではAndroidのみに対応しています。

公式ドキュメンテーションはこちらです。

ソースコードのリポジトリはこちらです。

ほぼフル機能をサポートしていますが、Swift版に比べると以下の機能が未提供です。

  • 粒度の細かい変更通知
  • 変更通知スキップ
  • マルチプロセスでの単一ファイル利用
  • managedなRealmCollectionによる動的なinクエリのサポート

これらについても順次提供していく予定です。

また、通知機構はLooperベースのスレッドでのみ利用可能という制限事項も存在します。

他のプラットフォームにない特徴としては、 Realm Mobile Platform対応がオプトインであるという点が挙げられます。Androidアプリケーションはメソッド数が64k個を超えると特別な対応が必要になります。そのため、Realm Object Serverでのデータ同期が不要なアプリについてはローカルで必要なAPIに絞ってアプリケーションに取り込むことができるようになっています。

Xamarin

公式ドキュメンテーションはこちらです。

ソースコードのリポジトリはこちらです。

12月1日時点の最新版は0.80.0です。

開発環境としてWindows上ではVisual Studioを、OS X上ではXamarin Studioをサポートします。

また、動作プラットフォームとしてiOSとAndroidをサポートしています。

0.80.0では、Swift版と比べると以下の機能が提供されていません。

  • プライマリキーによる更新
  • モデルに対するフィールドの初期値指定
  • 非同期クエリ
  • 粒度の細かい変更通知
  • 変更通知スキップ
  • Realm Mobile Platform対応

1.0に向けて、これらの機能の実装を進めています。

React Native

公式ドキュメンテーションはこちらです。

ソースコードのリポジトリはこちらです。

12月1日時点の最新版は0.15.0で、プラットフォームとしてiOSとAndroidをサポートしています。

0.15.0では、Swift版と比べると以下の機能が提供されていません。

  • モデルに対するフィールドの初期値指定
  • 非同期クエリ
  • 粒度の細かい変更通知
  • 変更通知スキップ
  • Realm Mobile Platform対応

1.0に向けて、これらの機能の実装を進めています。

Node.js

リリース後まもないため、12月1日現在ではまだ公式ドキュメンテーションは提供されていません。唯一公開されている情報はリリースのブログエントリです。

ソースコードのリポジトリはReact Native版と共通でこちらです。

Node.js版はnpmを通じて提供されます。APIやについてはほぼReact Native版と同じと考えていただいて問題ありません。

Node.js版については、順次情報提供を進めていきます。

最後に

2016年はRealmにとって大きなイベントが盛りだくさんの年でした。来年は今年以上に盛りだくさんな年にしていきたいと思っています。

ぜひRealmプロダクトを使って素晴らしいモバイルアプリケーションを作っていただければと思います。


山﨑 誠

Makoto Yamazaki is a software engineer with extensive experience in Java and Android. He is a member of Realm Java team and also CTO of uPhyca Inc.

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