イカ?スマートフォン用の表示で見るやらなイカ?たぶん、iOS/Androidアプリの開発・テスト関係。freee株式会社さん)に行ってきました。SimardさんによるRealmの紹介。現時点でDBのCore部分はまだクローズドだが、オープンにする方向で進めている。iOS/Androidで同じように使用できる。リリースタイミングのずれはあるが*1、双方、同じ機能を提供する。Mapper)で、古く、遅い。SQLiteは早いが、ORMでなくSQLクエリで操作する必要がある。スレッドセーフでない。ほか、FMDB(SQLiteのラッパー)などもあるが、総じて遅い。Android向けには選択肢が少ない。ベンチマーク単純なinsertは、生のSQLiteが早い(178k件/sec)が、Realmはそれに次ぐ(94k件/sec)。Data(1.0回/sec)。Objectを定義する。*employees@endこれで、Employeeテーブルと、Employeeの配列(内部的にはrelation)を持ったCompanyテーブルができる。Swiftではデフォルト値の定義も可能。(コードはその場でメモした擬似コードなので注意)使いかたAdd(insert)はこんな感じで可能。realm.commitWriteTransaction()}(※コードはイメージです)抽出クエリは、#filter()をチェインしていく形式で記述。マルチスレッドでRealmを使っても、ちゃんと捌いてくれる。クエリで取り出したインスタンスはそのスレッドでしか使用できない。別スレッドでは再取得する必要があるので注意。Notifications例えばinsertされたタイミングで指定メソッドの呼び出しを登録できる。何がinsertされたかは(今は)わからない。注意点NSDataは、秒単位までしか保持されない。これはAndroidとの整合性のため。ミリ秒以上の精度はNSTimeintervalを使う。Browserというのがある。ChatworkのAndroid版で実際に使用したお話。ORMはそもそも選択肢が少ない。619件の処理(insert?)で、ActiveAndroidでは1551ms、Realmは414ms。objectでなくてはならず、ロジックは持てない。equals()とかもオーバーライドできない。Realmのobjectは、スレッド単位でしか利用できない。別スレッドで扱うならqueryしなおす日本語ドキュメントのバージョンは0.72、最新は0.79.1。変更があるので、最新情報にあたるほうがいい。ButterKnifeと干渉するところがあったが、Gradleの定義で回避できた所感iOS/Androidで共用できるシリアライズ機構としては、Dropboxが公開しているmx3も気になっているのですが、こちらはライブラリでなく実装サンプルであり、ORMも含めて考えるとRealmの有望さを感じました。objectに限定されることは不便に思いますが、ロジック付きのラッパーを作ればいいので致命的ではなさそう。最近、DBMSを使う系のアプリを作っていないのですが、止まっている電エースアプリのAndroid版ででも使ってみたい。懇親会では、freeeさんの会社およびプロダクト*2の話をたくさん聞けて、それもまた色々参考になりました。freeeさん、岸川さん、通訳を買って出てくださった北さん、そしてJPさん、ありがとうございました。アプリ開発はてなブログをはじめよう!nowsprintingさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。