39
軽量・高速モバイルデータベース Realm入門を使って学ぶRealmの勘所 DevSap勉強会 17/03/26

書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

Embed Size (px)

Citation preview

Page 1: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

軽量・高速モバイルデータベースRealm入門を使って学ぶRealmの勘所DevSap勉強会 17/03/26

Page 2: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

菅原 祐@yusuga_

Page 3: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

Aplos for Twitter

Page 4: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

Realmの本を書きました!

Page 5: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

軽量•高速モバイルデ ー タベ ー ス

Re�alm 入門

菅原祐蕃

Realm岸川克己監修

「Swift」と「 Realm Mobile Database」

によるiOSアプリ開発を

徹底解説!区モバイルデー タペ ースを使ったことがない方

図「SQ Lite」や「Core Data」から置き換えたい方

区より実践的な使用方法を知りたい方

にオススメ!

授術評編社

Page 6: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

本日のテーマ

Page 7: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

本日のテーマ1.軽量・高速モバイルデータベースRealm入門を使って学ぶRealmの勘所

Page 8: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

本日のテーマ1.軽量・高速モバイルデータベースRealm入門を使って学ぶRealmの勘所2.サンプルからRealmの概要を掴む

Page 9: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

サンプルDL (195MB)1. Google検索: realm入門2. 軽量・高速モバイルデータベース Realm入門:書籍案内|技術評論社

3. 本書のサポートページ

Page 10: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

Page 11: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

Realmとは (前書き)• 世界初のモバイルファーストなデータベース• 2016年5月にバージョン1.0がリリース• 最新は2017年3月13日にリリースされたv2.4.4

• 本書は、v2.4.2をサポート Swift 3.0.2

Page 12: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

Realmの特徴 (p007)• クラス定義 == モデル定義(テーブル定義)• DBの非同期処理をサポート• 高速 (p009)

• 独自のストレージエンジン(C++)

Page 13: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

Realmの特徴 (p007)• マルチプラットフォーム (p010)

• iOS (Swift, Objective-C)• Android (Java, Kotlin)• React Native (JavaScript)• Xamarin (C#)

• データベースファイルは完全なマルチプラットフォームをサポート• iOSで作ったRealmファイルをAndroidで開くことも可能

Page 14: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

Realmの特徴 (p007)• 日本語で問い合わせ可能なユーザサポートの窓口 (p011)

• Slack• Realm Japan User Group (Facebook)

• OSS (p012)• realm-cocoa• realm-core

Page 15: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

Realmのインストール (p014)• Dynamic Framework• CocoaPods• Carthage

Page 16: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

モデル定義 (p027)import RealmSwift

class Person: Object { // RealmSwift.Objectクラスを継承dynamic var name = "" // String型let dogs = List<Dog>() // 1対多の関連

}class Dog: Object { dynamic var name = "" dynamic var age = 0}

Page 17: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

モデル定義チートシート (p272)• 非オプショナル型/オプショナル型• 1対1/1対多/逆方向の関連• プライマリキーの指定• インデックスの指定• 保存しないプロパティの指定• 暗黙的に保存しないプロパティ

Page 18: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

モデルオブジェクトの生成と初期化 3種類 (p035)1.プロパティ値let dog = Dog() dog.name = "Momo"dog.age = 9

Page 19: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

モデルオブジェクトの生成と初期化 3種類 (p035)2. KVCに準拠しているオブジェクトで初期化let dog = Dog(value: ["name": "Momo",

"age": 9])

Page 20: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

モデルオブジェクトの生成と初期化 3種類 (p035)3.各プロパティの値の配列で初期化let dog = Dog(value: ["Momo", 9])

Page 21: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

モデルオブジェクトの追加 (p039)let realm = try! Realm()// このrealmインスタンスを使いデータベースの操作を行う

// 書き込みトランザクションrealm.beginWrite()realm.add(mydog) // モデルオブジェクトの追加try! realm.commitWrite()

Page 22: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

モデルオブジェクトの取得 (p055)let results = realm.objects(Dog.self) // すべてのDogオブジェクト .filter("name CONTAINS 'x'") // nameにxを含む

Page 23: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

自動更新 (p069)let realm = try! Realm() // デフォルトRealmを取得// resutlsを生成let results = realm.objects(Cat.self) // Catモデルオブジェクト .filter("age >= 5") // 5歳以上

.sorted(byKeyPath: "age", ascending: true) // ageで昇順ソート

// データベースにCatがないので、resultsは0件です。print("results.count: \(results.count)") // 0

Page 24: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

自動更新 (p069)// cat1を加えます。ageは1です。let cat1 = Cat(value: ["name": "Toto",

"age": 1])try! realm.write { realm.add(cat1)}// データベースにCatは1件あるのですが、// cat1.ageが5未満なのでresultsは変わらず0件です。print("results.count: \(results.count)") // 0

