2014/12/21更新

[MongoDB] フロントエンドエンジニアにオススメなデータベース、MongoDBに入門

このエントリーをはてなブックマークに追加      

こんにちは、@yoheiMuneです。
今日はFrontrend Advent Calendar 2014の8日目の記事として、フロントエンドエンジニアにお薦めしたいデータベース、MongoDBを紹介したいと思います。

画像

Special Thanks to https://flic.kr/p/6Hrbyy




目次




MongoDBとは何か

MongoDBはデータを永続化するための機能であるデータベースの1種であり、これを用いることでデータの保存・検索・更新・削除などができます。 データベースで有名なものにMySQLがありますが、MySQLはリレーショナルデータベース、MongoDBはドキュメント志向データベースと、データ保存する目的は同じですが手段が異なります。

なぜMongoDBがフロントエンドエンジニアにお薦めかというと、フロントエンドで利用するJavaScript言語の知識を生かせるデータベースだからです。 従来のデータベース(RDB:リレーショナルデータベース)では、データの取得や更新に以下のようなSQLを利用する必要がありました。
// データの取得例
SELECT id, name, age FROM user WHERE first_login_date = '2014-12-08';
// データ更新例
UPDATE user SET name = 'yoheiM2' WHERE id = 1;
SQLはそんなに難しい言語ではありませんが、新しいものを覚えるにはやはり労力が必要です。 その点MongoDBでは上記のようなデータ操作をJavaScriptで行う事ができ、フロントエンドエンジニアにとってありがたいデータベースなのです。

例えば上記のSQLは以下のように書き換えることができます。
// データの取得
db.user.find({first_login_date: '2014-12-08'});
// データの更新
db.user.update({id: 1}, {name: 'yoheiM2'});
JavaScriptを書いている人にとってこちらの方が親しみやすくないですか?

またJavaScriptはフロントエンドとMongoDB以外に、Node.jsでも利用できます。 つまりはですよ、JavaScriptの知識があれば、フロント(HTML,CSS,JavaScript)、サーバー(Node.js)、データベース(MongoDB)と全機能を一人でも作れちゃいます。 これってすごいことだと思うのです。

もちろんちゃんとやろうとしたらインフラ、サーバー、セキュリティ、データの整合性、パフォーマンスなど他にもやることがいっぱいありますが、お試しでやるだけならJavaScriptを軸にフロントからサーバーからDBまで全部できるって良いですよ。

また私は今、MongoDBを利用してユーザーの行動分析を行っています。 次回のブログではそのMongoDB活用事例を紹介したいので、今回は入門記事を書きました。

「MongoDBいいな!」と思った方、ぜひMongoDBを触ってみてください。
それでは次の章で、MongoDBの導入を行います。



MongoDBを導入する

ここではMacにおけるMongoDBの導入方法を説明します。 WindowsやLinuxへの導入方法はMongoDBドキュメント(英語)をご確認ください。

Macでは、HomeBrewを使うことで簡単に導入することができます。
$ brew install mongo
もしbrewコマンドが動かない場合には、HomeBrewの公式ページでインストール方法を確認の上、インストールしてみてください。

インストールできたらデータベースファイルの格納場所を作成します。
$ sudo mkdir -p /data/db
$ sudo chmod 777 /data/db
そして以下のコマンドでMongoDBを起動できれば導入成功です。
$ mongod
それでは次の章で、MongoDBの基本的な使い方をみていきましょう。



MongoDBを使ってみる

ここではMongoDBの基本的な使い方に触れたいと思います。

MongoDBの起動

MongoDBの導入時にMongoDBを起動しましたが、もしまだ起動していない場合には以下のコマンドで起動することができます。
$ mongod
これで起動ができました。 MongoDBを起動できたらその画面はそのままにしておきます。

MongoDBへログイン

ターミナルの別タブを開いて以下のコマンドを実行することで、MongoDBにログインできます。
$ mongo
コマンドオプションで接続先やユーザーやパスワードを指定できますが、今回は先ほど起動したMongoDBにログインするだけなので、特にオプションなしでログインします。

データーベースの確認

存在するデータベースを確認してみましょう。MongoDBの中には異なるデータベースを複数持つことができます。
show dbsコマンドでデータベース一覧を確認できます。
> show dbs
admin  (empty)
local  0.078GB

データベースの作成・利用

それでは新しくデータベースを作成してみましょう。 ここではsample1というデータベースを作成/利用します。
> use sample1
これでsample1というデータベースが作成され、さらにsample1データベースを使うようになりました。 以下のコマンドで、現在利用しているデータベースを確認することができます。
> db
sample1
なお、現時点ではsample1にはデータがまだ存在しないので、show dbsには表示されません。

データ登録

