Couchbase Lite on Raspberry Pi

この記事は [Couchbase Advent Calendar 2015](http://qiita.com/advent-calendar/2015/couchbase) の5日目の記事です。

CouchbaseのAdventCalendarなにでCouchbase Server側の話をしようかと思いましたが、今回はCouchbase Mobileの話をしたいと思います。

# Couchbase Mobile
今回は登場する[Couchbase Mobile](http://www.couchbase.com/nosql-databases/couchbase-mobile)は**[Couchbase Server](http://www.couchbase.com/nosql-databases/couchbase-server)**・**Sync Gateway**・**Couchbase Lite**の3製品で構成されています。今回はその一部のCouchbase LiteをRaspberryPi上で動かしてみます。

# Couchbase Liteとは？
話を始める前に。Couchbase Liteが何かというのはご存知でしょうか？Couchbase社が提供している製品の一つです。

Couchbaseはドキュメント指向のNoSQLデータベースです。Couchbase Liteというのはそれをモバイルに対して利用できるようにしたものです。Couchbase Liteはモバイルのローカル上にあるデータベースSQLiteをあたかもKey-Value形式のように使えるようにするものです。ですので、モバイルとは言え、高速なレスポンスが実現されています。

また、Sync Gatewayと接続することにより、Couchabse Serverとの自動データ同期を可能とします。同期するデータも指定することができますので、モバイルのデータベース領域を食いつくす心配もありません。さらに、同期さえ済んでいれば、電波の通じないところでもネットワーク通信を行わないので、ネットにつながらなくてデータが取得できなくてイライラすることがなくなります。

# どうやって Couchbase Lite を使うの？
Couchbase Liteで調べると、AndroidやiPhoneでの使い方は色々と紹介されています。AndroidやiPhoneで利用するには当然ですがある程度コーディングをする必要があります。ですが今回は、Couchbase Liteにも[REST API](http://developer.couchbase.com/mobile/develop/references/couchbase-lite/rest-api/index.html)が用意されているので、そちらを使って楽がしたいのです。

色々と探っていたところ[こちらのGithub](https://github.com/couchbaselabs/couchbase-lite-local)にありました。このサイトからcouchbase-lite-local.jarを実行するだけです。

ですが、2015/04/24時点、Sync Gatewayに対しての同期が正常に動作していませんでした。Facebookの[Japan Couchabse Users Group](https://www.facebook.com/groups/325093881025411/?fref=ts)に質問したりして何とか解決することができました。

## Couchbase Liteの起動

というわけで、実行するjarを作成しなおしてそのjarを実行するだけでCouchbase Liteの起動です。jarは[こちらのGithub](https://github.com/Burning-Chai/couchbase-lite-raspberry)においてあります。そのうち、公式のほうが修正されると思いますので、そちらをまちましょう。

    wget用
    $ wget https://github.com/Burning-Chai/couchbase-lite-raspberry/raw/master/cbl.jar

## ドキュメントの保存など
起動が完了したら、データベースの作成、ドキュメントの保存、Sync Gatewayとの同期を行う必要があります。こちらの手順については[こちらのGithub](https://github.com/Burning-Chai/couchbase-lite-sample)のREAD MEに書いてありますのでそちらをお読みください。

# Sync Gatewayの用意
Couchbase Serverがどこかで起動しているのなら、Couchbase Liteとデータを同期したいものです。データの同期を行うのにはSync Gatewayを準備する必要があります。同期の仕方は[READ ME](https://github.com/Burning-Chai/couchbase-lite-raspberry/blob/master/README.md)の最後に書いてあります。

## Sync Gatewayインストール手順
Sync GatewayのインストールはLinuxに対して行いました。

１. [こちらのサイト](http://www.couchbase.com/nosql-databases/downloads)からダウンロード。

    $ wget http://www.couchbase.com/dl/releases/couchbase-sync-gateway/1.1.1/couchbase-sync-gateway-enterprise_1.1.1-10_x86_64.rpm


２. Sync Gatewayのインストール

	$ sudo rpm -ihv couchbase-sync-gateway-enterprise_1.0.4-34_x86_64.rpm

３. コンフィグを指定しながらSync Gateway起動

    $ cd /opt/couchbase-sync-gateway/bin/
    $ vi sg-config.json
    {
      "log": ["REST", "REST+", "HTTP", "HTTP+", "Access", "Cache", "Shadow", "Shadow+", "CRUD", "CRUD+", "Changes", "Changes+", "JSON", "JSON+"],
      "logFilePath": "/var/log/sync-gateway/sg.log",
      "verbose": true,
      "adminInterface": "0.0.0.0:4985",
      "databases": {
        "blog": {
          "server": "http://localhost:8091",
          "users": {
            "GUEST": {
              "disabled": false, "all_channels": ["*"], "admin_channels": ["*"]
            }
          },
          "bucket": "sync_gateway",
          "sync": `function(doc) {channel(doc.docType);}`
        }
      },
      "facebook": {
        "register": false
      }
    }
    $ ./sync_gateway -verbose=true sg-config.json >> sg.log 2>&1 &

このコンフィグはSync Gatewayに```blog```というデータベースを用意し、```sync_gateway```というCouchbaseのバケットと同期を行います。```server```はCouchbaseのIPを指定します。```users```や```sync```で同期する関する設定をおこいます。```databases```には複数のデータベースを書くことができます。```adminInterface```に```0.0.0.0:4985```を書くことにより、SyncGatewayのコンソールを見ることができます。

# 最後に
今回一切コードを書かずにCouchbase Liteを使ってみました。Raspberry Piも最近ではお手軽に入手可能なので、これらを使うことによってIoTプロジェクトが作りやすくなるかもしれません。ぜひ、みなさんも試してみてください。

また、Raspberry PiやCouchbase、Couchbase Liteを使って「こんなことがしたい」という方はご連絡ください。一緒にやっていきましょう。ご連絡お待ちしております。