<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>サーバーワークス技術ブログ</title>
	
	<link>http://blog.serverworks.co.jp/tech</link>
	<description />
	<lastBuildDate>Fri, 20 Aug 2010 05:31:48 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/co/nZgc" /><feedburner:info uri="co/nzgc" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>EBSタイプのインスタンスを他リージョンへ移行する手順</title>
		<link>http://feedproxy.google.com/~r/co/nZgc/~3/A-BfdJc4Vu4/</link>
		<comments>http://blog.serverworks.co.jp/tech/2010/08/20/ebs-instance-convert-reg/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 05:31:48 +0000</pubDate>
		<dc:creator>yanase</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[EC2]]></category>
		<category><![CDATA[クラウドコンピューティング]]></category>

		<guid isPermaLink="false">http://blog.serverworks.co.jp/tech/?p=530</guid>
		<description><![CDATA[みなさんこんにちは！インフラエンジニアの柳瀬です。

毎日暑いので、データセンターに行くのも嫌になってしまいますね。
あ、すいません。データセンターに行くのは暑くなくても嫌でした。インフラエンジニア失格ですね(笑)

さ [...]]]></description>
			<content:encoded><![CDATA[<p>みなさんこんにちは！インフラエンジニアの柳瀬です。</p>

<p>毎日暑いので、データセンターに行くのも嫌になってしまいますね。<br />
あ、すいません。データセンターに行くのは暑くなくても嫌でした。インフラエンジニア失格ですね(笑)</p>

<p>さて、『全てのサーバーをクラウドに移行する事が出来たら、データセンターに行く事もなくなる！』と夢見ておりますが、シンガポールにあるAWSのデータセンターがオープンして3カ月程度たちました。</p>

<p>先日、US WestにあるEBSタイプインスタンスをAsia Pacificに移行したという事もあり、今回のエントリーではEBSタイプのインスタンスを他のリージョンへ移行する手順について書きたいと思います。</p>

<p>必要な前提条件は以下の通りです</p>

<ul>
    <li>移行するインスタンスにはec2-api-toolsがインストールされている事</li>
    <li>移行するインスタンスにはec2-ami-toolsがインストールされている事</li>
    <li>移行するインスタンスにはec2-metadataがインストールされている事</li>
    <li>今回はUS WestからAsia Pacificへの移動する</li>
</ul>

<p>移行手順の概要は以下の通りです</p>

<ul>
    <li>EBSタイプのインスタンス上でイメージファイルを作成してAsia PacificのS3バケットにアップロード</li>
    <li>Asia Pacificデータセンターで起動出来るインスタンスストアタイプのAMIを作成して起動</li>
    <li>インスタンスストアタイプのインスタンスからEBSタイプのAMIを作成</li>
</ul>

<p>※ec2-api-toolsとec2-ami-toolsのインストールは割愛してあります</p>

<p><a rel="attachment wp-att-578" href="http://blog.serverworks.co.jp/tech/2010/08/20/ebs-instance-convert-reg/logo_aws/"><img title="logo_aws" src="http://blog.serverworks.co.jp/tech/wp-content/uploads/logo_aws.gif" alt="" width="164" height="60" /></a></p>

<h2>準備</h2>

<p>ec2-metadataのインストール</p>

<pre><code># wget http://s3.amazonaws.com/ec2metadata/ec2-metadata
# chmod 755 ec2-metadata
# mv ec2-metadata /usr/bin/ </code></pre>

<p>fstabの状態を確認</p>

<pre><code># vi /etc/fstab
/dev/sda1  /         ext3    defaults        1 1
/dev/sda3  swap      swap    defaults        0 0
/dev/sdc   /mnt      ext3    defaults        0 0
none       /dev/pts  devpts  gid=5,mode=620  0 0
none       /dev/shm  tmpfs   defaults        0 0
none       /proc     proc    defaults        0 0
none       /sys      sysfs   defaults        0 0
</code></pre>

<h2>イメージファイルを作成しAsia PacificのS3へアップ</h2>

<p>ec2-bundle-volを実行してインスタンスのイメージファイルを作成</p>

<pre><code># ec2-bundle-vol -k 秘密鍵 -c X.509証明書 -u アカウントナンバー</code></pre>

<p>Asia-PacificのS3バケットを作成後、S3へイメージファイルをアップロード</p>

<pre><code># ec2-upload-bundle -b 作成したS3バケット名/ -m image.manifest.xml -a アクセスキーID -s シークレットアクセスキー</code></pre>

<h2>S3のイメージファイルからinstance-storeタイプのAMIを作成し、起動</h2>

<p>S3へアップロードしたイメージファイルからAMIを登録する</p>

<pre><code>$ ec2-register 作成したS3バケット名/image.manifest.xml</code></pre>

<p>作成したAMIからインスタンスを起動します(AWS Management Consoleからでも実行出来ます)</p>

<pre><code>$ ec2-run-instances AMI-ID -k 起動する秘密鍵 --group セキュリティグループ</code></pre>

<h2>起動したインスタンスからイメージを作成してEBSに展開、設定変更</h2>

<p>起動したインスタンスへログイン後、ec2-bundle-volを実行してインスタンスのイメージファイルを作成</p>

<pre><code># cd /mnt
# ec2-bundle-vol -d /mnt -k 秘密鍵 -c X.509証明書 -u アカウントナンバー</code></pre>

<p>バンドルボリュームを一つのファイルにまとめる</p>

<pre><code># ec2-unbundle -k 秘密鍵 -m /mnt/image.manifest.xml -s /mnt/ -d /mnt/
Unbundle complete.

# ls -l /mnt | head -3
合計 2194968
-rw-r--r-- 1 root root 10737418240  8月 16 16:26 image
-rw-r--r-- 1 root root        9406  8月 16 16:35 image.manifest.xml
</code></pre>

<p>EC2インスタンスのゾーンを取得する。</p>

<pre><code># ec2-metadata -z
placement: ap-southeast-1a</code></pre>

<p>ブートイメージ格納用のEBSボリュームを作成する(EBSボリュームIDをメモ)</p>

<pre><code># ec2-create-volume --size 10 --availability-zone ap-southeast-1a
</code></pre>

<p>作成したEBSボリュームをアタッチする</p>

<pre><code># ec2-attach-volume EBSボリュームID --instance インスタンスID --device /dev/sdh
</code></pre>

<p>イメージをEBSボリュームに戻す</p>

<pre><code># dd if=/mnt/image of=/dev/sdh
20971520+0 records in
20971520+0 records out
10737418240 bytes (11 GB) copied, 1254.23 seconds, 8.6 MB/s
</code></pre>

<p>EBSボリュームをマウントする</p>

<pre><code># mkdir /mnt/ebs
# mount /dev/sdh /mnt/ebs
# df -h
Filesystem          サイズ  使用  残り 使用% マウント位置
/dev/sda1             9.9G  1.7G  7.7G  18% /
/dev/sdc              147G  2.3G  138G   2% /mnt
none                  851M     0  851M   0% /dev/shm
/dev/sdh              9.9G  1.7G  7.7G  18% /mnt/ebs
</code></pre>

<p>fstabを編集し、ローカルストレージの設定を削除する</p>

<pre><code># mv /mnt/ebs/etc/fstab /mnt/ebs/etc/fstab.bak
# cat /mnt/ebs/etc/fstab.bak | grep -v mnt &gt; /mnt/ebs/etc/fstab
# cat /mnt/ebs/etc/fstab
/dev/sda1  /         ext3    defaults        1 1
/dev/sda3  swap      swap    defaults        0 0
none       /dev/pts  devpts  gid=5,mode=620  0 0
none       /dev/shm  tmpfs   defaults        0 0
none       /proc     proc    defaults        0 0
none       /sys      sysfs   defaults        0 0
</code></pre>

<p>EBSボリュームをアンマウントする</p>

<pre><code># umount /mnt/ebs
# df -h
Filesystem          サイズ  使用  残り 使用% マウント位置
/dev/sda1             9.9G  1.7G  7.7G  18% /
/dev/sdc              147G  2.3G  138G   2% /mnt
none                  851M     0  851M   0% /dev/shm
</code></pre>

<h2>スナップショットを取得してAMIを作成</h2>

<p>EBSボリュームのスナップショットを取得する(スナップショットのIDをメモ)</p>

<pre><code># ec2-create-snapshot EBSボリュームID --description hogehoge
</code></pre>

<p>カーネルIDを取得(カーネルIDをメモ)</p>

<pre><code># ec2-metadata -k
kernel-id: not available
</code></pre>

<p>RAMディスクIDを取得(RAMディスクIDをメモ)</p>

<pre><code># ec2-metadata -r
ramdisk-id: not available
</code></pre>

<p>スナップショットからAMIを登録する</p>

<pre><code># ec2-register --snapshot スナップショットのID \
--description="hogehoge" \
--architecture i386 \
--root-device-name /dev/sda1
</code></pre>

<h2>EBSタイプのインスタンスを起動、各種設定</h2>

<p>EC2インスタンスを起動する</p>

<pre><code># ec2-run-instances AMIのID \
--kernel カーネルID \
--ramdisk RAMディスクID \
--block-device-mapping /dev/sdc=ephemeral0 \
--availability-zone ap-southeast-1a \
--group セキュリティグループ \
--instance-initiated-shutdown-behavior stop \
--key 秘密鍵 \
-t m1.small
</code></pre>

<p>インスタンス起動後にローカルストレージのマウントとfstabの編集</p>

<pre><code># df -h
Filesystem          サイズ  使用  残り 使用% マウント位置
/dev/sda1             9.9G  1.7G  7.7G  18% /
none                  851M     0  851M   0% /dev/shm

# fdisk -l
Disk /dev/sdc: 160.1 GB, 160104972288 bytes
255 heads, 63 sectors/track, 19464 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes
ディスク /dev/sdc は正常な領域テーブルを含んでいません

# mount /dev/sdc /mnt

# df -h
Filesystem          サイズ  使用  残り 使用% マウント位置
/dev/sda1             9.9G  1.7G  7.7G  18% /
none                  851M     0  851M   0% /dev/shm
/dev/sdc              147G  188M  140G   1% /mnt

# vi /etc/fstab
      1 /dev/sda1  /         ext3    defaults        1 1
      2 /dev/sda3  swap      swap    defaults        0 0
      3 /dev/sdc   /mnt      ext3    defaults        0 0
      4 none       /dev/pts  devpts  gid=5,mode=620  0 0
      5 none       /dev/shm  tmpfs   defaults        0 0
      6 none       /proc     proc    defaults        0 0
      7 none       /sys      sysfs   defaults        0 0
</code></pre>

<h2>おわり</h2>

<p>もう少し簡単なやり方があるかもしれません。<br />
環境によってはfstabの設定などで手順が変わる場合があるかもしれませんが、ひとまず移行出来たので一安心です。</p>

<h2>参考にさせて頂いたサイト</h2>

<p>今回のエントリではこちらのサイトを参考にさせて頂きました。<br />
ありがとうございましたー！</p>

<p><a href="http://cloudbb.jp/research1/ConvertEBS-bootedAMI.htm" target="_blank">http://cloudbb.jp/research1/ConvertEBS-bootedAMI.htm</a></p>
<img src="http://feeds.feedburner.com/~r/co/nZgc/~4/A-BfdJc4Vu4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.serverworks.co.jp/tech/2010/08/20/ebs-instance-convert-reg/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.serverworks.co.jp/tech/2010/08/20/ebs-instance-convert-reg/</feedburner:origLink></item>
		<item>
		<title>ice_cubeでスケジュールの計算</title>
		<link>http://feedproxy.google.com/~r/co/nZgc/~3/S8NuL0WaFwk/</link>
		<comments>http://blog.serverworks.co.jp/tech/2010/07/24/ice_cube/#comments</comments>
		<pubDate>Sat, 24 Jul 2010 03:38:08 +0000</pubDate>
		<dc:creator>ogura</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blog.serverworks.co.jp/tech/?p=514</guid>
		<description><![CDATA[プログラマのおぐらです。

このところとんでもなく暑い日ばかりですが、みなさんいかがお過ごしでしょうか。こう暑い日が続くと、プログラミングしている間だけでも涼しさを感じられるような工夫が欲しいですね。

というわけで、今 [...]]]></description>
			<content:encoded><![CDATA[<p>プログラマのおぐらです。</p>

<p>このところとんでもなく暑い日ばかりですが、みなさんいかがお過ごしでしょうか。こう暑い日が続くと、プログラミングしている間だけでも涼しさを感じられるような工夫が欲しいですね。</p>

<p>というわけで、今回は<a href="http://github.com/seejohnrun/ice_cube">ice_cube</a>という涼しげな名前のRuby用ライブラリのご紹介です。</p>

<p>ice&#95;cubeは、</p>

<ul>
<li>毎日</li>
<li>隔週の月曜日と火曜日</li>
<li>毎月1日と最終日</li>
<li>毎月第1と最終の火曜日</li>
<li>2時間おき</li>
</ul>

<p>といった、「一定のルールに基づいて繰り返し処理を行う」ときにネックとなる日時の計算を一手に引き受けてくれるライブラリです。予定の管理やメールの配信といったスケジューリングの必要な機能を実装する際に利用することで、複雑なルールも容易に扱うことができるようになります。</p>

<h2>インストール</h2>

<p>ice&#95;cubeはgemパッケージとして公開されていますので、インストールは以下のように<code>gem</code>コマンドで行います。</p>

<pre><code>$ gem install ice_cube
</code></pre>

<p>ice&#95;cubeの内部ではActiveSupportが既存クラスに対して追加するメソッドを呼び出す箇所があるので<code>active_support</code>もインストールしておきましょう（Railsをお使いであれば既にインストールされているはずです）。</p>

<pre><code>$ gem install activesupport
</code></pre>

<h2>基本的な使い方</h2>

<p>ice&#95;cubeの中心となるのは<a href="http://github.com/seejohnrun/ice_cube/blob/master/lib/ice_cube/schedule.rb">IceCube::Schedule</a>クラスです。インスタンスを生成する際は、開始日をコンストラクタに渡します。</p>

<pre><code>schedule = IceCube::Schedule.new(Time.local(2010, 7, 1))
</code></pre>

<p>スケジュールに特定の日付を指定して使う場合は、以下のようになります。</p>

<p><script src="http://gist.github.com/487066.js?file=example1.rb"></script>
<noscript><a href="http://gist.github.com/487066#file_example1.rb">View on gist.github.com</a></noscript></p>

<p>上記のように特定の日時を指定することもできますし、一定の条件で何度も繰り返すスケジュールを定義することもできます。</p>

<p><script src="http://gist.github.com/487066.js?file=example2.rb"></script>
<noscript><a href="http://gist.github.com/487066#file_example2.rb">View on gist.github.com</a></noscript></p>

<p>ただし、複雑なルールを定義した場合の挙動には若干バギーな部分もありますので、実際に使う前には想定した結果が返ってくることを確認しておいたほうがよさそうです。</p>

<h2>Railsで使う</h2>

<p><code>IceCube::Schedule</code>クラスには、スケジュールを永続化するためにYAMLや<code>Hash</code>に変換するメソッドも定義されています。</p>

<p><script src="http://gist.github.com/487066.js?file=example3.rb"></script>
<noscript><a href="http://gist.github.com/487066#file_example3.rb">View on gist.github.com</a></noscript></p>

<p>これらのメソッドをうまく利用することで、ActiveRecordなどのモデルにスケジュールを保持させることができます。</p>

<h2>参考資料</h2>

<p><code>ice_cube</code>の作者であるJohn Crepezziさんのプレゼン資料も公開されていますので、興味のある方はこちらもご覧ください。</p>

<ul>
<li><a href="http://seejohnrun.github.com/ice_cube/static/ice_cube_ruby_nyc.pdf">ice_cube_ruby_nyc.pdf</a></li>
</ul>
<img src="http://feeds.feedburner.com/~r/co/nZgc/~4/S8NuL0WaFwk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.serverworks.co.jp/tech/2010/07/24/ice_cube/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.serverworks.co.jp/tech/2010/07/24/ice_cube/</feedburner:origLink></item>
		<item>
		<title>RightScaleを試してみました。</title>
		<link>http://feedproxy.google.com/~r/co/nZgc/~3/pntuk5Q6HpI/</link>
		<comments>http://blog.serverworks.co.jp/tech/2010/07/21/evaluate-rightscale/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 05:08:35 +0000</pubDate>
		<dc:creator>yanase</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[Cloudworks]]></category>
		<category><![CDATA[EC2]]></category>
		<category><![CDATA[Eucalyptus]]></category>
		<category><![CDATA[Rackspace]]></category>
		<category><![CDATA[RightScale]]></category>
		<category><![CDATA[クラウドコンピューティング]]></category>

		<guid isPermaLink="false">http://blog.serverworks.co.jp/tech/?p=402</guid>
		<description><![CDATA[こんちには！サーバーワークス柳瀬です！

弊社ではCloudworksというAmazon EC2を少し便利に使う事が出来る管理サービスを提供しておりますが、同じようなクラウド管理サービスはたくさんあります。先日Right [...]]]></description>
			<content:encoded><![CDATA[<p>こんちには！サーバーワークス柳瀬です！</p>

<p>弊社では<a href="http://www.cloudworks.jp/" target="_blank">Cloudworks</a>というAmazon EC2を少し便利に使う事が出来る管理サービスを提供しておりますが、同じようなクラウド管理サービスはたくさんあります。先日<a href="http://www.rightscale.com/" target="_blank">RightScale</a>というAmazon EC2をメインとしたクラウド管理サービスを触ってみたので簡単にレポートしたいと思います。
RightScaleは有料版と無料で使用出来るものがあり、今回触ってみたのは無料版です。
ちなみに<a href="http://www.rightscale.com/products/plans-pricing/" target="_blank">価格表</a>を見るとFreeEditionで出来ることはやはり限定的となります。</p>

<p><a href="http://www.rightscale.com/"></a>RightScaleを使用するにはサインアップする必要があり、サインアップには以下のものを登録します。</p>

<p><a rel="attachment wp-att-448" href="http://blog.serverworks.co.jp/tech/2010/07/21/evaluate-rightscale/rightscale-developer-edition-_-cloud-computing-management-platform/"><img class="alignnone size-medium wp-image-448" title="RightScale Developer Edition _ Cloud Computing Management Platform" src="http://blog.serverworks.co.jp/tech/wp-content/uploads/RightScale-Developer-Edition-_-Cloud-Computing-Management-Platform-300x193.png" alt="" width="300" height="193" /></a></p>

<ul>
    <li> 氏名</li>
    <li>Email</li>
    <li>住所</li>
    <li>組織名</li>
    <li>RightScaleにログイン</li>
    <li>AWS Account Number</li>
    <li>AWS Access Key ID</li>
    <li>AWS Secret Access Key</li>
</ul>

<p>その他いくつかの質問事項がありましたが、サインアップは簡単です。AWSのサインアップのように本人確認の電話などもありません(笑)</p>

<p>実際にログインしてみると無料版でも以下のようにAWSの基本サービスはRightScaleから操作できるようです。</p>

<ul>
    <li>EC2(インスタンスの起動や停止など)</li>
    <li>S3(管理用ブラウザ)</li>
    <li>ELB(ロードバランサーの起動、削除、インスタンスの追加)</li>
    <li>EIP(EIPの取得、割り当て、削除)</li>
    <li>RDS(インスタンスの起動や停止など)</li>
    <li>インスタンスへの名前付け</li>
    <li>インスタンスへのタグ付け</li>
    <li>イベント情報をRSSで取得</li>
</ul>

<p>また、RightScaleはAmazon EC2以外にもRackspace CloudやEucalyptusなど他のクラウド環境も管理出来る点は素晴らしいと感じました。
Rackspace CloudユーザーはアカウントとAPIのパスワードをRightsScaleに登録するだけで簡単に操作が出来るようになります。
インスタンスへの命名、タグ付けも出来るので、Amazon Management Consoleより管理しやすい印象を受けました。
料金の見積もり機能もあるので、必要以上の料金が発生していないか簡単に確認する事も出来ました。</p>

<p><a rel="attachment wp-att-447" href="http://blog.serverworks.co.jp/tech/2010/07/21/evaluate-rightscale/rightscale-ec2-images-rightimages/"><img class="alignnone size-medium wp-image-447" title="RightScale Ec2 images Rightimages" src="http://blog.serverworks.co.jp/tech/wp-content/uploads/RightScale-Ec2-images-Rightimages-300x138.png" alt="" width="300" height="138" /></a></p>

<p>ただし、管理画面が英語表記である事と機能が豊富な半面、少しだけ管理画面の作りがゴチャゴチャしてて分かりにくいかなと感じました。
個人的にはもう少しシンプルな作りが良いですね(汗)</p>

<p>弊社で提供しているCloudworksは日本語操作も可能ですし、シンプルで分かりやすいインターフェースなので、普段の管理はCloudworksで行い、サポートされていない機能についてはRightScaleで補うという運用が出来そうです。</p>

<p>【Cloudworksの画面イメージ】</p>

<p><a href="http://www.cloudworks.jp/cloudworks%E3%81%A8%E3%81%AF/" target="_blank"><img class="alignnone size-medium wp-image-504" title="image" src="http://blog.serverworks.co.jp/tech/wp-content/uploads/image-300x206.png" alt="" width="300" height="206" /></a></p>

<p>【Cloudworksの機能一覧】</p>

<p><a href="http://www.cloudworks.jp/%E6%A9%9F%E8%83%BD%E4%B8%80%E8%A6%A7/"><img class="alignnone size-medium wp-image-505" title="機能一覧 - Cloudworks" src="http://blog.serverworks.co.jp/tech/wp-content/uploads/f218baecc682e788ad5a532f807e5754-221x300.png" alt="" width="221" height="300" /></a></p>

<p>Amazon EC2やその他クラウドサービスを管理するようなアプリケーションはたくさんありますが、『これだけ使えばOK！』というものがないのが現状のようです。色々なアプリケーションを組み合わせて便利に使うといいう工夫が必要ですね。</p>
<img src="http://feeds.feedburner.com/~r/co/nZgc/~4/pntuk5Q6HpI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.serverworks.co.jp/tech/2010/07/21/evaluate-rightscale/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.serverworks.co.jp/tech/2010/07/21/evaluate-rightscale/</feedburner:origLink></item>
		<item>
		<title>symfony+MongoDBでNoSQLはじめの一歩 〜MongoDBインストール〜</title>
		<link>http://feedproxy.google.com/~r/co/nZgc/~3/b4EQM5LUvS8/</link>
		<comments>http://blog.serverworks.co.jp/tech/2010/07/15/symfony-mongodb-tutorial-first/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 02:00:37 +0000</pubDate>
		<dc:creator>asakura</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[NoSQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://blog.serverworks.co.jp/tech/?p=173</guid>
		<description><![CDATA[はじめに

はじめまして。開発部エンジニアのあさくらです。
主にPHP、symfonyを使ったシステム開発を担当させていただいています。
好きな開発環境は、Mac、GNU Emacs。
好きな仮面ライダーは龍騎、カブト、 [...]]]></description>
			<content:encoded><![CDATA[<h2>はじめに</h2>

<p>はじめまして。開発部エンジニアのあさくらです。<br />
主に<a href="http://www.php.net/">PHP</a>、<a href="http://www.symfony-project.org/">symfony</a>を使ったシステム開発を担当させていただいています。<br />
好きな開発環境は、<a href="http://www.apple.com/jp/mac/">Mac</a>、<a href="http://www.gnu.org/software/emacs/">GNU Emacs</a>。<br />
好きな仮面ライダーは<a href="http://ja.wikipedia.org/wiki/仮面ライダー龍騎">龍騎</a>、<a href="http://ja.wikipedia.org/wiki/仮面ライダーカブト">カブト</a>、<a href="http://ja.wikipedia.org/wiki/仮面ライダーW">W</a>です。</p>

<p>技術的なTipsやチュートリアル、開発手法についての情報を中心に投稿させていただこうと思っています。
どうぞ、よろしくお願いいたします。</p>

<p><img src="http://blog.serverworks.co.jp/tech/wp-content/uploads/symfony1-150x40.gif" alt="" title="symfonyロゴ" width="150" height="40" class="alignnone size-thumbnail wp-image-355" /></p>

<p>私は普段、symfony+RDBMSで開発を行っているのですが、<a href="http://ja.wikipedia.org/wiki/RDBMS">RDBMS</a>で吸収することが難しい問題に直面することが多々あります。（私の理解不足という点も否めませんが）<br />
そういった問題を解決するのに<a href="http://ja.wikipedia.org/wiki/NoSQL">NoSQL</a>が有効か否かを調べたいと思い、本エントリを投稿するに至りました。<br />
バリバリNoSQLを使いこなす域には達していないので、少し物足りない内容になってしまうかもしれませんが、皆さんと一緒に勉強させていただければと思っています。</p>

<h2>はじめの一歩</h2>

<p>それでは、NoSQLの世界へ一歩踏み出してみましょう。<br />
NoSQLのはじめの一歩として、symfony1.0から<a href="http://www.mongodb.org/">MongoDB</a>を操作し、パフォーマンスがどの程度得られるか、全5回程度で学んでいきたいと思います。<br />
今回は、「MongoDBをインストールし、データベースの起動ができるようになる」ことを目標に、お話を進めていきたいと思います。</p>

<h2>今回のエントリの対象読者</h2>

<p>今回のエントリは、下記のような方を対象としています。</p>

<ul>
<li>NoSQLのことを何となく知っている</li>
<li>MongoDBの名前を聞いたことがあるが、触ったことはない</li>
<li>アプリケーションを自由にインストールできるLinux環境がある</li>
</ul>

<h2>今回のエントリのゴール</h2>

<p>今回のエントリを読み終えて、次のことが出来ることをゴールとしています。</p>

<ul>
<li>Linux環境へ、MongoDBがインストールできる</li>
<li>mongodコマンドで、MongoDBデータベースが起動できる</li>
</ul>

<h2>MongoDBとは</h2>

<p><img src="http://blog.serverworks.co.jp/tech/wp-content/uploads/PoweredMongoDBbrown1-150x70.png" alt="MongoDBロゴ" title="MongoDBロゴ" width="150" height="70" class="alignnone size-thumbnail wp-image-354" /></p>

<p>Wikipediaでは以下のように紹介されています。</p>

<pre>
MongoDBはC++言語で記述された オープンソースのドキュメント指向データベースである。
MongoDBは従来の関係データベース管理システムでは簡単に解決できない多量のトランザクション処理が要求されない問題に対し設計されている。一例として、データベースが複数サーバにまたがる必要がある場合が挙げられる。
CouchDBのようなドキュメント指向データベースシステムと同じく、MongoDBは関係データベース管理システムではない。データベースはBSONと呼ばれる、バイナリで格納されたJSONのようなドキュメントの集合を管理している。
</pre>

<ul>
<li>「MongoDB」『フリー百科事典　ウィキペディア日本語版』。最終更新 2010年7月1日 (木) 11:58　UTC、URL: http://ja.wikipedia.org/wiki/MongoDB</li>
</ul>

<p>また、書籍や勉強会での情報では、<br />
「KVS、ドキュメント指向データベース、RDBMSのいいとこ取りなデータベース」<br />
と評されることが多いようです。<br />
なんだかすごそうで、わくわくしてきますね。</p>

<h2>作業環境</h2>

<p>今回の作業環境は以下の通りです。</p>

<ul>
<li>MacOSX 10.6.3 SnowLeopard</li>
</ul>

<h2>MongoDBのインストール</h2>

<p>まずは、MongoDBをダウンロードしましょう。
<a href="http://www.mongodb.org/downloads">Downloads &#8211; MongoDB</a>から、自分の環境にあったパッケージをダウンロードしてください。</p>

<p><a href="http://www.mongodb.org/downloads" rel="http://www.mongodb.org/downloads"><img src="http://blog.serverworks.co.jp/tech/wp-content/uploads/MongoDBDownload-300x258.png" alt="MongoDBDownload画面" title="MongoDBDownload" width="300" height="258" class="size-medium wp-image-349" /></a></p>

<p>今回は、MacOSX SnowLeopard環境で作業をするので、「OS X 64-bit」から、この記事を作成している2010年7月15日時点での最新バージョン1.4.4をダウンロードします。</p>

<pre>
$ curl http://downloads.mongodb.org/osx/mongodb-osx-x86_64-1.4.4.tgz > mongodb.tgz
$ tar zxvf mongodb.tgz
</pre>

<h2>データの格納先ディレクトリの作成</h2>

<p>データの格納先を作成します。<br />
今回は、mongodコマンド実行時にデフォルト格納先として指定されるディレクトリを準備しましょう。<br />
※mongodコマンドの引数に「&#8211;dbpath=/hoge/mongodb_data」を追加することで、任意のデータ格納先を指定することも可能です。</p>

<pre>
$ mkdir -p /data/db
</pre>

<h2>mongodコマンドで、MongoDBを起動</h2>

<p>展開したmongodコマンドを実行し、データベースを起動してみましょう。</p>

<pre>
$ mongodb-osx-x86_64-1.4.4/bin/mongod
</pre>

<p>mongodコマンド実行後、メッセージに「waiting for connections on port 27017」とメッセージがでれば起動成功です。</p>

<p><img src="http://blog.serverworks.co.jp/tech/wp-content/uploads/MongoDBStartMessage1.png" alt="" title="MongoDBStartMessage" width="604" height="142" class="alignnone size-full wp-image-483" /></p>

<h2>また次回</h2>

<p>今回のエントリでMongoDBの起動まで出来るようになりました。<br />
次回は、MongoDBを操作するためのmongoコマンドを使い、実際にMongoDBを操作していきたいと思います。<br />
それでは</p>

<h2>参考にさせていただいたページ</h2>

<p>本エントリを作成する際に、こちらのページを参考にさせていただきました。<br />
ありがとうございました。</p>

<ul>
<li><a href="http://www.mongodb.org/display/DOCS/Quickstart+OS+X">Quickstart OS X &#8211; MongoDB</a> 本家サイトのインストール手順です。</li>
<li><a href="http://blog.madoro.org/mn/73">Mac OS X で mongoDB &#8211; Masatomo Nakano Blog</a> MongoDB本家サイトのの翻訳をされているMasatomo Nakanoさんのブログより、MacOSX環境への簡単インストール手順です。</li>
</ul>
<img src="http://feeds.feedburner.com/~r/co/nZgc/~4/b4EQM5LUvS8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.serverworks.co.jp/tech/2010/07/15/symfony-mongodb-tutorial-first/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.serverworks.co.jp/tech/2010/07/15/symfony-mongodb-tutorial-first/</feedburner:origLink></item>
		<item>
		<title>ruby+html+javascriptでデスクトップアプリケーション開発</title>
		<link>http://feedproxy.google.com/~r/co/nZgc/~3/96gqKGtc7WM/</link>
		<comments>http://blog.serverworks.co.jp/tech/2010/07/14/bowline/#comments</comments>
		<pubDate>Wed, 14 Jul 2010 02:52:30 +0000</pubDate>
		<dc:creator>kawaguchi</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blog.serverworks.co.jp/tech/?p=237</guid>
		<description><![CDATA[こんにちわ、技術ブログ担当の川口です。

今回はちょっと変化球で勝負、ということでRuby+HTML+JavaScriptで
デスクトップアプリケーションが簡単に作れる「bowline」ライブラリを
紹介してみたいと思い [...]]]></description>
			<content:encoded><![CDATA[<p>こんにちわ、技術ブログ担当の川口です。</p>

<p>今回はちょっと変化球で勝負、ということでRuby+HTML+JavaScriptで<br />
デスクトップアプリケーションが簡単に作れる「bowline」ライブラリを<br />
紹介してみたいと思います。</p>

<p>bowlineは「titanium(クロスプラットフォーム環境)」を元に作られた<br />
Ruby GUIフレームワークで特徴としては下記のような点が挙げられます。</p>

<ul>
<li>gemパッケージ</li>
<li>MVCモデルフレームワーク</li>
<li>Webベース（WebKit）による画面設計</li>
</ul>

<p>現状では動作するのはMaxOS XとUbuntuのようですがこれから先<br />
マルチプラットフォーム対応も見込まれているそうなので将来的には<br />
windows上で動作するアプリケーションもコードの変更を行わずに<br />
作成できる様になるかもしれません。</p>

<p><a href="http://bowlineapp.com">bowlineの公式ページ</a></p>

<p>公式でサポートしている開発環境は下記の通りです。</p>

<ul>
<li>Mac OSX　10.5以上 or Ubuntu</li>
<li>Ruby 1.9</li>
<li>Bowline gemライブラリ</li>
</ul>

<p><a rel="attachment wp-att-273" href="http://blog.serverworks.co.jp/tech/2010/07/14/bowline/official/"><img class="aligncenter size-medium wp-image-273" title="official" src="http://blog.serverworks.co.jp/tech/wp-content/uploads/official-300x296.png" alt="" width="300" height="296" /></a></p>

<p>※今回はMac OSX 10.5.8 , ruby 1.9.1環境で検証しています。<br />
※webkitのアーキテクチャが32bitでなければ動作しません。<br />
※このライブラリは32bitモードでコンパイルされたrubyが必要です。<br />
　(Snow Leopardデフォルトのrubyでは正常に動作しない可能性が高いです)</p>

<h3>bowlineインストール</h3>

<hr />

<p>bowline自体はgemコマンドで簡単にインストール可能です。<br />
(rubyとgemのインストールは各自で行っているものとします)</p>

<pre><code>$ sudo gem install bowline
</code></pre>

<h3>テストアプリケーションの作成</h3>

<hr />

<p>インストールが完了したらお決まりの「hello world」アプリを作ってみましょう!<br />
公式のInstallページに手順がありますのでそれに沿って作成していくことにします。</p>

<p>※今回は「/User/kawaguchi/bowline」の下に「helloworld」を作成して検証します。</p>

<pre><code>$ cd /User/kawaguchi
$ mkdir bowline
$ cd bowline
$ bowline-gen app helloworld
Generating with app generator:
[ADDED]  vendor
[ADDED]  lib
(中略)
[ADDED]  config/boot.rb
[ADDED]  README
</code></pre>

<p>これで「/User/kawaguchi/bowline/helloworld」が作成され、ディレクトリ内には<br />
アプリケーションの雛形が作成されています。<br />
しかしこれだけでは動作することはできません。<br />
必要なライブラリを「helloworld」アプリへ組み込む必要があります。</p>

<pre><code>$ cd helloworld
$ bowline-bundle
Calculating dependencies...
Updating source: http://rubygems.org
Updating source: http://gems.rubyforge.org
/opt/local/lib/ruby/gems/1.9.1/gems/bowline-bundler-0.0.4/lib/bowline/bundler/resolver.rb:115
Caching: activemodel-3.0.0.beta4.gem
(中略)
Installing bowline (0.9.3)
**************************************************

Thank you for installing Bowline.

If you're on Linux, please install the WebKit library:
sudo apt-get install libwebkit-dev

**************************************************
Done.
</code></pre>

<p>最後に注意として「もしLinux使ってるならWebkitライブラリもインストールしてね」<br />
メッセージが出ますがMac OSX上では標準で組み込まれているので問題有りません。</p>

<p>これでアプリケーション起動用スクリプトを実行してすれば動作する筈ですが・・・・</p>

<pre><code>$ ./script/run
You don't have tzinfo installed in your application. Please add it to your Gemfile and run bundle install
no such file to load -- tzinfo
・・・
</code></pre>

<p>どうやら&#8217;tzinfo&#8217;ライブラリが必要ですがインストールされていない模様。<br />
gemコマンドで&#8217;tzinfo&#8217;ライブラリをインストールします。</p>

<pre><code>$ sudo gem install tzinfo
</code></pre>

<p>これでバッチリ動・・・きません。<br />
実はgemとしてインストールしてもbowlineアプリケーションが参照している<br />
gemライブラリディレクトリは[helloword/vendor/gems/1.9.1/gems/]以下であり、<br />
[bowline-bundle]コマンドによってダウンロードしてきたものだけとなっています。</p>

<p>よってbundleコマンド実行時に&#8217;tzinfo&#8217;ライブラリもgemライブラリとして<br />
インストールするように設定ファイルに設定します。</p>

<pre><code>$ vi Gemfile
# Edit this Gemfile to bundle your application's dependencies.
source 'http://rubygems.org'

gem "bowline"
gem "tzinfo"            &lt;===================　これを追記
## Bundle the gems you use: 
# gem "bj" 
# gem "hpricot", "0.6" 
# gem "sqlite3-ruby", :require_as =&amp;gt; "sqlite3"
</code></pre>

<p>これで準備は完了です。もう一度bundleしなおして実行してみましょう。</p>

<pre><code>$ bowline-bundle
$ ./script/run
</code></pre>

<p><a rel="attachment wp-att-274" href="http://blog.serverworks.co.jp/tech/2010/07/14/bowline/helloworld-2/"><img class="aligncenter size-medium wp-image-274" title="helloworld" src="http://blog.serverworks.co.jp/tech/wp-content/uploads/helloworld1-237x300.png" alt="" width="237" height="300" /></a></p>

<p>これだけではメリットが分かりづらいかもしれません。<br />
公式のインストールページの下部に<a href="http://github.com/maccman/bowline-twitter">githubへのリンク</a>があり、サンプルコードとしてtwitterクライアントアプリケーションが公開されていますのでそれを実行してみましょう。</p>

<p><a rel="attachment wp-att-266" href="http://blog.serverworks.co.jp/tech/2010/07/14/bowline/github/"><img class="aligncenter size-medium wp-image-266" title="github" src="http://blog.serverworks.co.jp/tech/wp-content/uploads/github-300x296.png" alt="" width="300" height="296" /></a></p>

<p>gitコマンドを利用してダウンロードします。<br />
（gitコマンドやgithubに関する説明は割愛させていただきます）</p>

<pre><code>$ cd /User/kawaguchi/bowline
$ git clone git://github.com/maccman/bowline-twitter ./twitter
$ cd twitter
</code></pre>

<p>「/User/kawaguchi/bowline/twitter」ディレクトリが作成され、
ファイルが展開されていることを確認してください。<br />
このままでは動作しませんので２つ程設定を変更します。</p>

<p>(application.ymlファイル作成)<br />
デフォルトでは「config/application.exmple.yml」ファイルしかないのでリネームして<br />
「config/application.yml」ファイルとして保存してください。</p>

<pre><code>$ mv config/application.example.yml config/application.yml 
</code></pre>

<p>(tiwtterアカウントを設定)<br />
先程のapplication.ymlファイルにtiwtterアカウント情報を設定します。</p>

<pre><code>$vi config/application.yml
username: (twitterアカウント)
password: (twitterパスワード)
</code></pre>

<p>設定が完了したら早速bundleして実行してみましょう。<br />
こちらのGemfileにはちゃんと&#8217;tzinfo&#8217;が追記されているので編集しなくても良いです。</p>

<pre><code>$ bowline-bundle
$ ./script/run&lt;/code&gt;&lt;/blockquote&gt;
</code></pre>

<p><a rel="attachment wp-att-271" href="http://blog.serverworks.co.jp/tech/2010/07/14/bowline/twitter/"><img class="aligncenter size-medium wp-image-271" title="twitter" src="http://blog.serverworks.co.jp/tech/wp-content/uploads/twitter-281x300.png" alt="" width="281" height="300" /></a></p>

<p>無事に起動したでしょうか?<br />
ちなみにこのクライアントアプリの仕様はこんな感じです。</p>

<ul>
<li>60秒毎に更新</li>
<li>更新は最新データ20件ずつ</li>
<li>既存データの下部に追記されていく</li>
<li>つぶやいた際にも更新</li>
</ul>

<p>まだまだ情報が少ないので大変ですが、今後のマルチプラットフォーム化やバージョンアップに期待がかかるライブラリとして今回紹介させていただきました。</p>
<img src="http://feeds.feedburner.com/~r/co/nZgc/~4/96gqKGtc7WM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.serverworks.co.jp/tech/2010/07/14/bowline/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.serverworks.co.jp/tech/2010/07/14/bowline/</feedburner:origLink></item>
	</channel>
</rss>
