<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>Take it easy!　 - mauekusa &#039;s BLOG - &#187; mongoDB</title>
	<atom:link href="http://blog.bot.vc/category/mongodb/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.bot.vc</link>
	<description>　SocialMedia / SmartPhone / Banana な BLOG</description>
	<lastBuildDate>Sat, 04 Apr 2026 05:52:57 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.1</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.bot.vc/category/mongodb/feed/" />
		<item>
		<title>PHPの高速フレームワーク FuelPHP を試してみました。入門版サンプルと、MongoDBの設定方法まとめ</title>
		<link>http://blog.bot.vc/2013/01/fuelphp/</link>
		<comments>http://blog.bot.vc/2013/01/fuelphp/#comments</comments>
		<pubDate>Sat, 12 Jan 2013 13:40:06 +0000</pubDate>
		<dc:creator>manabu uekusa</dc:creator>
				<category><![CDATA[FuelPHP]]></category>
		<category><![CDATA[mongoDB]]></category>

		<guid isPermaLink="false">http://blog.bot.vc/?p=3811</guid>
		<description><![CDATA[この記事の所要時間： 約 1分20秒 FuelPHPは、2011年の7月にバーション1.0がリリースした 最新のPHPフレームワークです。 特徴は、MongoDBやMySQLなどをサポートしていて RESTfulなコント &#8230; <a href="http://blog.bot.vc/2013/01/fuelphp/">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div style="border-top:2px dotted #ccc;border-bottom:2px dotted #ccc;padding:0.2em 0;text-align:right;font-size:small;color:#444">
	この記事の所要時間： <span style="font-weight:bold">約 <span style="color:#f00">1</span>分<span style="color:#f00">20</span>秒</span>
</div>
<p>
<a rel="lightbox" href="http://blog.bot.vc/wp-content/uploads/2013/01/fuelPHP_logo.png" title="FuelPHP logo"><img src="http://blog.bot.vc/wp-content/uploads/2013/01/fuelPHP_logo.png" alt="FuelPHP logo" title="fuelPHP_logo.png" border="0" width="550" height="138" /></a><br />
<br />
<br />
<strong>FuelPHP</strong>は、2011年の7月にバーション1.0がリリースした<br />
最新の<strong>PHPフレームワーク</strong>です。<br />
<br />
特徴は、MongoDBやMySQLなどをサポートしていて<br />
RESTfulなコントローラーもすぐに作成できます。<br />
また、<strong>軽量高速</strong>です。<br />
<br />
<strong>FuelPHP公式サイト</strong><br />
 <a href="http://fuelphp.com/" target="_blank" class="advmk">http://fuelphp.com/</a><br />
<br />
実際に、ちょこっとプログラムを書いて、使い方をまとめておきたいと思います。<span id="more-3811"></span>インストールは、とっても簡単です。<br />
下記のコマンドで、さくっとインストールされます。<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"># curl get.fuelphp.com/oil | sh</pre></div></div>

<br />
<br />
<br />
次に、動かしたいディレクトリに移動して、コマンドを入力すると<br />
プロジェクトが作成出来ます。<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"># oil create 'プロジェクト名'</pre></div></div>

<br />
<br />
<br />
fuelってディレクトリが作りたければ<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"># oil create fuel</pre></div></div>

<br />
<br />
です。<br />
<br />
<a rel="lightbox" href="http://blog.bot.vc/wp-content/uploads/2013/01/fuel_directory.png" title="Fuel directory"><img src="http://blog.bot.vc/wp-content/uploads/2013/01/fuel_directory.png" alt="Fuel directory" title="fuel_directory.png" border="0" width="231" height="515" /></a><br />
<br />
こんな感じにファイルが展開されます。<br />
<br />
http://localhost/fuelPHP/public/<br />
<br />
公開ポイントにアクセスすると、FuelPHPの画面がでます。<br />
<br />
<a rel="lightbox" href="http://blog.bot.vc/wp-content/uploads/2013/01/fuelPHP_top.png" title="FuelPHP top"><img src="http://blog.bot.vc/wp-content/uploads/2013/01/fuelPHP_top.png" alt="FuelPHP top" title="fuelPHP_top.png" border="0" width="400" height="auto" /></a><br />
<br />
主要な設定ファイルは、3つあります。<br />
<strong>fuel/app/config</strong> ディレクトリにあります。<br />
<br />
config.php<br />
メインの設定ファイル<br />
<br />
db.php<br />
データベース設定ファイル<br />
<br />
routes.php<br />
ルーティング設定ファイル<br />
<br />
config.phpを下記のように書き換えます。<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;?php</span>
<span style="color: #009900;"><span style="color: #66cc66;">/</span>**</span>
<span style="color: #009900;"> * Fuel is a fast, lightweight, community driven PHP5 framework.</span>
<span style="color: #009900;"> *</span>
<span style="color: #009900;"> * @package    Fuel</span>
<span style="color: #009900;"> * @<span style="color: #000066;">version</span>    <span style="color: #cc66cc;">1.0</span></span>
<span style="color: #009900;"> * @author     Fuel Development Team</span>
<span style="color: #009900;"> * @license    MIT License</span>
<span style="color: #009900;"> * @copyright  <span style="color: #cc66cc;">2010</span> - <span style="color: #cc66cc;">2012</span> Fuel Development Team</span>
<span style="color: #009900;"> * @<span style="color: #000066;">link</span>       http:<span style="color: #66cc66;">//</span>fuelphp.com</span>
<span style="color: #009900;"> *<span style="color: #66cc66;">/</span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #66cc66;">/</span>**</span>
<span style="color: #009900;"> * If you want to override the default configuration, add the keys you</span>
<span style="color: #009900;"> * want to change here, and assign new values to them.</span>
<span style="color: #009900;"> *<span style="color: #66cc66;">/</span></span>
&nbsp;
<span style="color: #009900;">return array<span style="color: #66cc66;">&#40;</span></span>
<span style="color: #009900;"><span style="color: #ff0000;">'index_file'</span> <span style="color: #66cc66;">=</span>&gt;</span> false,
'profiling' =&gt; false
);</pre></div></div>

<br />
<br />
<br />
<strong><a href="http://example.jp/index.php/bbs/" target="_blank" class="advmk">http://example.jp/index.php/bbs/</a></strong>を <strong><a href="http://example.jp/bbs/" target="_blank" class="advmk">http://example.jp/bbs/</a></strong>で<br />
アクセス可能になります。<br />
<br />
.htaccessで、mod_rewriteの設定がされています。<br />
<br />
<h2>Hello Worldの表示</h2>
<br />
やっぱり、はじめのプログラムと言えば、<strong>Hello World</strong>の表示なので<br />
サンプルを作ってみます。<br />
<br />
まず、<strong>routes.php</strong>のhelloの記述をコメントアウトします。<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;?php</span>
<span style="color: #009900;">return array<span style="color: #66cc66;">&#40;</span></span>
<span style="color: #009900;">	<span style="color: #ff0000;">'_root_'</span>  <span style="color: #66cc66;">=</span>&gt;</span> 'welcome/index',  // The default route
	'_404_'   =&gt; 'welcome/404',    // The main 404 route
&nbsp;
//	'hello(/:name)?' =&gt; array('welcome/hello', 'name' =&gt; 'hello'),
);</pre></div></div>

