32
CouchbaseLiteさらに使いやすくなってた 上津原 一利 at Couchbase Meet Up 2013/12/12

Couchbase liteが更に使いやすくなってた

  • Upload
    ssd-kfk

  • View
    1.173

  • Download
    5

Embed Size (px)

Citation preview

Page 1: Couchbase liteが更に使いやすくなってた

CouchbaseLiteが さらに使いやすくなってた

上津原 一利 !

at Couchbase Meet Up 2013/12/12

Page 2: Couchbase liteが更に使いやすくなってた

自己紹介•転職しました • Couchbase Liteネタ担当 • iOSアプリ開発 •でも何故か今はOculus Riftやってます • http://ssdkfk.wordpress.com/ • 前回のスライドは1023PV(9ヶ月で)

Page 3: Couchbase liteが更に使いやすくなってた

本題

Page 4: Couchbase liteが更に使いやすくなってた

Couchbase Lite Beta 1.0

いつの間にか出てました ※2013/9/13

Page 5: Couchbase liteが更に使いやすくなってた

便利になってる!

CouchbaseとのSyncもできるようになってた! !

UITableView用のデータソースの提供が!

やったね!

便利!

Page 6: Couchbase liteが更に使いやすくなってた

具体的には

• CBLUITableSourceが追加 • Couchbase Sync Gatewayを利用して Couchbaseと同期。Facebook認証なども

• etc…

(※目に見えて明らかに追加されたもの)

Page 7: Couchbase liteが更に使いやすくなってた

CBLModelただ、ちょっとその前に…

Page 8: Couchbase liteが更に使いやすくなってた

前回の発表では

DocumentはNSDictionary(連想配列)で作り Databaseにputする

ドキュメントの作成は…

と言いましたが…

Page 9: Couchbase liteが更に使いやすくなってた

今回

CBLModelを作成しプロパティを設定 モデルをインスタンス化し、値を入れてSave

が、スマート

Page 10: Couchbase liteが更に使いやすくなってた

AppDelegate *ap = (AppDelegate *)[[UIApplication sharedApplication] delegate]; // ドキュメントを追加 NSDictionary *contents = @{@"text" : @"Hello couchbase Lite", @"check" : [NSNumber numberWithBool:NO], @"created_at" : [CBLJSON JSONObjectWithDate: [NSDate date]]}; // 無記名ドキュメントの取得 CBLDocument* doc = [ap.database untitledDocument]; // ドキュメントの追加 NSError* error; if (![doc putProperties: contents error: &error]){ // 失敗 }

AppDelegate *ap = ApplicationDelegate; ExampleModel *model = [[ExampleModel alloc] initWithNewDocumentInDatabase:ap.database]; model.text = @"Hello CouchbaseLite!"; model.created_at = [NSDate new]; model.check = NO; NSError *err; if (![model save:&err]) { NSLog(@"Save Error!"); }

前回

今回

Page 11: Couchbase liteが更に使いやすくなってた

モデルクラス

@interface ExampleModel : CBLModel !@property (nonatomic, copy) NSString *text; @property (nonatomic, strong) NSDate *created_at; @property (assign) BOOL check; !@end

@implementation ExampleModel !@dynamic text,created_at,check; !@end

ExampleModel.h

ExampleModel.m

Page 12: Couchbase liteが更に使いやすくなってた

CBLModelで使えるクラス

・NSNumber ・NSNull ・NSString

・NSArray

・NSDictionary.

・int ・double ・BOOL ・NSData ・NSDate

・NSDecimalNumber ・CBLModel

CBLModelが入る!

Page 13: Couchbase liteが更に使いやすくなってた

CBLModelにCBLModelが入れられる !

つまり !

リレーションを組むことが可能!

Page 14: Couchbase liteが更に使いやすくなってた

具体的には@class ExampleModel; !@interface SecondModel : CBLModel !@property (assign) ExampleModel *model1; @property (nonatomic, copy) NSString *comment; !@end

{ text : "Hello CouchbaseLite!", created_at : "2013-12-12", check : false, comment : "Wonderful!", }

もちろん、コード内ではプロパティ通りに クラスに格納されて返ってきます

使いやすい!