Page 25: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

自動更新 (p069)// cat1.ageを10に変更します。try! realm.write { cat1.age = 10}// cat1が5歳以上の条件にマッチしたので、// resultsにcat1が自動で追加されます。print("results: \(results)") // [cat1]

Page 26: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

自動更新 (p069)// cat2を追加します。ageは5です。let cat2 = Cat(value: ["name": "Rao",

"age": 5])try! realm.write { realm.add(cat2)}// cat2は5歳以上の条件にマッチしているので、// resultsにcat2が自動で追加されます。// ageで昇順ソートもされています。print("results: \(results)") // [cat2, cat1]

Page 27: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

自動更新 (p069)// cat2を削除します。try! realm.write { realm.delete(cat2)}// cat2がデータベースから削除されたので、// resultsからcat2が自動で取り除かれます。print("results: \(results)") // [cat1]

Page 28: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

マルチスレッド (p074)// マルチスレッドでデータベースにアクセスDispatchQueue.global().async {

// デフォルトRealmを取得 let realm = try! Realm()

// モデルオブジェクトの生成 let otherdog = Dog() otherdog.name = "Hachi" otherdog.age = 5

realm.beginWrite()realm.add(otherdog) // モデルオブジェクトの追加

try! realm.commitWrite()}

Page 29: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

通知 (p080)class TableViewController: UITableViewController {

// 通知を有効にしたい期間中は、// NotificationTokenを強参照で保持する必要があります。

var token: NotificationToken?

override func viewDidLoad() {super.viewDidLoad()let realm = try! Realm()// Realmクラスの通知ハンドラを追加する。token = realm.addNotificationBlock

{ (notification, realm) in // 通知ハンドラ

} }}

Page 30: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

通知をサポートしているクラス• Realmクラス: いずれかのオブジェクトの変更• Objectクラス: オブジェクト自身の変更• コレクションクラス: コレクションクラスが持つオブジェクトの変更(Results、List、LinkingObjects)

Page 31: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

サンプルからRealmの概要を掴む

Page 32: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

サンプル 7選1.基本サンプル/11-01_通知/RealmNotification.xcodeproj

2.応用サンプル/11-05_通知のスキップ/RealmWithoutNotifying.xcodeproj

Page 33: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

サンプル 7選3.通知の細かい挙動サンプル/11-03通知ハンドラRealmCollectionChange-updateの挙動確認/RealmCollectionChange.xcodeproj

4.検索サンプル/19-08_タイムラインをフィルタリングする/TwitterFilter.xcodeproj

Page 34: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

サンプル 7選5.マイグレーションサンプル/20-02_仕様変更のマイグレーションに対応する/TwitterMigration.xcodeproj

6. Realmファイルの動的な切り替えサンプル/20-03_複数ユーザのログインに対応する/TwitterMultiple.xcodeproj

Page 35: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

サンプル 7選7.実践的な開発サンプル/20-04_その後の開発/TwitterApp.xcodeproj

Page 36: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

よくある質問Q.どういう場合にRealmを選択すればいいの?A. UserDefaults以上に複雑なことをしたい

Page 37: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

よくある質問Q. Core Dataよりいいの?A.-学習コスト低- APIがシンプル- 処理が高速

Page 38: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

書籍プレゼント3冊優先-勉強会に初めて来た方- Realmを使ったことない方

Page 39: 書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所

ご静聴ありがとうございました