<br />
<br />
<br />
<strong>fuel/app/classes/controller/hello.php</strong> ファイルを作成します。<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;?php</span>
&nbsp;
<span style="color: #009900;"><span style="color: #000066;">class</span> Controller_Hello extends Controller</span>
<span style="color: #009900;"><span style="color: #66cc66;">&#123;</span></span>
<span style="color: #009900;">	public function action_index<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span></span>
<span style="color: #009900;">	<span style="color: #66cc66;">&#123;</span></span>
<span style="color: #009900;">		return <span style="color: #ff0000;">'Hello World!!'</span>;</span>
<span style="color: #009900;">	<span style="color: #66cc66;">&#125;</span></span>
<span style="color: #009900;"><span style="color: #66cc66;">&#125;</span></span></pre></div></div>

<br />
http://localhost/fuelphp/public/hello/index<br />
<br />
にアクセスすると、<strong>Hello World!!</strong>が表示されます。<br />
<br />
<h3>実行結果</h3>
<br />
<a rel="lightbox" href="http://blog.bot.vc/wp-content/uploads/2013/01/helloworld.png" title="Helloworld"><img src="http://blog.bot.vc/wp-content/uploads/2013/01/helloworld.png" alt="Helloworld" title="helloworld.png" border="0" width="319" height="63" /></a><br />
<br />
このサンプルは、Controllerだけで表示しているので<br />
次は、Viewを使った表示にしてみます。<br />
<br />
<strong>fuel/app/views/hello.php</strong> ファイルを作成します。<br />
<strong>View</strong>だけ場所が違うので、始めは戸惑います＾＾<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #00bbdd;">&lt;!DOCTYPE html&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">html</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">meta</span> <span style="color: #000066;">charset</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;utf-8&quot;</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">title</span>&gt;</span>Hello world<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">title</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">p</span>&gt;</span>Hello World!!<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">p</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">html</span>&gt;</span></pre></div></div>

