読者です 読者をやめる 読者になる 読者になる

株式会社ネクスト エンジニアBlog

不動産・住宅情報サイト HOME'Sを運営する株式会社ネクストのエンジニアが提供する技術ブログです。エンジニアに役立つ情報の発信や、弊社エンジニアの活動を中心にお届けします。

Couchbase LiteをCouchDBとSync(レプリケーション)しよう

今回は、ここまで作ってきたデータをCouchDBと同期してみたいと思います。

この同期機能もCouchbase Liteの大きな特徴です。
Push、Pullどちらも機能を兼ね備えておりかつ、実装が簡単なのが特徴です。
普段にありがちなAPI問い合わせのメソッドなども書く必要は一切ありません。

同期対象は、CouchDB、またはCouchbase(CouchbaseはSyncGatewayが必要)となっています。

今回は、CouchDBとのSyncの方が簡単なのでそちらを見て行きましょう。

まず同期対象となるCouchDBを用意しなくてはいけません。 まずは以下に登録してください。

Cloudantに登録

Cloudant
https://cloudant.com/

値段は、使用料が毎月5ドル以下なら無料となっており、ちょっと触ってみる程度なら課金されません。

登録完了し、サインインすると、ダッシュボードが表示されます。
上部にある、New databaseに作りたいデータベース名を入力し、Createでデータベースを作成します。 これができれば準備完了です。

Replicationしよう!

レプリケーション先の準備ができれば、あとはコードを書くだけです。

gist8331915

URL部分は、各自以下のとおり変更を行ってください。

  • yourId:先ほど登録したID
  • password:先ほど登録したパスワード
  • dbName:先ほど作成したデータベース名

設定できたら、viewDidLoadでこのメソッドを呼出し、Runしてみてください。
これだけで同期はできているはずです。
Cloudantの「Your database」にある、先ほど作成したdatabaseを選択し、ドキュメント情報を見てみましょう。
CouchbaseLiteで作成したドキュメントがそっくりそのまま同期されているはずです。

補足

実は、同期するだけなら、

NSArray *repls = [ap.database replicateWithURL:[NSURL URLWithString:@"https://yourId:password@yourId.cloudant.com/dbName"]
                                   exclusively:YES];<br>

この項目だけで出来ます。

下に続いているpullとpushは、こちらが任意のタイミングでPull(GET)やPush(Post)を行うために必要になります。

任意のタイミングで同期する

これも非常に簡単です。
先ほど作成した、pull、pushに対してメッセージをひとつ送るだけです。

[pull start] [push start]

これだけで同期を開始します。

進捗を追う

進捗を追うには、最初に設定したobserverを追います。
公式では、completeを追っていましたが、時々completeしないことがあるので、modeを追っています

gist8331912

CBLReplicationMode には4つのモードが有り、

  • kCBLReplicationStopped, /*< The replication is finished or hit a fatal error. /
  • kCBLReplicationOffline, /*< The remote host is currently unreachable. /
  • kCBLReplicationIdle, /*< Continuous replication is caught up and waiting for more changes./
  • kCBLReplicationActive /*< The replication is actively transferring data. /

が存在します。

kCBLReplicationStopped になると、レプリケーション完了、もしくはエラーのモードなので、そこを終了点として持ちます。 このコードでは、同期が完了したらDBを読み直す処理をしています。

ざっくりですが、このような感じでCouchbase LiteとCouchDBを同期することができます。