Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
CouchbaseLiteが
さらに使いやすくなってた
上津原 一利
!

at Couchbase Meet Up
2013/12/12
自己紹介
• 転職しました
• Couchbase Liteネタ担当
• iOSアプリ開発
• でも何故か今はOculus Riftやってます
• http://ssdkfk.wordpress.com/
• 前回のスライドは1023PV(9ヶ...
本題
Couchbase Lite Beta 1.0
いつの間にか出てました ※2013/9/13
便利になってる!
やったね!

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

UITableView用のデータソースの提供が!
便利!
具体的には
(※目に見えて明らかに追加されたもの)

• CBLUITableSourceが追加
• Couchbase Sync Gatewayを利用して

Couchbaseと同期。Facebook認証なども

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

CBLModel
前回の発表では
ドキュメントの作成は…
DocumentはNSDictionary(連想配列)で作り
Databaseにputする
と言いましたが…
今回
CBLModelを作成しプロパティを設定
モデルをインスタンス化し、値を入れてSave
が、スマート
AppDelegate *ap = (AppDelegate *)[[UIApplication sharedApplication] delegate];
// ドキュメントを追加
NSDictionary *contents =
@{@"t...
モデルクラス
ExampleModel.h
@interface ExampleModel : CBLModel

!

@property (nonatomic, copy) NSString *text;
@property (nonato...
CBLModelで使えるクラス
・NSNumber

・int

・NSNull

・double

・NSString

・BOOL

・NSArray

・NSData

・NSDictionary.

・NSDate
・NSDecimal...
CBLModelにCBLModelが入れられる
!

つまり
!

リレーションを組むことが可能!
具体的には
@class ExampleModel;

!

@interface SecondModel : CBLModel

!

@property (assign) ExampleModel *model1;
@property (n...
こっちのが断然便利なので
CBLModelをがんがん
使ったほうがいいと思います
CBLUITableSource
CBLTableViewSourceって

• UITableView
• UITableDataSource
• LiveQuery

こいつらが全部
まとまったやつ
つまり何が便利?
使わなかったら

使ったら

• UITableView実装

• CBLTableView実装

• LiveQuery実装
• 再描画実装
カスタム性
CBLTableDelegateで
- (UITableViewCell *)couchTableSource:(CBLUITableSource*)source
cellForRowAtIndexPath:(NSIndexPath...
使うには?
ブログにまとめました

Couchbase LiteのCBLUITableSourceを
動かしてみた
※カスタムはまだです
CouchbaseとSync
やっときた
今までCouchDBのみとSyncだったけど
!

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

ゲートウェイが必要
http://www.couchbase.com/communities/
couchbase-sync-gateway
でもCouchDBと同じように実装すると
PushはできてもPullができない…
NSArray *repls = [ap.database replicateWithURL:[NSURL URLWithString:@"http://127....
できたそうです。
config.json

子、曰く

{
"interface":":4984",
"adminInterface":":4985",
"log":["REST"],
"databases":{
"sync_gateway":{...
だそうです
(まだ僕は動かせてません)
まとめ
• 結構使いやすいものになってきた
• 問題は、SQLiteとの使い分け
• メリットはAPIなしでのSyncが可能な点
• クエリだけでなくCouchbaseの知識は必要
• でもサーバーサイド覚えるよりは楽だよね?
まずは事例を
企業レベルではちょっとハードルが高いから
個人デベロッパーから使っていって
実績を作っていきましょう。
年末になにか作って
また何か報告します。
おしまい
Couchbase liteが更に使いやすくなってた
Couchbase liteが更に使いやすくなってた
Upcoming SlideShare
Loading in …5
×

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

3,010 views

Published on

Published in: Technology, Education
  • Be the first to comment

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

  1. 1. CouchbaseLiteが さらに使いやすくなってた 上津原 一利 ! at Couchbase Meet Up 2013/12/12
  2. 2. 自己紹介 • 転職しました • Couchbase Liteネタ担当 • iOSアプリ開発 • でも何故か今はOculus Riftやってます • http://ssdkfk.wordpress.com/ • 前回のスライドは1023PV(9ヶ月で)
  3. 3. 本題
  4. 4. Couchbase Lite Beta 1.0 いつの間にか出てました ※2013/9/13
  5. 5. 便利になってる! やったね! CouchbaseとのSyncもできるようになってた! ! UITableView用のデータソースの提供が! 便利!
  6. 6. 具体的には (※目に見えて明らかに追加されたもの) • CBLUITableSourceが追加 • Couchbase Sync Gatewayを利用して
 Couchbaseと同期。Facebook認証なども • etc…
  7. 7. ただ、ちょっとその前に… CBLModel
  8. 8. 前回の発表では ドキュメントの作成は… DocumentはNSDictionary(連想配列)で作り Databaseにputする と言いましたが…
  9. 9. 今回 CBLModelを作成しプロパティを設定 モデルをインスタンス化し、値を入れてSave が、スマート
  10. 10. 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!"); } 今回
  11. 11. モデルクラス ExampleModel.h @interface ExampleModel : CBLModel ! @property (nonatomic, copy) NSString *text; @property (nonatomic, strong) NSDate *created_at; @property (assign) BOOL check; ! @end ExampleModel.m @implementation ExampleModel ! @dynamic text,created_at,check; ! @end
  12. 12. CBLModelで使えるクラス ・NSNumber ・int ・NSNull ・double ・NSString ・BOOL ・NSArray ・NSData ・NSDictionary. ・NSDate ・NSDecimalNumber ・CBLModel CBLModel が入る!
  13. 13. CBLModelにCBLModelが入れられる ! つまり ! リレーションを組むことが可能!
  14. 14. 具体的には @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!", } もちろん、コード内ではプロパティ通りに クラスに格納されて返ってきます 使いやすい!
  15. 15. こっちのが断然便利なので CBLModelをがんがん 使ったほうがいいと思います
  16. 16. CBLUITableSource
  17. 17. CBLTableViewSourceって • UITableView • UITableDataSource • LiveQuery こいつらが全部 まとまったやつ
  18. 18. つまり何が便利? 使わなかったら 使ったら • UITableView実装 • CBLTableView実装 • LiveQuery実装 • 再描画実装
  19. 19. カスタム性 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;
  20. 20. 使うには? ブログにまとめました Couchbase LiteのCBLUITableSourceを 動かしてみた ※カスタムはまだです
  21. 21. CouchbaseとSync
  22. 22. やっときた 今までCouchDBのみとSyncだったけど ! ついにCouchbaseとSync出来るように!
  23. 23. Couchbase sync gateway ゲートウェイが必要 http://www.couchbase.com/communities/ couchbase-sync-gateway
  24. 24. でも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];
  25. 25. できたそうです。 config.json 子、曰く { "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"] } } } } }
  26. 26. だそうです (まだ僕は動かせてません)
  27. 27. まとめ • 結構使いやすいものになってきた • 問題は、SQLiteとの使い分け • メリットはAPIなしでのSyncが可能な点 • クエリだけでなくCouchbaseの知識は必要 • でもサーバーサイド覚えるよりは楽だよね?
  28. 28. まずは事例を 企業レベルではちょっとハードルが高いから 個人デベロッパーから使っていって 実績を作っていきましょう。
  29. 29. 年末になにか作って また何か報告します。
  30. 30. おしまい

×