<br />
<br />
<br />
<strong>fuel/app/classes/controller/hello.php</strong> 先ほどのコントローラーファイルを書き換えます。<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;?php</span>
<span style="color: #009900;"><span style="color: #000066;">class</span> Controller_Hello extends Controller</span>
<span style="color: #009900;"><span style="color: #66cc66;">&#123;</span></span>
<span style="color: #009900;">	public function action_index<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span></span>
<span style="color: #009900;">	<span style="color: #66cc66;">&#123;</span></span>
<span style="color: #009900;">		return View::forge<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'hello'</span><span style="color: #66cc66;">&#41;</span>;</span>
<span style="color: #009900;">	<span style="color: #66cc66;">&#125;</span></span>
<span style="color: #009900;"><span style="color: #66cc66;">&#125;</span></span></pre></div></div>

<br />
http://localhost/fuelphp/public/hello/index<br />
<br />
に再度アクセスすると、<strong>Hello World!!</strong>が表示されます。<br />
<br />
<h3>実行結果</h3>
<br />
<a rel="lightbox" href="http://blog.bot.vc/wp-content/uploads/2013/01/helloworld.png" title="Helloworld"><img src="http://blog.bot.vc/wp-content/uploads/2013/01/helloworld.png" alt="Helloworld" title="helloworld.png" border="0" width="319" height="63" /></a><br />
<br />
結果は同じですが、<strong>View</strong>を使った表示になっています。<br />
<br />
<h2>MVCモデル</h2>
コードをモデル (<strong>Model</strong>)、ビュー (<strong>View</strong>)、コントローラ (<strong>Controller</strong>) の 3つの役割に分割して作成します。<br />
<br />
<strong>コントローラー</strong>は、<strong>アプリケーション全体の制御</strong>をします。<br />
<strong>モデル</strong>は、<strong>データの管理</strong>をします。<br />
<strong>ビュー</strong>は、<strong>画面表示</strong>を行います。<br />
<br />
それぞれ、MVCに分けてコーディングしていきます。<br />
<br />
<h2>URLの構造</h2>
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;">http://example.jp/コントローラ/メソッド [/パラメータ 1[/パラメータ 2[/...]]]</pre></div></div>

<br />
<br />
<br />
<strong>1番目</strong>の URI セグメントが、実行される<strong>コントローラ名</strong><br />
<strong>2番目</strong>の URI セグメントが、実行されるコントローラの<strong>メソッド名</strong><br />
<strong>3番目以降</strong>の URI セグメントが、メソッドに渡される<strong>引数</strong><br />
<br />
<strong>fuel/app/classes/controller/blog.php</strong> ファイルを作成します。<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;?php</span>
<span style="color: #009900;"><span style="color: #000066;">class</span> Controller_Blog extends Controller <span style="color: #66cc66;">&#123;</span></span>
&nbsp;
<span style="color: #009900;">	public function action_category<span style="color: #66cc66;">&#40;</span>$cat <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'php'</span>,$page <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'1'</span><span style="color: #66cc66;">&#41;</span></span>
<span style="color: #009900;">	<span style="color: #66cc66;">&#123;</span></span>
<span style="color: #009900;">		return __FILE__ . <span style="color: #ff0000;">'&lt;br /&gt;</span></span>' . $cat . '<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">br</span> <span style="color: #66cc66;">/</span>&gt;</span>' . $page;
	}
}</pre></div></div>

<br />
http://localhost/fuelphp/public/blog/category/php/1<br />
<br />
<h3>実行結果</h3>
<a rel="lightbox" href="http://blog.bot.vc/wp-content/uploads/2013/01/php1.png" title="Php1"><img src="http://blog.bot.vc/wp-content/uploads/2013/01/php1.png" alt="Php1" title="php1.png" border="0" width="499" height="90" /></a><br />
<br />
http://localhost/fuelphp/public/blog/category/perl/2<br />
<br />
<h3>実行結果</h3>
<a rel="lightbox" href="http://blog.bot.vc/wp-content/uploads/2013/01/perl2.png" title="Perl2"><img src="http://blog.bot.vc/wp-content/uploads/2013/01/perl2.png" alt="Perl2" title="perl2.png" border="0" width="487" height="91" /></a><br />
<br />
それぞれに、<strong>引数</strong>の内容が表示されています。<br />
<br />
<h2>Restコントローラー</h2>
<br />
<strong>fuel/app/classes/controller/weather.php</strong> ファイルを作成します。<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;?php</span>
<span style="color: #009900;"><span style="color: #000066;">class</span> Controller_Weather extends Controller_Rest</span>
<span style="color: #009900;"><span style="color: #66cc66;">&#123;</span></span>
<span style="color: #009900;">	public function get_today<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span></span>
<span style="color: #009900;">	<span style="color: #66cc66;">&#123;</span></span>
<span style="color: #009900;">		<span style="color: #66cc66;">//</span>クエリ文字列から地名を代入</span>
<span style="color: #009900;">		$location <span style="color: #66cc66;">=</span> Input::get<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'loc'</span><span style="color: #66cc66;">&#41;</span>;</span>
<span style="color: #009900;">		$weather <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'fine'</span>;</span>
&nbsp;
<span style="color: #009900;">		<span style="color: #66cc66;">//</span>レスポンスを返す</span>
<span style="color: #009900;">		$this-&gt;</span>response(array(
			'location' =&gt; $location,
			'weather' =&gt; $weather,
		));
	}
}</pre></div></div>