それではデータを登録してみましょう。 userというコレクション(リレーショナルデータベースでいうテーブル)に以下のようにコマンドを行うことで、3件のデータを登録します。
> db.user.insert({name: 'Jack', age: 27, hobbies: ['karaoke', 'tennis']});
> db.user.insert({name: 'Mery', age: 22, hobbies: ['walking']});
> db.user.insert({name: 'Shogo', age: 40, hobbies: ['books']});
無事に登録することができました。

データ検索

登録した情報は、findメソッドを使って取り出すことができます。
> db.user.find()
{ "_id" : ObjectId("5483200c2ce29f1e1043f24c"), "name" : "Jack", "age" : 27, "hobbies" : [ "karaoke", "tennis" ] }
{ "_id" : ObjectId("548320652ce29f1e1043f24d"), "name" : "Mery", "age" : 22, "hobbies" : [ "walking", "game" ] }
{ "_id" : ObjectId("548320652ce29f1e1043f24e"), "name" : "Shogo", "age" : 40, "hobbies" : [ "training", "books" ] }
findメソッドは検索を行う上でとても重要なメソッドで、検索条件の指定や抽出するカラムの指定など様々なことを行う事ができます。 またfind().limit(3)で抽出する上限を指定したり、find().count()で件数を取得したりもすることができます。

さらに詳しく

詳しい内容は、MongoDBのマニュアル(英語)を参照ください。検索部分については自分でも調べることも多いので、近いうちによく使う機能をブログにまとめられたらと思います。



Node.jsからMongoDBを利用する

この章では、Node.jsからMongoDBを扱う方法を説明します。 Node.jsからMongoDBを利用するためのライブラリはいくつか存在しますが、ここではシンプルに利用できるnode-mongodb-nativeを使います。

プロジェクト作成、ライブラリの導入

まずはnode.js用のプロジェクトを作成します。
$ mkdir node-mongo-sample
$ cd node-mongo-sample
$ npm init
そしてnodejs用のMongoDBドライバをインストールします。
$ npm install mongodb --save
これで準備完了です。

MongoDBへの接続

それではnode.jsからmongoDBを利用する実装を行います。 まずは実装するJSファイルを作成します。
$ touch mongo-test.js
そしてまずはMongoDBへ接続してみましょう。
// MongoDBに接続する
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost:27017/sample1';
MongoClient.connect(url, function (err, db) {
    console.log('MongoDBとの接続完了');
    db.close();
});

MongoDBへの検索

次に検索を行ってみます。 userコレクションに対してfindメソッドを使うことで検索することができます。
var collection = db.collection('user');
collection.find({}).toArray(function (err, users) {
    console.log(users.length); // 3
    console.dir(users);
    db.close();
});

その他にも

他にも登録、更新、削除なども行う事ができます。詳細はnode-mongodb-nativeのREADMEを参照してみてください。



参考URL

本記事を書いたりMongoDBの利用例を調べる上で、参考にさせていただいたリンクを掲載します。ありがとうございました。

- MongoDB本家ページ(英語)

- MongoDBマニュアル(英語)

- node-mongodb-native(英語) | Github

- MongoDB全機能解説① | slideshare

- MongoDBを知ろう | slideshare

- CyberAgentにおけるMongoDB | slideshare

- 初心者向けMongoDBのキホン | slideshare

- 月間10億PVを支えるMongoDB | slideshare



他のアドベントカレンダー

今回の記事も含め、以下の記事を2014年アドベントカレンダーとして執筆しました。 気になる記事がありましたら幸いです。

- [CSS] Object Oriented CSSを学んで綺麗なコードを書く

- [MongoDB] フロントエンドエンジニアにオススメなデータベース、MongoDBに入門

- [MongoDB] フロントエンドエンジニアにもできるMongoDBを使ったログ分析

- [JavaScript] 最近のjQueryとの付き合い方いろいろ

- [フロントエンド] スキャフォールド機能を提供するYEOMANに入門する

最後に

さて今回はMongoDBの基本部分を紹介させて頂きました。 データの格納がJSON形式だったり、データベース操作がJavaScriptだったりと、フロントエンドの人にも馴染みやすいと感じて頂けましたでしょうか。 趣味で何かアプリを作るときにちょっと使ってみるのはいいかなーと思います。

さて今回MongoDBの基本編を取り上げたのは、次のアドベントカレンダーでMongoDBを用いたユーザー行動分析を紹介したいためです。 MongoDBにユーザーの行動ログを入れて、それをMongoシェルを用いて分析しています。ぜひぜひ次回もご覧いただけたら幸いです。

それではFrontrend Advent Calendar 2014の記事は以上です。次はtokimariさんです。

今後も本ブログでは、フロントエンドに関する情報を書きたいと思います。気になった方はぜひ、本ブログのRSSTwitterをフォローして頂けると幸いです ^ ^。
最後までご覧頂きましてありがとうございました!





こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。