オープンソースでモダンなドキュメント指向データベース、CouchDB。今回は実践的な「カクテルレシピブック」を作りながら、CouchDBの特長を解説します。サンプルプログラムをダウンロードし、実際に体験してみてください。(編集部)
第1回「“動物図鑑”で知るCouchDBの特徴」で、ドキュメント指向のデータベース、CouchDBの概要をお伝えしました。連載の第2回目はCouchDBの具体的な操作方法である、HTTPを利用した基本的なAPIやDesign Documentがテーマです。カクテルのレシピブックをCouchDB上に作る場合を例に解説していきたいと思います。レシピブックの1ページが1つのドキュメントになるイメージです。
レシピブックのサンプルを筆者のGithubリポジトリにまとめておきました。このサンプルが対応しているCouchDBのバージョンは0.9.x系と0.10.0になります。本記事公開時の最新版は0.10.0になります。ご都合のよいバージョンでご利用ください。サンプル内のソースコードは以下の解説で適宜取り上げていきます。解説に沿ってコマンドなどを順次実行していくことで、レシピブックができあがる仕組みになっています。
まだCouchDBをインストールしていないようでしたら、前回のインストール方法を参考にCouchDBを導入しておきましょう。新しいバージョンでもインストール方法に違いはありません。なお、引き続きUbuntu 9.04 Desktop Editionを環境として使用しています。
git cloneコマンドでサンプルを入手したら、cocktail-sampleディレクトリへ移動します。ディレクトリ内にあるupload-all.shはサンプルを一度に構築するためのものです。引数にサーバのアドレスを指定して実行します。すぐにレシピブックを構築して使ってみたい方は、お好みでお試しください。
$ sudo apt-get install git-core # ↑gitをインストールされていない方は実行してください $ git clone git://github.com/z-ohnami/cocktail-sample.git $ cd cocktail-sample $ ./upload-all.sh 127.0.0.1 # ↑これはレシピブックを一括して構築したい方のみ実行してください
最初に“cocktail-book”というデータベースを作成してみましょう。Futonから作成することもできますが、今回はよりシンプルに「curl」というコマンドを使って作成してみます。
curlを使うと、CUIから直接HTTPメソッドを発行できます。Ubuntuでcurlコマンドをインストールするには「$sudo apt-get install curl」と実行します。URIの末尾に作成するデータベースの名前を指定し、PUTメソッドを実行すると、データベースが作成されます。
$curl -X PUT 'http://127.0.0.1:5984/cocktail-book'
データベースの作成を確認するには、GETメソッドを使用するのがよいでしょう。データベース内にあるドキュメントの数や、更新頻度といった情報も同時に確認できます。
また、“_all_dbs”というAPIを使用すると、CouchDBに存在するデータベースの一覧をJSON形式で取得できます。
$curl -X GET 'http://127.0.0.1:5984/cocktail-book' $curl -X GET 'http://127.0.0.1:5984/_all_dbs'
データベースを削除したい場合はDELETEメソッドです。分かりやすいですね。
$curl -X DELETE http://127.0.0.1:5984/cocktail-book
次はドキュメントを操作するためのAPIです。CRUD(追加、参照、更新、削除)はもちろんのこと、ドキュメントへの添付ファイル追加や、複数ドキュメントの一括処理も可能です。まずは、CouchDBによるドキュメントのCRUDを見ていきましょう。
ドキュメントを追加するにはPOSTメソッド、またはPUTメソッドを使用します。ジンベースのカクテル、“マティーニ”のレシピを早速登録してみましょう。curlの場合、-dオプションで登録するデータを指定します。データはJSON形式に整えておきます。
$curl -X POST -d '{"name":"matini","proof":32}' 'http://127.0.0.1:5984/cocktail-book' $curl -X PUT -d '{"name":"matini","proof":32}' 'http://127.0.0.1:5984/cocktail-book/matini'
成功すると、以下のようにドキュメントへ付与された“id”と“rev”という2つの値が返ってきます。この2つの値は必ずドキュメントに付与されます。“id”は文字通り、CouchDBのデータベース内でドキュメントを一意に定めるための識別子です。“rev”はドキュメントのrevision(世代)を管理するための項目です。ドキュメントに更新が発生するたび、自動的に“rev”の値も更新されます。
以下の例は筆者の環境で実行した場合です。idとrevの値は環境によって異なります。
(POSTの場合) {"ok":true,"id":"c03e8626846f0f522effe1720673e04e","rev":"1-698180691"} (PUTの場合) {"ok":true,"id":"matini","rev":"1-3882499913"}
POSTとPUTでは、“id”の採番方法に違いがあります。POSTメソッドの場合、CouchDBが“id”を自動的に割り当てます。このときの採番にはuuidが用いられます。PUTの場合は利用者側で任意の“id”を定義できます。CouchDBを利用する目的に応じて最適な採番方法を選択しましょう。
POSTを使用すれば、プログラム側で採番を管理する仕組みを用意する必要がありません。“id”の重複発生などを確認することなく、ドキュメントを追加できます。その代わり、ドキュメントのURIがユーザーにとって分かりにくいものになってしまいます。PUTの場合はその逆です。利用者が直接URIを指定してドキュメントを使うような場合は、視認性が高い採番方法を独自に実装できるPUTの方がよいでしょう。
Copyright © ITmedia, Inc. All Rights Reserved.