Page 15: Couchbase liteが更に使いやすくなってた

こっちのが断然便利なので CBLModelをがんがん

使ったほうがいいと思います

Page 16: Couchbase liteが更に使いやすくなってた

CBLUITableSource

Page 17: Couchbase liteが更に使いやすくなってた

CBLTableViewSourceって

• UITableView • UITableDataSource • LiveQuery

こいつらが全部 まとまったやつ

Page 18: Couchbase liteが更に使いやすくなってた

つまり何が便利?使わなかったら

•UITableView実装 • LiveQuery実装 •再描画実装

使ったら

• CBLTableView実装

Page 19: Couchbase liteが更に使いやすくなってた

カスタム性CBLTableDelegateで

- (UITableViewCell *)couchTableSource:(CBLUITableSource*)source cellForRowAtIndexPath:(NSIndexPath *)indexPath; !- (void)couchTableSource:(CBLUITableSource*)source willUpdateFromQuery:(CBLLiveQuery*)query; !- (void)couchTableSource:(CBLUITableSource*)source updateFromQuery:(CBLLiveQuery*)query previousRows:(NSArray *)previousRows; !- (void)couchTableSource:(CBLUITableSource*)source willUseCell:(UITableViewCell*)cell forRow:(CBLQueryRow*)row; !- (bool)couchTableSource:(CBLUITableSource*)source deleteRow:(CBLQueryRow*)row; !- (void)couchTableSource:(CBLUITableSource*)source deleteFailed:(NSError*)error;

Page 20: Couchbase liteが更に使いやすくなってた

使うには?

ブログにまとめました

Couchbase LiteのCBLUITableSourceを 動かしてみた

※カスタムはまだです

Page 21: Couchbase liteが更に使いやすくなってた

CouchbaseとSync

Page 22: Couchbase liteが更に使いやすくなってた

やっときた

今までCouchDBのみとSyncだったけど !

ついにCouchbaseとSync出来るように!

Page 23: Couchbase liteが更に使いやすくなってた

Couchbase sync gateway

http://www.couchbase.com/communities/couchbase-sync-gateway

ゲートウェイが必要

Page 24: Couchbase liteが更に使いやすくなってた

でもCouchDBと同じように実装すると PushはできてもPullができない…

NSArray *repls = [ap.database replicateWithURL:[NSURL URLWithString:@"http://127.0.0.1:4984/sync_gateway"] exclusively:YES]; self.pull = [repls objectAtIndex: 0]; self.push = [repls objectAtIndex: 1]; ! // completeではなく、modeを取得する // completeの場合、completeしない場合があるため。 [_pull addObserver:self forKeyPath:@"mode" options:0 context:NULL]; [_push addObserver:self forKeyPath:@"mode" options:0 context:NULL];

Page 25: Couchbase liteが更に使いやすくなってた
Page 26: Couchbase liteが更に使いやすくなってた
Page 27: Couchbase liteが更に使いやすくなってた

できたそうです。{ "interface":":4984", "adminInterface":":4985", "log":["REST"], "databases":{ "sync_gateway":{ "server":"http://couchbase-jp:8091", "bucket":"sync_gateway", "sync":`function(doc) {channel(doc.channels);}` }, "todo":{ "server":"http://couchbase-jp:8091", "bucket":"todo", "sync":`function(doc) {channel("public");}`, "users": { "GUEST": { "disabled": false, "admin_channels":["public"] } } } } }

子、曰くconfig.json

Page 28: Couchbase liteが更に使いやすくなってた

だそうです(まだ僕は動かせてません)

Page 29: Couchbase liteが更に使いやすくなってた

まとめ

•結構使いやすいものになってきた •問題は、SQLiteとの使い分け •メリットはAPIなしでのSyncが可能な点 •クエリだけでなくCouchbaseの知識は必要 •でもサーバーサイド覚えるよりは楽だよね?

Page 30: Couchbase liteが更に使いやすくなってた

まずは事例を

企業レベルではちょっとハードルが高いから 個人デベロッパーから使っていって 実績を作っていきましょう。

Page 31: Couchbase liteが更に使いやすくなってた

年末になにか作って また何か報告します。

Page 32: Couchbase liteが更に使いやすくなってた

おしまい