Enviar búsqueda
Cargar
AWA with Realm
•
Descargar como PPTX, PDF
•
25 recomendaciones
•
3,689 vistas
Yuji Hato
Seguir
AWAのRealmを使ったアプリケーション設計のお話
Leer menos
Leer más
Software
Denunciar
Compartir
Denunciar
Compartir
1 de 31
Descargar ahora
Recomendados
SansanのEightアプリでRealmを導入した件
SansanのEightアプリでRealmを導入した件
今城 善矩
AlexaPepperTalk
AlexaPepperTalk
ssuser831037
Oculus RiftとLEAP Motionでゲームを作ってみて
Oculus RiftとLEAP Motionでゲームを作ってみて
Haruto Watanabe
ホットペッパービューティーアプリリプレイスとMVCP
ホットペッパービューティーアプリリプレイスとMVCP
Recruit Lifestyle Co., Ltd.
組込み向けRuby処理系mrubyの可能性
組込み向けRuby処理系mrubyの可能性
Salesforce Developers Japan
マルチデバイスに対応するためのAuto layout
マルチデバイスに対応するためのAuto layout
asakahara
Swift instagram viewer
Swift instagram viewer
Shintaro Kaneko
デザイナさんにGithubでpr投げてもらうまで
デザイナさんにGithubでpr投げてもらうまで
Hideharu Okuma
Recomendados
SansanのEightアプリでRealmを導入した件
SansanのEightアプリでRealmを導入した件
今城 善矩
AlexaPepperTalk
AlexaPepperTalk
ssuser831037
Oculus RiftとLEAP Motionでゲームを作ってみて
Oculus RiftとLEAP Motionでゲームを作ってみて
Haruto Watanabe
ホットペッパービューティーアプリリプレイスとMVCP
ホットペッパービューティーアプリリプレイスとMVCP
Recruit Lifestyle Co., Ltd.
組込み向けRuby処理系mrubyの可能性
組込み向けRuby処理系mrubyの可能性
Salesforce Developers Japan
マルチデバイスに対応するためのAuto layout
マルチデバイスに対応するためのAuto layout
asakahara
Swift instagram viewer
Swift instagram viewer
Shintaro Kaneko
デザイナさんにGithubでpr投げてもらうまで
デザイナさんにGithubでpr投げてもらうまで
Hideharu Okuma
愛せよ、さもなくば捨てよ。
愛せよ、さもなくば捨てよ。
Sho Yoshida
[db tech showcase Tokyo 2016] B15: サイバーエージェント アドテクスタジオの次世代データ分析基盤紹介 by 株式会社サイ...
[db tech showcase Tokyo 2016] B15: サイバーエージェント アドテクスタジオの次世代データ分析基盤紹介 by 株式会社サイ...
Insight Technology, Inc.
なるほどわかった!平成最後のAzureとAppService編
なるほどわかった!平成最後のAzureとAppService編
Takayuki Fuwa
Hue勉強会 20131008
Hue勉強会 20131008
Cloudera Japan
Google Tangoで現実世界を感じてみよう
Google Tangoで現実世界を感じてみよう
聡 大久保
ネイティブ機能を利用するWebアプリの実例~PhoneGap×Rails~
ネイティブ機能を利用するWebアプリの実例~PhoneGap×Rails~
Daisuke Futatsumori
Archer
Archer
Tokuhiro Matsuno
Googleアシスタントアプリ実際のところ
Googleアシスタントアプリ実際のところ
Yahoo!デベロッパーネットワーク
Webdb2011 hadoop
Webdb2011 hadoop
Ichiro Fukuda
#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ
#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ
Kazuya Sugimoto
Serverless Framework 使ってる話(node.js)
Serverless Framework 使ってる話(node.js)
Naoto Teruya
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
Serverworks Co.,Ltd.
React way at_eight
React way at_eight
Hideharu Okuma
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
SEGADevTech
App shortcuts
App shortcuts
Namito Satoyama
SoftLayer API で資産管理をお手伝い!
SoftLayer API で資産管理をお手伝い!
Kazumi IWANAGA
P5sound
P5sound
Akio Yonekura
2015/11/15 Javaでwebアプリケーション入門
2015/11/15 Javaでwebアプリケーション入門
Asami Abe
2014-07-26 jawsug-chiba ドキュメントを書こう! 運用自動化時代のドキュメンテーション
2014-07-26 jawsug-chiba ドキュメントを書こう! 運用自動化時代のドキュメンテーション
Operation Lab, LLC.
わかると楽しいInfrastructure as code
わかると楽しいInfrastructure as code
Shohei Kobayashi
継続的な開発スタイル 「AbemaTV iOSアプリを週一でリリースしている話」
継続的な開発スタイル 「AbemaTV iOSアプリを週一でリリースしている話」
Yuji Hato
Adaptive UI - 解像度の異なるデバイスや画面の向きに対応する 最適なレイアウトへ -
Adaptive UI - 解像度の異なるデバイスや画面の向きに対応する 最適なレイアウトへ -
Yuji Hato
Más contenido relacionado
Similar a AWA with Realm
愛せよ、さもなくば捨てよ。
愛せよ、さもなくば捨てよ。
Sho Yoshida
[db tech showcase Tokyo 2016] B15: サイバーエージェント アドテクスタジオの次世代データ分析基盤紹介 by 株式会社サイ...
[db tech showcase Tokyo 2016] B15: サイバーエージェント アドテクスタジオの次世代データ分析基盤紹介 by 株式会社サイ...
Insight Technology, Inc.
なるほどわかった!平成最後のAzureとAppService編
なるほどわかった!平成最後のAzureとAppService編
Takayuki Fuwa
Hue勉強会 20131008
Hue勉強会 20131008
Cloudera Japan
Google Tangoで現実世界を感じてみよう
Google Tangoで現実世界を感じてみよう
聡 大久保
ネイティブ機能を利用するWebアプリの実例~PhoneGap×Rails~
ネイティブ機能を利用するWebアプリの実例~PhoneGap×Rails~
Daisuke Futatsumori
Archer
Archer
Tokuhiro Matsuno
Googleアシスタントアプリ実際のところ
Googleアシスタントアプリ実際のところ
Yahoo!デベロッパーネットワーク
Webdb2011 hadoop
Webdb2011 hadoop
Ichiro Fukuda
#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ
#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ
Kazuya Sugimoto
Serverless Framework 使ってる話(node.js)
Serverless Framework 使ってる話(node.js)
Naoto Teruya
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
Serverworks Co.,Ltd.
React way at_eight
React way at_eight
Hideharu Okuma
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
SEGADevTech
App shortcuts
App shortcuts
Namito Satoyama
SoftLayer API で資産管理をお手伝い!
SoftLayer API で資産管理をお手伝い!
Kazumi IWANAGA
P5sound
P5sound
Akio Yonekura
2015/11/15 Javaでwebアプリケーション入門
2015/11/15 Javaでwebアプリケーション入門
Asami Abe
2014-07-26 jawsug-chiba ドキュメントを書こう! 運用自動化時代のドキュメンテーション
2014-07-26 jawsug-chiba ドキュメントを書こう! 運用自動化時代のドキュメンテーション
Operation Lab, LLC.
わかると楽しいInfrastructure as code
わかると楽しいInfrastructure as code
Shohei Kobayashi
Similar a AWA with Realm
(20)
愛せよ、さもなくば捨てよ。
愛せよ、さもなくば捨てよ。
[db tech showcase Tokyo 2016] B15: サイバーエージェント アドテクスタジオの次世代データ分析基盤紹介 by 株式会社サイ...
[db tech showcase Tokyo 2016] B15: サイバーエージェント アドテクスタジオの次世代データ分析基盤紹介 by 株式会社サイ...
なるほどわかった!平成最後のAzureとAppService編
なるほどわかった!平成最後のAzureとAppService編
Hue勉強会 20131008
Hue勉強会 20131008
Google Tangoで現実世界を感じてみよう
Google Tangoで現実世界を感じてみよう
ネイティブ機能を利用するWebアプリの実例~PhoneGap×Rails~
ネイティブ機能を利用するWebアプリの実例~PhoneGap×Rails~
Archer
Archer
Googleアシスタントアプリ実際のところ
Googleアシスタントアプリ実際のところ
Webdb2011 hadoop
Webdb2011 hadoop
#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ
#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ
Serverless Framework 使ってる話(node.js)
Serverless Framework 使ってる話(node.js)
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
React way at_eight
React way at_eight
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
App shortcuts
App shortcuts
SoftLayer API で資産管理をお手伝い!
SoftLayer API で資産管理をお手伝い!
P5sound
P5sound
2015/11/15 Javaでwebアプリケーション入門
2015/11/15 Javaでwebアプリケーション入門
2014-07-26 jawsug-chiba ドキュメントを書こう! 運用自動化時代のドキュメンテーション
2014-07-26 jawsug-chiba ドキュメントを書こう! 運用自動化時代のドキュメンテーション
わかると楽しいInfrastructure as code
わかると楽しいInfrastructure as code
Más de Yuji Hato
継続的な開発スタイル 「AbemaTV iOSアプリを週一でリリースしている話」
継続的な開発スタイル 「AbemaTV iOSアプリを週一でリリースしている話」
Yuji Hato
Adaptive UI - 解像度の異なるデバイスや画面の向きに対応する 最適なレイアウトへ -
Adaptive UI - 解像度の異なるデバイスや画面の向きに対応する 最適なレイアウトへ -
Yuji Hato
iOSDC 2018 動画をなめらかに動かす技術
iOSDC 2018 動画をなめらかに動かす技術
Yuji Hato
5分で学ぶ差分更新とRxDataSources
5分で学ぶ差分更新とRxDataSources
Yuji Hato
AbemaTV モバイルアプリの開発体制と開発プロセスの話
AbemaTV モバイルアプリの開発体制と開発プロセスの話
Yuji Hato
Apple TV tvOS入門 Iosdc2017
Apple TV tvOS入門 Iosdc2017
Yuji Hato
AbemaTV on tvOS
AbemaTV on tvOS
Yuji Hato
Flux with RxSwift
Flux with RxSwift
Yuji Hato
CarPlayの対応方法と日本での現状
CarPlayの対応方法と日本での現状
Yuji Hato
Más de Yuji Hato
(9)
継続的な開発スタイル 「AbemaTV iOSアプリを週一でリリースしている話」
継続的な開発スタイル 「AbemaTV iOSアプリを週一でリリースしている話」
Adaptive UI - 解像度の異なるデバイスや画面の向きに対応する 最適なレイアウトへ -
Adaptive UI - 解像度の異なるデバイスや画面の向きに対応する 最適なレイアウトへ -
iOSDC 2018 動画をなめらかに動かす技術
iOSDC 2018 動画をなめらかに動かす技術
5分で学ぶ差分更新とRxDataSources
5分で学ぶ差分更新とRxDataSources
AbemaTV モバイルアプリの開発体制と開発プロセスの話
AbemaTV モバイルアプリの開発体制と開発プロセスの話
Apple TV tvOS入門 Iosdc2017
Apple TV tvOS入門 Iosdc2017
AbemaTV on tvOS
AbemaTV on tvOS
Flux with RxSwift
Flux with RxSwift
CarPlayの対応方法と日本での現状
CarPlayの対応方法と日本での現状
AWA with Realm
1.
AWA with Realm
(iOS)
2.
波戸 勇二 [Yuji
Hato] INTRODUCTION 自己紹介 System EngineerとしてSIerを経て、2011年サ イバーエージェントに入社。 複数のAmebaサービスにて、サーバサイド /Android/iOSを担当し、現在はAWAのiOSエン ジニア。 Engineer Twitter https://twitter.com/dekatotoro GitHub https://github.com/dekatotoro
3.
今日は Realmに関しての使い方やTipsは様々な方が紹 介しているので、Realmを使ったアプリケーシ ョン全体の設計の紹介をします
4.
Agenda ・Realmを使う目的 ・Application Architecture ・なぜRealmか ・AWAとは ・Coding Topics ・Other
Topics
5.
6.
洋楽・邦楽問わず、いつでもどこでも好きなだけ楽しむことができ る 月額定額制の音楽ストリーミングサービス
7.
なぜRealmか
8.
なぜRealmか
9.
なぜRealmか ・モデル/リレーションがクラス定義でらく ・パフォーマンスがよい ・クロスプラットフォームでAndroid 同じ設計ができる ・Realm使ってるとかっこよさそう ・ドキュメントの充実 & サポート
10.
Realmを使う目的
11.
Realmを使う目的 ・ストレスフリーなUI/UXの実現
12.
Application Architecture
13.
サーバー クライアント クライアントとサーバ のデータ同期 Application Architecture
14.
サーバー クライアント Dataの差分更新/ 変更チェック Application Architecture 差分のみ
15.
サーバー クライアント オンデマンド保存 Application Architecture 必要になったら 取得
16.
Application Design
17.
そのまえに…
18.
Application Design API Server RealmView
ViewController Service
19.
Models Modelの定義
20.
Models @interface EntityHoge :
RLMObject @property NSString *hogeId; @property NSString *name; @property NSInteger updatedAt; @property NSInteger storedAt; // Finders + (EntityHoge *) findById: (NSString *) hogeId; @end @implementation EntityHoge + (NSString *)primaryKey { return @"hogeId"; } + (EntityHoge *) findById:(NSString *)hogeId { RLMRealm *realm = [RealmManager realm]; EntityHoge *hoge = [self objectInRealm:realm forPrimaryKey:hogeId]; return hoge; } @end ModelクラスにFinderなども定義しておくと便利。
21.
Service RealmObjectを扱うServiceを定義
22.
Service @implementation HogeService - (EntityHoge
*)read: (NSString *)hogeId { [[RealmManager realm] refresh]; return [EntityHoge findById:hogeId]; } - (BFTask *)fetch:(NSString *)hogeId withModifiedSince:(NSInteger)modifiedSince { return [[APIClient hogeData:hogeId modifiedSince:modifiedSince] continueWithExecutor:[RealmManager writeExecutor] withSuccessBlock:^id(BFTask *task) { // APIの戻りをチェックして差分をRealmに書き込み EntityHoge *hoge = [DataConverter toHoge:task.result]; [RealmManager commit:^(RLMRealm *realm) { [realm addOrUpdateObject:hoge]; }]; }]; } @end Serviceにread、fetchなど決まったIFを用意することで扱いやすくなる。 更新日時を渡すことでAPIからは変更/差分データのみを取得してRealmに保存。 readはスレッドを跨ぐことを考慮して毎回refreshを呼び出してから取得。
23.
ViewController ViewControllerからはServiceを通して Realmを操作
24.
ViewController @property (nonatomic, strong)
EntityHoge *hoge; - (void)loadFromRealm { self.hoge = [[HogeService shared] read:self.hogeId]; if (!self.hoge) { // no cache return; } // Show cache } - (void)loadFromAPI { NSInteger modifiedSince = (self.hoge) ? self.hoge.updatedAt : 0; [[[HogeService sharedService] fetch:self.hogeId withModifiedSince:modifiedSince] continueWithExecutor:[BFExecutor mainThreadExecutor] withBlock:^id(BFTask *task) { // Realmから取得し直してViewを更新 [self loadFromRealm]; return nil; }]; } Realmにデータがある場合は、APIに変更日を渡して変更/差分データのみ取得して 更新があったデータのみViewを更新する。 Boltsは非同期処理をメソッドチェーンで記述でき、Threadも指定できるのでRealm を扱いやすい。Notificationは使ってない。
25.
Other Topics
26.
RLMRealm Realmのpath、初期化、Realmインスタンスの取得、Migration、Write用スレッ ドqueue取得などはwrapper classを作って纏めておくとよい … + (void)prepareRealms
{ static dispatch_once_t once; dispatch_once(&once, ^{ defaultDataPath = [RealmManager dataRealmPath:kRealmDataFileName]; defaultCachePath = [RealmManager cacheRealmPath:kRealmCacheFileName]; [RLMRealm setDefaultRealmPath:defaultCachePath]; [RLMRealm setDefaultRealmSchemaVersion:kCurrentSchemeVersion withMigrationBlock:^(RLMMigration *migration, uint64_t oldSchemaVersion) { }]; [RLMRealm defaultRealm]; }); } + (RLMRealm *) realm { return [RLMRealm defaultRealm]; } …
27.
Notifications Realmのデータ変更時に処理ができますが Notificationsの詳細情報がないので、きめ細や かなUI制御ができないため使っていない @property(nonatomic, strong) RLMNotificationToken
*token; … self.token = [[LVPRealms realm] addNotificationBlock:^(NSString *note, RLMRealm * realm) { // updateUI }];
28.
Migration テーブル再構築処理かかないといけないので、 モデルが大幅に変更になるような場合はつらい … 今のところSchemaVersion上げるだけで済んで いる
29.
Compaction メモリ系のCrashログが増加してきたので中間 テーブルの肥大化を懸念 1日以上経っていたらCompactionを実行している
30.
まとめ ・複雑なデータを大量に扱うアプリでキャッ シュ用途として相性が良い ・Realm と Bolts
は意外に相性がよい ・クライアントにデータ保存する場合は サーバ含めたアプリケーション全体の 設計が大事 ・Realmチームのサポートが厚い
31.
THANK YOU!
Notas del editor
avexとCAが半分ずつ出資してつくった会社 楽曲提供レーベル社数は現在は23社 今年中に500万曲、来年には1,000万曲 (リリースして2週間足らずで約100万ダウンロード)
勉強会で良く見かける公式のベンチマーク とりあえず速そう
Descargar ahora