Realm meetup #17 に参加してきました!

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

batch_IMG_3920

こんばんは!朝のコーヒーが欠かせない田宮です。 2016/07/20、東京・渋谷区のSansan株式会社様にて、Realm meetup #17が行われました。

Realm meetupとは

Realmユーザー、これからRealmを使ってみようという人、その他Realmのテクノロジーに興味のあるひとの情報共有を目的とした会です。

定期的にミートアップやハンズオンなどを開催する予定です。

引用元 - Realm meetup #17 - connpass

Realm Recent Updates

batch_IMG_3922

Presented by: 山﨑誠さん (@zaki50) @ Realm

Realm Java 1.1.0 における修正点のオーバービューについて説明がありました。

RxRealm(RealmをRxSwiftに対応させるライブラリ)について

batch_IMG_3934

Presented by: 岸川克己さん (@k_katsumi) @ Realm

Realm Objective-C/Swift 1.0.2 における修正点のオーバービューについて説明がありました。

  • プロパティが存在しないクラスを保存しようとすると例外に
    • かつては、無効だが保存可能だった
  • write(_:)メソッドのブロック内でthrowできるようになった
  • バイナリサイズが少し減少
  • addNotificationBlock(_:, change:)で初回の呼び出しは、必ず.Initialが呼ばれるように
    • いきなりInitialを飛ばして change:が呼ばれることは今後はない
  • 逆方向の関連が変更になる場合に通知が呼ばれない問題を修正

Already compatible with Swift 3 & Xcode 8

  • https://github.com/realm/realm-cocoa/issues/3796

Protip for Xcode 8 beta 3 and Carthage

Xcode 8 beta 3 で、Carthageを使う

$ echo SWIFT_VERSION=\"3.0\">swift3.xcconfig
$ XCODE_XCCONFIG_FILE='pwd'/swift3.xcconfig \ carthage update --platform iOS --no-use-binaries

RxSwift & Realm

  • What's Rx?
    • [1, 2, 3, 4, 5, 6].filter {$0 % 2 == 0}
      • 配列を偶数のみに
    • [1, 2, 3, 4, 5, 6].map {$0 * 5}
      • 配列の各要素を、元の値の5倍に
  • Array\ => Observable\
    • RXRealm
      • https://github.com/RxSwiftCommunity/RxRealm
        • RXSwiftとRealmを一緒に使う
          • pod 'RxSwift'
          • pod 'RxCocoa'
          • pod 'RealmSwift'
          • pod 'RxRealm'

RXSwift を使って、Realmの処理を行う実際的なサンプルコードが、披露されました。

実務業務をモデルにしたRealmの運用、確認方法

batch_IMG_3943

Presented by: 永田大祐さん @ ポテパン(フリーランス)

サンプルデモ

  • ボタンタップをトリガーとして、以下処理(UIと連動して、テキストボックスに書き込まれたデータを書き込む処理を、10,000回繰り返すデモ
let obj: Array = [usernameOutlet.text!, ageOutlet.test!, passwordOutlet.text!]
    for _ in 1...10000 {
    try! realm.write {
        let object = obj
        realm.create(RealmObject.self, value: object)
    }
}

データ容量を調べる

  • Realm Browserを使う
  • print(Realm.Configuration.defaultConfiguration)
  • 取得したRealmFilePathと保存先のFilePath
  • iOSシミュレータからString型のデータを10,000 回書き込む処理を行い、Realm Browserで表示するデモ
    • default.realmを開く
    • ファイル容量をFinderで確認できる

岸川さんインタビュー - Realmの基礎知識

batch_IMG_3929

Realm の 岸川さんに、Realmが、どのような場面で役立っているのか、分かりやすく解説いただきました。

ー Realm とは、具体的にどんなところで役立っているのですか?

岸川さん(以下敬称略): AVA, Periscope, Yahoo, Money Forward, Wantedly, 日経, SanSanの各モバイルアプリ等でも使われています。

ー 一般の方が疑問に思われると思うのは、ネットワークから持ってくる情報を、なぜローカルで持っておく必要があるのか、ということだと思うのですが、その辺りについて教えて頂けますか?

岸川: 大抵、ネットワークだけではうまくいかないんですね。ネットが使えない、スピードが遅い場合もある。日本だと分かりにくいですが、常にネットが繋がっていない国・地域がある。

ー 日本はネットに恵まれているんですね。

岸川: ダウンロードしたデータをそのまま表示するといったことは、実は少なくて、検索などで加工してデータを表示するとか、例えばいいねが沢山付いている数で並び順を変えるなど、という場合など。並び替えや検索を使う場合は、(Realmを含む)データベースを使った方がよいです。

モバイルデータベースはいくつかの種類がありますが、やはりRealmを使うのが簡単です。

ー そして高速であると。

岸川: そうですね。大抵は、データの量を気にしなくても高速です。

ー 今回WWDCでサンフランシスコに行った際、(日本に比べて)通信の遅さにビックリしました(笑)

岸川: (笑)。画像とか、ツイッターとか、ゆっくりでてきますよね。

ー 画像とかローカルに(うまい形で)持っていると全然違うんだろうなと思いました。

岸川: そうですね。ダウンロードしている間に、何かができるのが重要かなと思います。

対応言語が増え、.NETでもRealmは使えるので、これからUnityへの対応も視野に入っていますし、将来的にはデスクトップの.NETが使えるようになると、サーバーサイドでも使える可能性が出てきます。jsも同様です。

ー (今後は)モバイルに限らないということですね。

岸川: そうですね。一方で、ローカルじゃないと困る場合があって、普通のアプリなら、データをネットワークから落として、それをキャッシュしてですけど、例えば、Apple Watch のアプリケーションとかだと、データが生まれるのがココ(Apple Watch)なんですよね。なので、ワークアウトやヘルスケアのデータは、まずApple Watchローカルに保持されて、それをAPIを使って(iOSデバイス側に)呼び出して使うことになる。

こうした場合など、(Realmのような)組み込みのデータベースの重要度は高くなると思います。

ー ありがとうございます!

次回Realm Meetup予定!

  • 8/16〜8/18 19:30〜
  • SanSan株式会社
  • Tim Oliver さんも参加予定

おわりに

Realmは、データベースの技術を提供するにとどまらず、情報発信を積極的に行い、ユーザーとのコミュニケーションが密な企業です。Realm Meetupはすでに17回目を数え、またWebサイトでも、有用な情報を積極的に提供されています。Realmには、今後も要注目ですね!