<br />
<br />
<br />
パラメータを付けてアクセスします。<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;">http://localhost/fuelphp/public/weather/today.json?loc=tokyo</pre></div></div>

<br />
<br />
<br />
<h3>実行結果</h3>
<br />
<a rel="lightbox" href="http://blog.bot.vc/wp-content/uploads/2013/01/rest.png" title="Rest"><img src="http://blog.bot.vc/wp-content/uploads/2013/01/rest.png" alt="Rest" title="rest.png" border="0" width="320" height="68" /></a><br />
<br />
<strong>Restコントローラー</strong>を使うと<br />
簡単に、<strong>json</strong>や<strong>xml</strong>、<strong>CSV</strong>で出力することが出来ます。<br />
とっても便利です！<br />
<br />
拡張子を指定すると、自動で指定したフォーマットで出力されます。<br />
xml　　　　XML<br />
json　　　JSON<br />
jsonp　　JSONP<br />
csv　　　CSVファイル<br />
<br />
<br />
<h2>MongoDB</h2>
<br />
<strong>app/config/db.php </strong>の設定をします。<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;?php</span>
<span style="color: #009900;"><span style="color: #66cc66;">/</span>**</span>
<span style="color: #009900;"> * Use this file to override global defaults.</span>
<span style="color: #009900;"> *</span>
<span style="color: #009900;"> * See the individual environment DB configs <span style="color: #000066;">for</span> specific config information.</span>
<span style="color: #009900;"> *<span style="color: #66cc66;">/</span></span>
&nbsp;
&nbsp;
<span style="color: #009900;">return array<span style="color: #66cc66;">&#40;</span></span>
<span style="color: #009900;">	<span style="color: #ff0000;">'active'</span> <span style="color: #66cc66;">=</span>&gt;</span> 'mongo',
	'mongo' =&gt; array(
		'default' =&gt; array(
			'hostname'   =&gt; 'localhost',
			'database'   =&gt; 'blog',
			'username'   =&gt; 'user',
			'password'   =&gt; 'pass',
		),
	),
);</pre></div></div>

<br />
<br />
<br />
<strong>fuel/app/classes/controller/blog.php</strong> ファイルを変更します。<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;?php</span>
<span style="color: #009900;"><span style="color: #000066;">class</span> Controller_Blog extends Controller <span style="color: #66cc66;">&#123;</span></span>
&nbsp;
<span style="color: #009900;">	public function action_index<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span></span>
<span style="color: #009900;">	<span style="color: #66cc66;">&#123;</span></span>
&nbsp;
<span style="color: #009900;">		$mongodb <span style="color: #66cc66;">=</span> \Mongo_Db::instance<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</span>
<span style="color: #009900;">		<span style="color: #66cc66;">//</span> 挿入</span>
<span style="color: #009900;">		$results <span style="color: #66cc66;">=</span> $mongodb-&gt;</span>insert('posts', array('name' =&gt; '名前', 'contents' =&gt; 'コンテンツ'));
		// データ取得
		$results = $mongodb-&gt;get('posts');
		var_dump($results);
&nbsp;
		return $results;
&nbsp;
	}
}</pre></div></div>

<br />
http://localhost/fuelphp/public/blog/<br />
<br />
<h3>実行結果</h3>
<br />
<a rel="lightbox" href="http://blog.bot.vc/wp-content/uploads/2013/01/mongo.png" title="Mongo"><img src="http://blog.bot.vc/wp-content/uploads/2013/01/mongo.png" alt="Mongo" title="mongo.png" border="0" width="400" height="auto" /></a><br />
<br />
簡単に、<strong>MongoDB</strong>にも接続できます。<br />
<br />
<h2>まとめ</h2>
<br />
<strong>FuelPHP</strong>などのフレームワークを使うと<br />
<strong>保守性</strong>も上がるし、<strong>モジュールの流用</strong>なども簡単にできるようになります。<br />
<br />
また、jsonなどの<strong>Restコントローラー</strong>は、簡単に作成出来るので<br />
わざわざコーディングしなくても良くなります。<br />
<br />
<strong>脆弱性</strong>の対応なども、フレームワーク側で吸収できます。<br />
<strong>DB</strong>の接続なども簡単なので、FuelPHPを使っていきたいと思います♪<br />
<br />
<h2>参考図書</h2>
<br />
<a rel="lightbox" href="http://blog.bot.vc/wp-content/uploads/2013/01/cover_s.jpeg" title="Cover s"><img src="http://blog.bot.vc/wp-content/uploads/2013/01/cover_s.jpeg" alt="Cover s" title="cover_s.jpeg" border="0" width="100" height="150" /></a><br />
<br />
<strong>はじめてのフレームワークとしてのFuelPHP</strong><br />
 <a href="http://tatsu-zine.com/books/fuelphp1st" target="_blank" class="advmk">http://tatsu-zine.com/books/fuelphp1st</a></p>
