次世代モバイル向けデータベースRealmを使ってみる-Realm Tech Talkに行ってみた!-
event

次世代モバイル向けデータベースRealmを使ってみる
-Realm Tech Talkに行ってみた!-

2015.03.12

ent92_img01.jpg

これまでモバイルデバイス向けデータベースといえばSQLiteが代表的であった。しかしそれも今は変わりつつある。デバイスの進化に伴い、より時代に適したデータベースエンジンの需要が高まっている中、突如彗星のごとく現れたRealmとは一体どのようなものなのか。次世代モバイルデータベースRealmについて今回から3回を予定してその実力を紹介したい。

連載第一回目は2月20日、23日に東京で開催された Realm Teach Talk の様子を紹介しよう。(繁田 卓二

■ Realm Tech Talk with JP Simard

ent94_img02.jpg
Realm Tech Talk #2 の様子。
平日にもかかわらず多くの開発者が駆けつけ大盛況となった。

Realm Tech Talk は2月20日、23日の2日間に分けて開催された。Realm社よりコア開発者であるJP Simard氏が来日との事で、事前申込みは数日で定員オーバーとなり抽選がおこなわれた。筆者は20日の申し込み抽選から外れてしまったが、23日の当日に補欠から繰り上がりようやく参加できることになった。

■ Realm Overview by JP Simard

ent94_img03.jpg
JP氏(中央)のメインセッションは北裕介氏(右)による逐次通訳がおこなわれた。

目玉は Realm 社の JP Simard 氏(以下JP氏)によるメインセッションだ。ちなみにJP氏は、Objective-Cのドキュメント生成ツール jazzy や SourceKit のフロントエンド SourceKitten のメンテナーとして海外でも著名な人物である。

■ Why?

セッションではまず Realm とは何か、そしてなぜ作ったのか、というところから始まった。JP氏曰く「サーバサイドのデータベースは様々なイノベーションがあったにも関わらず、モバイルデバイス環境では2000年に登場したSQLite以降何もない」とのこと。そのSQLiteを置き換えるものとして作ったのだと言う。

ent94_img04.jpg

Realm自体は既存のデータベースエンジンを単にバインディングしたものではなく、ゼロベースで作り出された独自のエンジンを内部に持っている。RealmはそのエンジンをObjective-CやSwift、Android Java から容易に使用できるようにラッパーしたもの。JP氏によるとバインディング部分のほぼ全てはオープンソースで公開されておりエンジン部分も将来において公開する準備があるとのこと。

■ ベンチマーク

また、競合となるO/Rマッパーとのベンチマーク比較も公開された。Insertのベンチとして公開されたグラフではRealmはSQLiteに大きく差を付けられているように見えるが、これはSQLiteがバインディングを使用しないC言語で実装した結果なので当然だろう。注目すべきはApple純正のCoreDataに比べ5倍近いパフォーマンスを発揮している点だ。さらにはCountsのベンチではRealmの圧勝である。SQLiteよりも3倍近い性能だ。同時にこのベンチではCoreDataがいかに遅いかということが証明されている。

ent94_img05.jpg

ent94_img06.jpg

RealmがCoreaDataなどの他のラッパーより早い理由として、データをメモリ上に展開せず直接ディスクから読み書きする処理方式が結果的に功を奏したのだと言う。

■ Realm の実装

Realmの次の特徴としてはモデルの構築が容易であることが紹介された。SQLiteのようにテーブルの準備などは不要であり、クラス定義がテーブルの定義そのものとなる。このあたりのオブジェクト指向に特化した作りは現在のモバイルアプリ開発との相性は非常に良さそうだ。

ent94_img07.jpg

その他、Swift対応、バックグラウンド処理、ノーティフィケーション(データ更新時の通知)機能など、モダンな機能が実際のコードを元に紹介された。

■ 今後の課題と実装予定

現状の制限としては、カスケードデリート(親モデルが削除された際にリレーション関係にあるモデルも同時に削除する制約)が出来ないなどの課題があるが、随時開発中だとのこと。その他以下の様な機能が実装中で近い将来に公開される模様だ。

  • - マルチプロセス対応
  • - より粒度の高いノーティフィケーション
  • - クエリ同期
  • - カスケードデリート
  • - Nullable Types (※現状はnull値を許容しない)
  • - iCloud的な同期機能
  • - コア部分のオープンソース化

■ Impression of Realm Java

ent94_img08.jpg

続いては、チャットワーク社の宮下氏が登壇。「Impression of Realm Java」と題して、Androidの観点からRealmを紹介した。

■ Realmの採用

ent94_img09.jpg

チャットワーク社では既に自社サービスのAndroidプロダクトにRealmを採用しているという。同社の最初のバージョンではTitaniumで開発が行なわれていたが、2014年12月にリリースしたバージョンよりAndroidネイティブでの書き直しが行なわれた。当初ActiveAndroid(Androidでのアクティブレコードライブラリ)での実装が行なわれたが、パフォーマンス的な問題を解決するためRealmへの移行を決断したという。特に同社のサービスではチャットルームが増え続けるという性質がある。起動時にこれらのデータをキャッシュ的にストアするため、アプリ起動のパフォーマンス改善が必要不可欠であった。その性能改善を満たすのがRealmであったというわけだ。

■ 新しい選択肢

ent94_img10.jpg

AndroidでのデータベースはこれまでSharedPreference (Key-Valueストア)か、SQLite (RDBMS)という極端な選択肢しか無かったが、Realmは第三の選択肢になり得るとのこと。他のORMも検討した結果、最もRealmがパフォーマンス的に優れていると結論が出たようだ。

■ Be careful

だがAndroid版のRealmは「気をつけなければいけないことも多い」と宮下氏。
マルチスレッドでのオブジェクトの扱いが容易でない点や、アップデートによる仕様変更が多い、マニュアルが追いついていないことが問題だと指摘する。
特に現段階ではドラスティックな仕様変更が目立つとのことで「継続的に(ChangeLogを)ウォッチし続けることが必須」と同氏は言う。

それでもパフォーマンス的にはその欠点を補って余りある。特に同社のプロダクトのようにキャッシュ用途でRealmを使用する場合は「Ultra Fast Searchable Cache」が実現できる、とパフォーマンス面での恩恵が大きいことを強調し発表を締めくくった。

■ 懇親会

懇親会ではJP氏の他、国内でも著名な開発者と交流ができるという事もあり、活発に質問や議論が飛び交った。筆者もJP氏に直接コードを見て頂き貴重なアドバイスを頂けた。

主催でRealm社の一員でもある岸川氏(@k_katsumi)によると、今後も定期的にミートアップやコーディング会を開催するとのことなので、興味ある方はFacebookのユーザグループをチェックしておくと良いだろう。

□Realm Japan User Group
https://www.facebook.com/groups/realmjp

ent94_img11.jpg
会場ではRealmロゴ入りのTシャツも無料で配布された。これは貴重だ。

■ まとめ

2000年に誕生したSQLiteが15年近く活躍し続けてこられたのは、モバイルデバイス自体のスペックや回線がボトルネックとなりデータベース性能そのもののパフォーマンスが問題として表面化しにくかったというのも一つの理由だろう。昨今のデバイスや回線の進化に伴い、やはり時代に適したデータベースが必要になっている。Realmはモバイルデータベースの新たなプロダクトとして歴史に名を残せるだろうか?今後の活動に期待したい。

<参考>

□ Realm 公式
http://realm.io

□ Speaker Deck Realm Overview by JP Simard (当日のJP氏のスライド)
https://speakerdeck.com/jpsim/realm-overview

□ Impression of Realm Java / ver.2 (当日の宮下氏のスライド)
http://www.slideshare.net/ryugoo/impression-of-realm-java

□ Qiita - Realmタグ
http://qiita.com/tags/realm

写真協力: Yuki Asano <@yuuki1224st> (Realm Developer)

原稿:繁田卓二
qnote最高技術責任者。猫とビールをこよなく愛するゆるキャラ系プログラマ。
Webアプリ開発からMacアプリ開発を経て現在はiOSアプリ開発に没頭。弱点はAndroid。

この記事はどうでしたか?

おすすめの記事

キャリアを考える

BACK TO TOP ∧

FOLLOW