• 株式会社ディー・エヌ・エー
  • エンターテインメント事業本部 システム部
  • 沖津 貴智

アプリエンジニアが待ち望んだイノベーション 次世代モバイル向けデータベースRealm

今回のソリューション:【Realm/レルム】

〜クライアントサイドのデータベースに革新を生み出す「Realm」の使い方〜

「クライアントサイドのデータベースは長らくイノベーションが起きていなかった」そう語るのは株式会社ディー・エヌ・エー(以下DeNA)の沖津 貴智さん。沖津さんのような多くのアプリエンジニアを長らく悩ませてきた、クライアントサイドのデータストアをどのように実装するかという問題。そこにイノベーションを起こそうとしているのがシリコンバレー発の次世代モバイルデータベース、Realmだ。

Realmは「CoreDataやSQLiteを置き換えるイノベーションを起こせる可能性を秘めている」と言う沖津さんに、話を聞いた。

ネットサービスに魅了されDeNAへ

DeNAに入社したのは3年ほど前です。以前はSIerとして働いていて、受託でWEBアプリケーションの開発だったり、社内ベンチャー制度を使ってネットメディアを開発・運営していたり、個人でプロダクトを作っていました。そうしているうちにネットサービスの面白さに魅了されて、DeNAにジョインすることを決めました。入社後様々なプロジェクトを経験させてもらったのですが、新規事業開発が多いですね。これまで3、4本ほどサービスの立ち上げを経験してきました。

ここ最近の新規事業開発では基本はディレクター・デザイナー・エンジニアを最小構成としたチームを組んで開発をしています。やっぱり初期は議論がぶれないように人数が少ないほうがいいですね、3人でも多いぐらい。そんなチーム構成なのでクライアントからサーバーサイドまで全て1人で作ります。そうやって少人数で開発していると新しい技術も試しやすいんですよ。Realmもその一つです。

CoreDataにさんざん悩まされ続けたiOSエンジニア達

Realmを導入する前はAppleが標準で提供しているCoreDataというSQLiteをデータベースに利用するO/Rマッパーを使っていました。これは10年ほど前に作られた古い技術で、かつ特殊なアーキテクチャのため初めはかなりとっつきにくい。慣れてきてもしょっちゅう複雑なバグに遭遇する。そのため開発者からはあまり好まれていないんですよね。ただCoreData以外の選択肢もほぼないため、皆やむなく使っているという。

サーバーサイドの世界だと全然違うんですよ。NoSQL系だけでもいくつも新しいデータベースが生まれていて、イノベーションがどんどん起きている。これがクライアントサイドになると途端に選択肢がなくなる。Androidに関しては事実上SQLiteの一択。また、まれに新しいプロダクトが出てきてもプロダクションで使えるレベルになる前に開発が終了してしまうケースが多い。そんなこんなでいつまでたっても選択肢が増えなかった中、イノベーションを起こす可能性がある技術がやっと出てきた。それがRealmですね。

Realmはとにかく高速、かつモダンである

RealmではCoreDataで開発者が悩まされていた問題がいくつか解決されていて、特に大きなものとして、スレッドをそれほど意識しなくともデータの永続化がやりやすくなっています。CoreDataは基本、スレッドセーフじゃないんですよ。クライアントアプリの世界では、スレッドを非常に多用するので、かなりデリケートなプログラミングが必要になってきます。CoreDataは利用に注意しないと、知らぬ間にデッドロックがかかってアプリのUIがブロックされてしまったりなんてケースもよくあります。またユニーク性を担保するのも一苦労で、いわゆる一般的なRDBMSのノリで利用すると本当に痛い目にあいます。

そこがRealmでは改善されていて、マルチスレッドでもCoreDataほどデリケートではなくなっています。ユニーク性を担保する機構も用意されています。ただ意識する必要がまったくないわけではなく、スレッド間でのオブジェクトの受け渡しなどは基本できません。ただ仮にスレッド間で受け渡そうとした場合は、エラーとして処理されるのですぐに気付いて修正できます。加えて導入も簡単で、なにより圧倒的に高速です。

Realmにもまだまだ足りない点はありますね。細かい点ですが、NULLが保存できなかったり、カスケーディングDeleteに対応していなかったり。ただこれらの問題も既に将来的に対応されることがアナウンスされてます。また、国内の開発コミュニティがかなり活発で、FacebookやSlackで毎日有意義な情報交換が行われています。なにより国内に関しては、iOS開発の第一人者である岸川 (克己)さんがRealmにJoinしており、困ったらSlackで質問するとその場で調べてくれて解決してくれるというものすごく手厚いサポート体制も整っています。これは本当に助かっています。

Realmは今まで出ては消えていったデータベースとは違い、CoreDataやSQLiteを置き換えるイノベーションを起こせる可能性を秘めているので期待しています。

最新技術を導入することで、全社の開発環境を良くする

これだけ期待しているRealmもまだまだDeNA社内ではそれほど活用されていないので、僕が積極的にプロダクション環境に投入しようとしています。よく僕が先行して色々導入した結果、失敗して手戻りが発生して進捗を遅らせているのですが(笑)。

でも新しい技術は使ってみないと分からないことも多いですね。実際RealmよりもCoreDataの方が優れている面もあるのでその辺りを見極めていこうと考えています。どのサービスやアプリにRealmが合うのか、そのノウハウをしっかりと蓄積して、会社全体の開発技術の向上に貢献していきたいですね。

;