<div id="fb-root"></div>
<script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script>
<fb:comments href="http://blog.bot.vc/2013/01/fuelphp/"></fb:comments>]]></content:encoded>
			<wfw:commentRss>http://blog.bot.vc/2013/01/fuelphp/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.bot.vc/2013/01/fuelphp/" />
	</item>
		<item>
		<title>はじめてのmongoDB 入門編 構築・設定・ツールまとめ</title>
		<link>http://blog.bot.vc/2012/12/mongodb/</link>
		<comments>http://blog.bot.vc/2012/12/mongodb/#comments</comments>
		<pubDate>Sun, 09 Dec 2012 09:02:26 +0000</pubDate>
		<dc:creator>manabu uekusa</dc:creator>
				<category><![CDATA[mongoDB]]></category>

		<guid isPermaLink="false">http://blog.bot.vc/?p=3540</guid>
		<description><![CDATA[この記事の所要時間： 約 10分10秒 最近、巷ではRDBMSでなく、NoSQLの話題が出てくるようになりました。 NoSQLとは、リレーショナルデータベース（RDBMS）を象徴するSQL言語がない （NoSQL）から誕 &#8230; <a href="http://blog.bot.vc/2012/12/mongodb/">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div style="border-top:2px dotted #ccc;border-bottom:2px dotted #ccc;padding:0.2em 0;text-align:right;font-size:small;color:#444">
	この記事の所要時間： <span style="font-weight:bold">約 <span style="color:#f00">10</span>分<span style="color:#f00">10</span>秒</span>
</div>
<p>
<a rel="lightbox" href="http://blog.bot.vc/wp-content/uploads/2012/12/mongodb_title.png" title="Mongodb title"><img src="http://blog.bot.vc/wp-content/uploads/2012/12/mongodb_title.png" alt="Mongodb title" title="mongodb_title.png" border="0" width="564" height="245" /></a><br />
<br />
最近、巷では<strong>RDBMS</strong>でなく、<strong>NoSQL</strong>の話題が出てくるようになりました。<br />
NoSQLとは、リレーショナルデータベース（RDBMS）を象徴する<strong>SQL言語</strong>がない<br />
（NoSQL）から誕生した言葉です。<br />
<br />
最近では、「<strong>Not Only SQL</strong>（SQLだけじゃない）」の略という解釈が一般的です。<br />
<br />
<strong>Hadoop</strong>、<strong>Cassandra</strong>や、先日のNoSQL勉強会で聞いた、<br />
<strong>okuyama</strong>、<strong>Riak</strong>、<strong>Couchbase</strong>などがありますが<br />
今回は、MySQLに近い感じで開発などにも利用出来そうな<br />
「<strong>mongoDB</strong>」について調べてみました。<br />
<br />
折角調べてみたので、BLOGにまとめておきたいと思います。<br />
<br />
<strong>濃！Know！NoSQLセミナー</strong><br />
 <a href="http://togetter.com/li/418464" target="_blank" class="advmk">http://togetter.com/li/418464</a><br />
<br />
<span id="more-3540"></span><br />
<br />
<h2>mongoDB概要</h2>
<br />
<a rel="lightbox" href="http://blog.bot.vc/wp-content/uploads/2012/12/mongoDB.002.png" title="MongoDB 002"><img src="http://blog.bot.vc/wp-content/uploads/2012/12/mongoDB.002.png" alt="MongoDB 002" title="mongoDB.002.png" border="0" width="400" height="auto" /></a><br />
<br />
<strong>mongoDB</strong>は、オープンソースの<strong>ドキュメント指向データーベース</strong>です。<br />
<strong>NoSQL</strong>データベースの、1種になります。<br />
<br />
<a rel="lightbox" href="http://blog.bot.vc/wp-content/uploads/2012/12/mongoDB.003.png" title="MongoDB 003"><img src="http://blog.bot.vc/wp-content/uploads/2012/12/mongoDB.003.png" alt="MongoDB 003" title="mongoDB.003.png" border="0" width="400" height="auto" /></a><br />
<br />
名前の由来は、&#8221;hu<strong>mongo</strong>us&#8221;<br />
（<strong>ばかでかい</strong>）からきています。<br />
<br />
<a rel="lightbox" href="http://blog.bot.vc/wp-content/uploads/2012/12/mongoDB.004.png" title="MongoDB 004"><img src="http://blog.bot.vc/wp-content/uploads/2012/12/mongoDB.004.png" alt="MongoDB 004" title="mongoDB.004.png" border="0" width="400" height="auto" /></a><br />
<br />
特徴は、ドキュメント指向DBで、<strong>JSON</strong>でやり取りができます。<br />
また、<strong>インデックス</strong>もサポートしています。<br />
<br />
自動フェイルオーバーが可能な、<strong>レプリケーション</strong>機能ももっています。<br />
また、<strong>Shardhing</strong>（シャーディング）を行って分割することも出来ます。<br />
<strong>Map/Reduce</strong>も使えます。<br />
<br />
あらゆる条件で、<strong>クエリ</strong>が発行できるので集計なども便利です。<br />
<strong>GridFS</strong>を使えば、<strong>16MB</strong>以上のファイルを取り扱うことも出来ます。<br />
<br />
<a rel="lightbox" href="http://blog.bot.vc/wp-content/uploads/2012/12/mongoDB.005.png" title="MongoDB 005"><img src="http://blog.bot.vc/wp-content/uploads/2012/12/mongoDB.005.png" alt="MongoDB 005" title="mongoDB.005.png" border="0" width="400" height="auto" /></a><br />
<br />
mongoDBは、<strong>Database</strong> → <strong>Collection</strong> → <strong>Document</strong>という<br />
概念で構成されています。<br />
<br />
RDBMSで喩えると、Collectionが<strong>テーブル</strong>で、<br />
Documentが<strong>レコード</strong>って感じです。<br />
<br />
Documentは、<strong>JSON</strong>で扱うことができます。<br />
<br />
<br />
<a rel="lightbox" href="http://blog.bot.vc/wp-content/uploads/2012/12/mongoDB.006.png" title="MongoDB 006"><img src="http://blog.bot.vc/wp-content/uploads/2012/12/mongoDB.006.png" alt="MongoDB 006" title="mongoDB.006.png" border="0" width="400" height="auto" /></a><br />
<br />
mongoDBは、トランザクションを廃止し、その代わりに<br />
パフォーマンスとスケーラビリティを重視しています。<br />
<br />
<strong>key/value stores</strong>（<strong>KVS</strong>）と<strong>RDBMS</strong>のいいとこ取りをした感じです。<br />
<br />
<h2>mongoDB インストール方法</h2>
<br />
インストールも、とっても簡単です。<br />
<br />
まず、レポジトリを追加します。<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"># vi /etc/yum.repos.d/10gen.repo</pre></div></div>

<br />
<br />
<br />

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;">[10gen]
name=10gen Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
gpgcheck=0
enabled=1</pre></td></tr></table></div>

<br />
<br />
<br />
インストールします。<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"># yum install mongo-10gen mongo-10gen-server</pre></div></div>

<br />
<br />
<br />
<strong>mongod</strong> サービスを起動します。<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"># /etc/init.d/mongod start</pre></div></div>

<br />
<br />
<br />
これだけで、mongoが動きます。簡単！<br />
<br />
<h2>mongoDBを使ってみる</h2>
<br />
簡単にデータの<strong>登録</strong>、<strong>検索</strong>などをやってみます。<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"># mongo</pre></div></div>

<br />
<br />
<br />
mongo を実行すると、コマンドラインが起動します。<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;">MongoDB shell version: 2.2.2
connecting to: test</pre></div></div>

<br />
<br />
<br />
こんな感じで、コマンドラインが表示されます。<br />
<strong>test</strong>データベースに、デフォルトで接続します。<br />
<br />
データベースの接続コマンドは、<strong>use [DB名]</strong> です。<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;">&gt; use test
switched to db test</pre></div></div>

<br />
<br />
<br />
こんな感じのコマンドで、testデータベースにつなげます。<br />
<br />
データの登録は、 <strong>db.[collection].save([JSONデータ]);</strong> です。<br />
たとえば、col という コレクションに、A:1というデータを登録する場合は<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;">&gt; db.col.save({A:1});</pre></div></div>

<br />
<br />
<br />
になります。<br />
<br />
データ検索は、<strong>find</strong>コマンドです。<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;">&gt; db.col.find();
{ &quot;_id&quot; : ObjectId(&quot;50bb11913b35b98986e48122&quot;), &quot;A&quot; : 1 }</pre></div></div>

<br />
<br />
<br />
こんな感じで、簡単にcolコレクションの全件データを表示出来ます。<br />
<br />
<strong>count</strong>コマンドで、件数を取得することも出来ます。<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;">&gt; db.col.count();
1</pre></div></div>

<br />
<br />
<br />
もう2件、追加してみます。<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;">&gt; db.col.save({B:3});
&gt; db.col.save({C:5});</pre></div></div>

<br />
<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;">&gt; db.col.find();
{ &quot;_id&quot; : ObjectId(&quot;50bb11913b35b98986e48122&quot;), &quot;A&quot; : 1 }
{ &quot;_id&quot; : ObjectId(&quot;50c445ea4be2378e6acd10db&quot;), &quot;B&quot; : 3 }
{ &quot;_id&quot; : ObjectId(&quot;50c445f24be2378e6acd10dc&quot;), &quot;C&quot; : 5 }</pre></div></div>

<br />
<br />
<br />
&#8220;_id&#8221;と、自動で<strong>オブジェクトID</strong>が付与されます。<br />
<br />
B:3だけ、検索しようとする場合は、<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;">&gt; db.col.find({B:3});
{ &quot;_id&quot; : ObjectId(&quot;50c445ea4be2378e6acd10db&quot;), &quot;B&quot; : 3 }</pre></div></div>

<br />
<br />
<br />
こんな感じで指定します。<br />
<br />
実際にJSONデータを入れる場合は、こんな感じになります。<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;">db.col.save({ &quot;first_name&quot; : &quot;Jane&quot;, &quot;last_name&quot; : &quot;Doe&quot;, &quot;age&quot; : 23  });</pre></div></div>

<br />
<br />
<br />
データを削除するのは、<strong>remove</strong>コマンドです。<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;">&gt; db.col.remove({&quot;C&quot;:5});</pre></div></div>

<br />
<br />
<br />
こんな感じで削除できます。ObjectIDを指定して削除することも出来ます。<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;">&gt; db.col.find();
{ &quot;_id&quot; : ObjectId(&quot;50bb11913b35b98986e48122&quot;), &quot;A&quot; : 1 }
{ &quot;_id&quot; : ObjectId(&quot;50c445ea4be2378e6acd10db&quot;), &quot;B&quot; : 3 }</pre></div></div>

<br />
<br />
<br />
DB一覧を見るコマンドは、<strong>show dbs</strong>です。<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;">&gt; show dbs
admin   0.203125GB
local   (empty)
test    0.203125GB</pre></div></div>

<br />
<br />
<br />
Collectionの一覧を見るには、<strong>show collections</strong>です。<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;">&gt; show collections
col
system.indexes</pre></div></div>

<br />
<br />
<br />
<strong>help</strong>コマンドで、コマンド一覧を表示する事も出来ます。<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;">&gt; db.col.help();
DBCollection help
        db.col.find().help() - show DBCursor help
        db.col.count()
        db.col.copyTo(newColl) - duplicates collection by copying all documents to newColl; no indexes are copied.
        （省略）</pre></div></div>

<br />
<br />
<br />
結構簡単に、コマンドでデータの登録・検索ができました。<br />
<br />
<h2>ツール：RockMongoのインストール</h2>
<br />
<strong>phpMyAdmin</strong>のような、Web管理ツールがあります。<br />
複数あるみたいですが、「<strong>RockMongo</strong>」を使ってみました。<br />
<br />
<a rel="lightbox" href="http://blog.bot.vc/wp-content/uploads/2012/12/RockMongo.png" title="RockMongo"><img src="http://blog.bot.vc/wp-content/uploads/2012/12/RockMongo.png" alt="RockMongo" title="RockMongo.png" border="0" width="400" height="auto" /></a><br />
<br />
設定すると、Webで簡単にデータを<strong>参照</strong>・<strong>編集</strong>できます。<br />
<br />
<h3>PHP拡張設定</h3>
<br />
まずは、PHPでmongoDBを使えるようにします。<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;">yum install php54-devel httpd-devel.x86_64 php-pear
sudo pecl install mongo</pre></div></div>

<br />
<br />
<br />
コマンドで簡単にモジュールのインストールが出来ます。<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;">Build process completed successfully
Installing '/usr/lib64/php/modules/mongo.so'
install ok: channel://pecl.php.net/mongo-1.3.0
configuration option &quot;php_ini&quot; is not set to php.ini location
You should add &quot;extension=mongo.so&quot; to php.ini</pre></div></div>

<br />
<br />
<br />
<h3>php.ini 編集</h3>
<br />
php.iniに 1行追加モジュール名を、設定する必要があります。<br />
<br />
php.iniの場所は、phpinfo() を実行すると分かります。<br />
<br />
CentOSだと、<strong>/etc/php.ini</strong> かな<br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;">extension=mongo.so</pre></div></div>

<br />
<br />
この行を、追加します。<br />
<br />
追加したら、<strong>apache</strong>の再起動をします。<br />
ちなみに、<strong>nginx</strong>で設定していたので、nginxの再起動だけだと<br />
php.iniの再読込をしないので、<strong>fastcgi</strong>も再起動する必要があります。<br />
<br />
<strong>fastcgiの再起動</strong><br />
<br />

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"># /etc/init.d/php-fastcgi restart</pre></div></div>

<br />
<br />
<br />
<h2>RockMongoの設定</h2>
<br />
<strong>RockMongo</strong>の設定は簡単で<br />
ダウンロードして、解凍して <strong>index.php</strong>を動かせば終わりです。<br />
<br />
<strong>RockMongoダウンロード</strong><br />
 <a href="http://rockmongo.com/?action=downloads" target="_blank" class="advmk">http://rockmongo.com/?action=downloads</a><br />
<br />
初期パスワードは、 admin / admin になっています。<br />
<br />
<h2>まとめ</h2>
<br />
・mongoDBは、<strong>JSON</strong>形式なのでプログラムからも使いやすい<br />
・SQLのような、<strong>条件検索</strong>も簡単<br />
・しかも、結構<strong>高速</strong>で動作する。<br />
・RDBMSの概念に似ているので。取っつきやすい<br />
・テーブル定義の必要もなく、<strong>カラムが簡単に追加</strong>できる<br />
・phpMyAdminのようなツール、<strong>RockMongo</strong>があるので便利<br />
<br />
米国では、<strong>プロトタイプ</strong>を<strong>mongoDB</strong>を使って作成し<br />
MySQLに移行するか、大規模だとそのままmongoDBを。分散して利用するケースがあるそうです。<br />
<br />
Amebaの<a herf="https://life.pigg.ameba.jp/" target="_blank">ピグライフ</a>などでも、mongoDBを利用しているそうです。<br />
mongoDBの大きな事例は、<a herf="https://ja.foursquare.com/" target="_blank">foursquare</a>です。<br />
foursquareは、Auto-Shardingも使っています。<br />
<br />
また、<a herf="http://photoalbum.naver.jp/intro" target="_blank">NAVER Photo Album</a>や、<a herf="http://bit.ly/" target="_blank">bit.ly</a>、<a herf="https://github.com/" target="_blank">github</a>、<a herf="http://viber.com/" target="_blank">Viber</a>などもつかっています。<br />
<br />
思ったよりも、簡単に使えるNoSQLです。<br />
まずは、試してみるのもいいのかなと。<br />
<br />
<a rel="lightbox" href="http://blog.bot.vc/wp-content/uploads/2012/12/mongoDB.007.png" title="MongoDB 007"><img src="http://blog.bot.vc/wp-content/uploads/2012/12/mongoDB.007.png" alt="MongoDB 007" title="mongoDB.007.png" border="0" width="400" height="auto" /></a><br />
<br />
みなさんも、<strong>mongoDB</strong> 気軽に使ってみませんか？<br />
 <a href="http://www.mongodb.org/downloads" target="_blank" class="advmk">http://www.mongodb.org/downloads</a><br />
<br />
<h2>参考サイト</h2>
<br />
このまとめ資料が、とても参考になりました。<br />
<br />
<iframe src="http://www.slideshare.net/slideshow/embed_code/9208855" width="512" height="421" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen webkitallowfullscreen mozallowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="http://www.slideshare.net/doryokujin/mongodb-9208855" title="はじめてのMongoDB" target="_blank">はじめてのMongoDB</a> </strong> from <strong><a href="http://www.slideshare.net/doryokujin" target="_blank">Takahiro Inoue</a></strong> </div>
<br />
<br />
<strong>mongoDB 公式サイト</strong><br />
 <a href="http://www.mongodb.org/" target="_blank" class="advmk">http://www.mongodb.org/</a><br />
<br />
<strong>mongodbをyumでインストールし、rockmongoでWEBから操作する(CentOS5.7</strong><br />
 <a href="http://studio3104.hatenablog.com/entry/2012/03/05/104039" target="_blank" class="advmk">http://studio3104.hatenablog.c&#8230;&#8230;/05/104039</a><br />
<br />
<strong>PHPでMongoDBを使ってみる</strong><br />
 <a href="http://nazo.hatenablog.com/entry/20091126/p1" target="_blank" class="advmk">http://nazo.hatenablog.com/ent&#8230;&#8230;0091126/p1</a><br />
<br />
<strong>mongoDBの基本コマンド</strong><br />
 <a href="http://hiroftp.blogspot.jp/2011/06/mongodb.html" target="_blank" class="advmk">http://hiroftp.blogspot.jp/201&#8230;&#8230;ngodb.html</a></p>
<div id="fb-root"></div>
<script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script>
<fb:comments href="http://blog.bot.vc/2012/12/mongodb/"></fb:comments>]]></content:encoded>
			<wfw:commentRss>http://blog.bot.vc/2012/12/mongodb/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.bot.vc/2012/12/mongodb/" />
	</item>
	</channel>
</rss>
