<?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/"
	>

<channel>
	<title>Rails 2.0 &#187; 開発</title>
	<atom:link href="http://rails20.jp/category/%e9%96%8b%e7%99%ba/feed/" rel="self" type="application/rss+xml" />
	<link>http://rails20.jp</link>
	<description>Rails開発のTips、ソフトウェア、ライブラリに関する情報をお届けします。Railsの開発受託も行っています。</description>
	<lastBuildDate>Thu, 08 Oct 2009 04:14:44 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>[AD] Railsが自社Webサービス開発に向く10+1の理由</title>
		<link>http://rails20.jp/2008/10/why_i_choice_ruby_on_rails/</link>
		<comments>http://rails20.jp/2008/10/why_i_choice_ruby_on_rails/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 20:29:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[Webサイト]]></category>
		<category><![CDATA[開発]]></category>

		<guid isPermaLink="false">http://rails20.jp/2008/10/why_i_choice_ruby_on_rails/</guid>
		<description><![CDATA[


MOONGIFTではRailsによる受託開発、教育を行っております。そして今回、なぜRailsが良いのかという理由について挙げてみましたのでRails開発に迷いを感じられている方は参考にしていただければと思います。書いてあることは前々から言われているようなことばかりですが…。
まず第一前提としてよく「Railsは生産性が高い」と言われますが、今回は書かないようにしています。目に見えづらく、経験則によるものなのでかえって怪しく見えてしまうからです。数字にまで落とし込めれば良いのですが、正確性がないので今回は省きます。
詳細は以下より。

1. MVCがRailsのみで完結する
Railsはフレームワークであり統合システムプラットフォームです。他言語のフレームワークでは、Webアプリケーションサーバ、ビュー、O/Rマッピングとそれぞれ選定し組み合わせる必要があるのですが、Railsの場合はRailsさえあれば事足ります。ここを縛りと感じるか、不要な選択の手間を省いてくれるかは個人の考え方によります。が、Railsのコンセプトとして「設定より規約」というものがあります。まさにレール（Rail）に乗ることで快適なWebアプリケーション開発が行えるようになります。
選択を不要にすることで開発の開始が速く、知識の均質化がなされるようになります。
2. コーディング量が少ない
RailsはWebアプリケーション開発における基盤となる機能の殆どを実装しています。場合によっては殆どコーディングをせずに済むでしょう。コーディングが少なければバグが潜む可能性も減り、安定した動作が臨めるようになります。
また、多数のプラグインやRubyGemsを使うことにより、一般的な機能（認証やタグクラウド、コメント機能など）をコーディングなしで実現できます。これらの第三者による機能の提供もRailsの魅力になります。
コーディング量を少なくすることで素早い開発が可能になり、さらにバグも抑えることができます。
3. テスト機構が予め組み込まれている
Webアプリケーション開発に限らず、テストを自動化する仕組みはシステムの品質を上げるのに重要な要素になります。Railsではユニットテストを行う仕組みが予め組み込まれているので、ソフトウェアの選定に悩むことなく導入することが可能です。
開発の終盤ではテスト工程が飛ばされることがありますが、Railsを利用することで開発を効率化し、空いた時間をテストに割り当てることでシステムの品質を高め、よりよいものに仕上げることができるようになります。
4. 使い勝手の良いO/Rマッピング
Webアプリケーションにおいてはデータベースが重要な技術要素になります。が、RDBMS（リレーショナルデータベース管理システム）はSQLを介してアクセスするため、通常のプログラム言語とは切り離されて利用されてきました。利用方法が異なるために、SQLインジェクションのようなバグが潜む可能性を高くしています。
Railsで提供されるO/RマッピングシステムであるActiveRecordはそんなデータベースの存在を意識することなく利用できる優れたシステムです。全てRails側で処理を行ってくれるため、複雑なデータを取得する必要がなければ、SQLを書くことはありません。
リレーションに関する情報もRailsのモデル上に定義を行うだけで良く、容易に欲しいデータが取り出せるようになります。
5. Ajaxが容易に使える
これはAjaxを容易に行えるようにするprototype.jsによる力が大きい所ですが。Railsではprototype.jsをJavaScriptのコーディングなしで扱えます。これはprototype.jsの開発者であるSam Stephenson氏が37signals（Ruby on Railsの開発元）に在籍されていることも大きいでしょう。
prototype.jsではなくjQueryが好きな方はjRailsというプラグインを入れることでprototype.jsと同じ書き方でjQueryを使った多彩なアクション、Ajaxを実装できるようになります。
Webアプリケーションを作る上でAjaxの活用は欠かせなくなっています。Railsを使えばAjaxを容易に利用でき、さらにRailsとの親和性も高く簡単に機能を実装できます。
6. 柔軟なバリデーション機能
Railsのモデルにはバリデーションの機能が組み込まれています。データベースの値を参照したり、別な関数の実行結果によって振り分けたりと柔軟なチェックが可能です。モデルに組み込むことで、アクションごとのコーディング量が減り、コードも集約されて変更に対して柔軟に対応できるようになります。
7. 豊富なプラグイン
認証、タギング、コメント、全文検索、ファイルアップロード、ページネーション…Railsがいかに優秀であろうとも、WebアプリケーションにはRailsだけでは足りない機能が多数必要になります。が、それらは世界中の開発者がプラグインという形で開発を行い提供してくれています。これらを使うことで実装するとコーディング量が増えそうなものも、コードレスで実装できるようになります。
認証一つとっても様々な可能性があります。通常のWeb認証に加えてBasic認証やOpenIDを利用することもあります。こうした一つ一つの機能についてプラグインの存在を確かめれば、さらに素早くシステム開発が行えるようになります。
こうした機能をRailsの中に組み込んでしまうとフレームワーク全体が重厚になってしまいます。その取捨選択の妙技がRailsの良さとも言えます。
8. 多数のオープンソース・ソフトウェア
Railsを学ぶ方法は幾つかあります。書籍やWebの情報をもとに自分でコーディングしてみるのも一つですが、他人の書いたコードを見るのも一つです。Railsはその人気の高さもあって、多数のオープンソース・ソフトウェアが存在しています。MOONGIFTでも既に100近くのRuby on Railsを利用したWebアプリケーションを紹介しています。
また、自分の作りたいと思っているWebアプリケーションをオープンソース・ソフトウェアをベースに作り上げていくのも一つの手です。Railsはここ数年のWeb2.0の波に乗って出てきたフレームワークであるため、ソーシャルブックマークやソーシャルニュース、ブログ、マイクロブログ、SNSなど新しめのWebアプリケーションが多数存在しています。これらをベースに改造して自分なりのWebアプリケーションを構築するとさらに素早く構築ができるようになります。
先駆者たちの知識を吸収するのにRailsがオープンソースであることの利点は大きいと言えます。
9. 多数のWeb情報、書籍
数年前では考えられなかったのですが、Webや書籍でのRailsに関する情報は一気に増えてきました。とは言えRails自体の開発速度がはやく、書籍などがすぐに陳腐化してしまったり、最新のバージョンに対応できなくなってしまうことが多々ありますが…。
とは言え、Rails 2.0系（現在は2.1.2が最新）の情報もWebで探すと多数見つかるようになってきています。また、コミュニティに参加するのも良いでしょう。
10. アジャイル開発が行える
コーディング量が少なく機能が実現できるとあって、素早い開発が可能です。そのため、要望の変化にあわせて手早く開発ができるようになります。アジャイル開発では仕様を初期段階できっちりと決めるのではなく、ミーティングを重ねながら徐々にシステムを変えていく必要があります。その点、スクリプト言語であるRubyは変更が手早く反映されるのでアジャイル開発向きと言えます。
他のスクリプト言語に比べて言えば、Railsという柔軟かつ強固なフレームワークの力によりコーディングを少なく手早くアジャイル開発を行えるのがメリットです。
　
そして最後の理由が、
11. Rubyが日本製
ではないでしょうか。恐らくRubyが海外の言語であったとしたら、日本でここまでもてはやされることはなかったと思われます。とは言え、Ruby on Railsが優秀なフレームワークであるのには変わりはありません。
Railsに関して言えば特に日本語のサポートが充実しているということはありませんが、その元になったRubyが日本製（というよりまつもとゆきひろ氏製）だったからこそ、日本においてもここまでRailsが注目を集めていると言えるのではないでしょうか。
　
そしてそもそもの題名にある「自社Webサービス」という言葉についてです。個人的な観点で言えば、Railsは他社向けのシステム開発には向いていないと考えています。これらは幾つか要因があるのですが別の機会にて。簡潔に言うと「開発リソースの確保」「パフォーマンス保証」「多様なプラットフォームに対する情報量」などが問題です。そこで他社向けであれば簡易的なものはPHPやPerl、重厚なものはJavaなどを選択するのが良いのではないでしょうか。
自社サービスについて言えば、刻々と変わる利用者のニーズに対して素早く対応していく必要があります。そこには仮定に基づいた実験もあり、それらを素早くフィードバックできる仕組みが必要です。そのとき、アジャイル的な開発に向いたRailsはきっと役に立つはずです。
また、開発会社については未知の技術を使うよりも既知の技術を使った方が保証もでき、安全です。パフォーマンスの面でRailsが問題視されることも多く、最適なアーキテクチャもまだまだ情報が充実していません。その点、自社のWebサービスであれば初期段階は低コストに、利用者やPV増にあわせてシステム増強をはかることが可能です。
MOONGIFTにRailsの受託開発または開発協力を必要とされる方がいらっしゃいましたが、info@moongift.jpまでご連絡ください！
]]></description>
			<content:encoded><![CDATA[</p>
<p>
<img src="http://www.moongift.jp/wp-content/uploads/2008/10/rails.png" width="87" height="112" alt="rails.png" /></p>
<p>MOONGIFTではRailsによる受託開発、教育を行っております。そして今回、なぜRailsが良いのかという理由について挙げてみましたのでRails開発に迷いを感じられている方は参考にしていただければと思います。書いてあることは前々から言われているようなことばかりですが…。</p>
<p>まず第一前提としてよく「Railsは生産性が高い」と言われますが、今回は書かないようにしています。目に見えづらく、経験則によるものなのでかえって怪しく見えてしまうからです。数字にまで落とし込めれば良いのですが、正確性がないので今回は省きます。</p>
<p>詳細は以下より。</p>
<p><span id="more-57"></span></p>
<h2>1. MVCがRailsのみで完結する</h2>
<p>Railsはフレームワークであり統合システムプラットフォームです。他言語のフレームワークでは、Webアプリケーションサーバ、ビュー、O/Rマッピングとそれぞれ選定し組み合わせる必要があるのですが、Railsの場合はRailsさえあれば事足ります。ここを縛りと感じるか、不要な選択の手間を省いてくれるかは個人の考え方によります。が、Railsのコンセプトとして「設定より規約」というものがあります。まさにレール（Rail）に乗ることで快適なWebアプリケーション開発が行えるようになります。</p>
<p>選択を不要にすることで開発の開始が速く、知識の均質化がなされるようになります。</p>
<h2>2. コーディング量が少ない</h2>
<p>RailsはWebアプリケーション開発における基盤となる機能の殆どを実装しています。場合によっては殆どコーディングをせずに済むでしょう。コーディングが少なければバグが潜む可能性も減り、安定した動作が臨めるようになります。</p>
<p>また、多数のプラグインやRubyGemsを使うことにより、一般的な機能（認証やタグクラウド、コメント機能など）をコーディングなしで実現できます。これらの第三者による機能の提供もRailsの魅力になります。</p>
<p>コーディング量を少なくすることで素早い開発が可能になり、さらにバグも抑えることができます。</p>
<h2>3. テスト機構が予め組み込まれている</h2>
<p>Webアプリケーション開発に限らず、テストを自動化する仕組みはシステムの品質を上げるのに重要な要素になります。Railsではユニットテストを行う仕組みが予め組み込まれているので、ソフトウェアの選定に悩むことなく導入することが可能です。</p>
<p>開発の終盤ではテスト工程が飛ばされることがありますが、Railsを利用することで開発を効率化し、空いた時間をテストに割り当てることでシステムの品質を高め、よりよいものに仕上げることができるようになります。</p>
<h2>4. 使い勝手の良いO/Rマッピング</h2>
<p>Webアプリケーションにおいてはデータベースが重要な技術要素になります。が、RDBMS（リレーショナルデータベース管理システム）はSQLを介してアクセスするため、通常のプログラム言語とは切り離されて利用されてきました。利用方法が異なるために、SQLインジェクションのようなバグが潜む可能性を高くしています。</p>
<p>Railsで提供されるO/RマッピングシステムであるActiveRecordはそんなデータベースの存在を意識することなく利用できる優れたシステムです。全てRails側で処理を行ってくれるため、複雑なデータを取得する必要がなければ、SQLを書くことはありません。</p>
<p>リレーションに関する情報もRailsのモデル上に定義を行うだけで良く、容易に欲しいデータが取り出せるようになります。</p>
<h2>5. Ajaxが容易に使える</h2>
<p>これはAjaxを容易に行えるようにするprototype.jsによる力が大きい所ですが。Railsではprototype.jsをJavaScriptのコーディングなしで扱えます。これはprototype.jsの開発者であるSam Stephenson氏が37signals（Ruby on Railsの開発元）に在籍されていることも大きいでしょう。</p>
<p>prototype.jsではなくjQueryが好きな方はjRailsというプラグインを入れることでprototype.jsと同じ書き方でjQueryを使った多彩なアクション、Ajaxを実装できるようになります。</p>
<p>Webアプリケーションを作る上でAjaxの活用は欠かせなくなっています。Railsを使えばAjaxを容易に利用でき、さらにRailsとの親和性も高く簡単に機能を実装できます。</p>
<h2>6. 柔軟なバリデーション機能</h2>
<p>Railsのモデルにはバリデーションの機能が組み込まれています。データベースの値を参照したり、別な関数の実行結果によって振り分けたりと柔軟なチェックが可能です。モデルに組み込むことで、アクションごとのコーディング量が減り、コードも集約されて変更に対して柔軟に対応できるようになります。</p>
<h2>7. 豊富なプラグイン</h2>
<p>認証、タギング、コメント、全文検索、ファイルアップロード、ページネーション…Railsがいかに優秀であろうとも、WebアプリケーションにはRailsだけでは足りない機能が多数必要になります。が、それらは世界中の開発者がプラグインという形で開発を行い提供してくれています。これらを使うことで実装するとコーディング量が増えそうなものも、コードレスで実装できるようになります。</p>
<p>認証一つとっても様々な可能性があります。通常のWeb認証に加えてBasic認証やOpenIDを利用することもあります。こうした一つ一つの機能についてプラグインの存在を確かめれば、さらに素早くシステム開発が行えるようになります。</p>
<p>こうした機能をRailsの中に組み込んでしまうとフレームワーク全体が重厚になってしまいます。その取捨選択の妙技がRailsの良さとも言えます。</p>
<h2>8. 多数のオープンソース・ソフトウェア</h2>
<p>Railsを学ぶ方法は幾つかあります。書籍やWebの情報をもとに自分でコーディングしてみるのも一つですが、他人の書いたコードを見るのも一つです。Railsはその人気の高さもあって、多数のオープンソース・ソフトウェアが存在しています。MOONGIFTでも既に<a href="http://www.moongift.jp/category/framework/ruby_on_rails">100近くのRuby on Railsを利用したWebアプリケーション</a>を紹介しています。</p>
<p>また、自分の作りたいと思っているWebアプリケーションをオープンソース・ソフトウェアをベースに作り上げていくのも一つの手です。Railsはここ数年のWeb2.0の波に乗って出てきたフレームワークであるため、ソーシャルブックマークやソーシャルニュース、ブログ、マイクロブログ、SNSなど新しめのWebアプリケーションが多数存在しています。これらをベースに改造して自分なりのWebアプリケーションを構築するとさらに素早く構築ができるようになります。</p>
<p>先駆者たちの知識を吸収するのにRailsがオープンソースであることの利点は大きいと言えます。</p>
<h2>9. 多数のWeb情報、書籍</h2>
<p>数年前では考えられなかったのですが、Webや書籍でのRailsに関する情報は一気に増えてきました。とは言えRails自体の開発速度がはやく、書籍などがすぐに陳腐化してしまったり、最新のバージョンに対応できなくなってしまうことが多々ありますが…。</p>
<p>とは言え、Rails 2.0系（現在は2.1.2が最新）の情報もWebで探すと多数見つかるようになってきています。また、コミュニティに参加するのも良いでしょう。</p>
<h2>10. アジャイル開発が行える</h2>
<p>コーディング量が少なく機能が実現できるとあって、素早い開発が可能です。そのため、要望の変化にあわせて手早く開発ができるようになります。アジャイル開発では仕様を初期段階できっちりと決めるのではなく、ミーティングを重ねながら徐々にシステムを変えていく必要があります。その点、スクリプト言語であるRubyは変更が手早く反映されるのでアジャイル開発向きと言えます。</p>
<p>他のスクリプト言語に比べて言えば、Railsという柔軟かつ強固なフレームワークの力によりコーディングを少なく手早くアジャイル開発を行えるのがメリットです。</p>
<p>　</p>
<p>そして最後の理由が、</p>
<h2>11. Rubyが日本製</h2>
<p>ではないでしょうか。恐らくRubyが海外の言語であったとしたら、日本でここまでもてはやされることはなかったと思われます。とは言え、Ruby on Railsが優秀なフレームワークであるのには変わりはありません。</p>
<p>Railsに関して言えば特に日本語のサポートが充実しているということはありませんが、その元になったRubyが日本製（というよりまつもとゆきひろ氏製）だったからこそ、日本においてもここまでRailsが注目を集めていると言えるのではないでしょうか。</p>
<p>　</p>
<p>そしてそもそもの題名にある「自社Webサービス」という言葉についてです。個人的な観点で言えば、Railsは他社向けのシステム開発には向いていないと考えています。これらは幾つか要因があるのですが別の機会にて。簡潔に言うと「開発リソースの確保」「パフォーマンス保証」「多様なプラットフォームに対する情報量」などが問題です。そこで他社向けであれば簡易的なものはPHPやPerl、重厚なものはJavaなどを選択するのが良いのではないでしょうか。</p>
<p>自社サービスについて言えば、刻々と変わる利用者のニーズに対して素早く対応していく必要があります。そこには仮定に基づいた実験もあり、それらを素早くフィードバックできる仕組みが必要です。そのとき、アジャイル的な開発に向いたRailsはきっと役に立つはずです。</p>
<p>また、開発会社については未知の技術を使うよりも既知の技術を使った方が保証もでき、安全です。パフォーマンスの面でRailsが問題視されることも多く、最適なアーキテクチャもまだまだ情報が充実していません。その点、自社のWebサービスであれば初期段階は低コストに、利用者やPV増にあわせてシステム増強をはかることが可能です。</p>
<p><strong>MOONGIFTにRailsの受託開発または開発協力を必要とされる方がいらっしゃいましたが、</strong><a href="info@moongift.jp"><strong>info@moongift.jp</strong></a><strong>までご連絡ください！</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://rails20.jp/2008/10/why_i_choice_ruby_on_rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Amazon EC2でmod_rails環境を構築するサンプル</title>
		<link>http://rails20.jp/2008/04/using_mod_rails_on_amazon_ec2/</link>
		<comments>http://rails20.jp/2008/04/using_mod_rails_on_amazon_ec2/#comments</comments>
		<pubDate>Mon, 14 Apr 2008 06:47:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Amazon]]></category>
		<category><![CDATA[プラグイン]]></category>
		<category><![CDATA[開発]]></category>

		<guid isPermaLink="false">http://rails20.jp/2008/04/using_mod_rails_on_amazon_ec2/</guid>
		<description><![CDATA[Amazon EC2でmod_railsを使ってサーバ構築を行う記事をOpenServiceにて記述しました。mod_railsに興味のある方はぜひご覧ください。
元々はCentOSを使おうと思ったのですが、Rubyが1.8.5であったため+色々あったので断念しました。そこでUbuntuを使って構築を行っています。所用時間は待つ時間を入れても20〜30分あれば完了できます。ごく手軽です。
mod_railsを使った場合、HTMLやJavaScript、CSSファイルなどの静的ファイルにはApacheからレスポンスを返してくれます。この点がごく気軽に使えていいですね。レスポンスもそこそこです。
　
Open Service » Blog Archive » Amazon EC2を使ってWebサービスを公開する「インスタンス編」
　http://openservice.jp/2008/04/using_amazon_ec2_2/
]]></description>
			<content:encoded><![CDATA[<p>Amazon EC2でmod_railsを使ってサーバ構築を行う記事をOpenServiceにて記述しました。mod_railsに興味のある方はぜひご覧ください。</p>
<p>元々はCentOSを使おうと思ったのですが、Rubyが1.8.5であったため+色々あったので断念しました。そこでUbuntuを使って構築を行っています。所用時間は待つ時間を入れても20〜30分あれば完了できます。ごく手軽です。</p>
<p>mod_railsを使った場合、HTMLやJavaScript、CSSファイルなどの静的ファイルにはApacheからレスポンスを返してくれます。この点がごく気軽に使えていいですね。レスポンスもそこそこです。</p>
<p>　</p>
<p><strong>Open Service » Blog Archive » Amazon EC2を使ってWebサービスを公開する「インスタンス編」</strong><br />
　<a href="http://openservice.jp/2008/04/using_amazon_ec2_2/">http://openservice.jp/2008/04/using_amazon_ec2_2/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://rails20.jp/2008/04/using_mod_rails_on_amazon_ec2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ホスティングサービスでもRailsが利用できるようになるかも、な「Passenger」</title>
		<link>http://rails20.jp/2008/04/passenger/</link>
		<comments>http://rails20.jp/2008/04/passenger/#comments</comments>
		<pubDate>Sat, 12 Apr 2008 02:38:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[プラグイン]]></category>
		<category><![CDATA[開発]]></category>

		<guid isPermaLink="false">http://rails20.jp/2008/04/passenger/</guid>
		<description><![CDATA[MOONGIFTでも紹介したmod_railsと呼ばれるPassenger。Creative Commonsによるオープンソース・ソフトウェアです。
今回はその導入方法を書きたいと思います。インストールは簡単で、gemを使って行えます。
$ sudo gem install passenger
Password:
Bulk updating Gem source index for: http://gems.rubyforge.org
Building native extensions. This could take a while...
Successfully installed passenger-1.0.1
Installing ri documentation for passenger-1.0.1...
Installing RDoc documentation for passenger-1.0.1...
次に、Apacheに組み込むためのコマンドを実行します。詳細は以下にて。

インストールを開始する前に、別途必要なモジュールを入れておきます。筆者の場合、fastthreadがなかったのでインストールします。これもGemからインストールできます。
$ sudo gem install fastthread
Select which gem to install for your platform (i686-darwin9.1.2)
1. fastthread 1.0.1 (ruby)
2. fastthread 1.0.1 (mswin32)
3. fastthread 1.0 (ruby)
4. fastthread 1.0 (mswin32)
5. Skip this [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.moongift.jp/2008/04/passenger/">MOONGIFT</a>でも紹介したmod_railsと呼ばれるPassenger。Creative Commonsによるオープンソース・ソフトウェアです。</p>
<p>今回はその導入方法を書きたいと思います。インストールは簡単で、gemを使って行えます。</p>
<p><code>$ sudo gem install passenger<br />
Password:<br />
Bulk updating Gem source index for: http://gems.rubyforge.org<br />
Building native extensions. This could take a while...<br />
Successfully installed passenger-1.0.1<br />
Installing ri documentation for passenger-1.0.1...<br />
Installing RDoc documentation for passenger-1.0.1...<br /></code></p>
<p>次に、Apacheに組み込むためのコマンドを実行します。詳細は以下にて。</p>
<p><span id="more-35"></span></p>
<p>インストールを開始する前に、別途必要なモジュールを入れておきます。筆者の場合、fastthreadがなかったのでインストールします。これもGemからインストールできます。</p>
<p><code>$ sudo gem install fastthread<br />
Select which gem to install for your platform (i686-darwin9.1.2)<br />
1. fastthread 1.0.1 (ruby)<br />
2. fastthread 1.0.1 (mswin32)<br />
3. fastthread 1.0 (ruby)<br />
4. fastthread 1.0 (mswin32)<br />
5. Skip this gem<br />
6. Cancel installation<br />
&gt; 1<br />
Building native extensions. This could take a while...<br />
Successfully installed fastthread-1.0.1<br />
Installing ri documentation for fastthread-1.0.1...<br />
No definition for dummy_dump<br />
No definition for dummy_dump<br />
No definition for rb_queue_marshal_load<br />
No definition for rb_queue_marshal_dump<br />
Installing RDoc documentation for fastthread-1.0.1...<br />
No definition for dummy_dump<br />
No definition for dummy_dump<br />
No definition for rb_queue_marshal_load<br />
No definition for rb_queue_marshal_dump</code></p>
<p>ではインストールを開始します。</p>
<p><code>$ sudo passenger-install-apache2-module<br />
/opt/local/lib/ruby/gems/1.8/gems/passenger-1.0.1/bin/passenger-install-apache2-module:25: warning: Insecure world writable dir /opt/local/var/db/postgresql82 in PATH, mode 040777<br />
Welcome to the Passenger Apache 2 module installer.<br />
This installer will guide you through the entire installation process. It<br />
shouldn't take more than 3 minutes in total.<br />
Here's what you can expect from the installation process:<br />
1. The Apache 2 module will be installed for you.<br />
2. You'll learn how to configure Apache.<br />
3. You'll learn how to deploy a Ruby on Rails application.<br />
Don't worry if anything goes wrong. This installer will advise you on how to<br />
solve any problems.<br />
Press Enter to continue, or Ctrl-C to abort.<br /></code></p>
<p>このように表示されるので、1を入力してエンターを押します。</p>
<p><code>Checking for required software...<br />
（中略） --------------------------------------------<br />
The Apache 2 module was successfully installed.<br />
Please edit your Apache configuration file, and add these lines:<br />
LoadModule passenger_module /opt/local/lib/ruby/gems/1.8/gems/passenger-1.0.1/ext/apache2/mod_passenger.so<br />
RailsSpawnServer /opt/local/lib/ruby/gems/1.8/gems/passenger-1.0.1/bin/passenger-spawn-server<br />
RailsRuby /opt/local/bin/ruby<br />
After you restart Apache, you are ready to deploy any number of Ruby on Rails<br />
applications on Apache, without any further Ruby on Rails-specific<br />
configuration!<br />
Press ENTER to continue.<br />
--------------------------------------------<br />
Deploying a Ruby on Rails application: an example<br />
Suppose you have a Ruby on Rails application in /somewhere. Add a virtual host<br />
to your Apache configuration file, and set its DocumentRoot to<br />
/somewhere/public, like this:<br />
&lt;VirtualHost *:80&gt;<br />
ServerName www.yourhost.com<br />
DocumentRoot /somewhere/public<br />
&lt;/VirtualHost&gt;<br />
And that's it! You may also want to check the Users Guide for security and<br />
optimization tips and other useful information:<br />
/opt/local/lib/ruby/gems/1.8/gems/passenger-1.0.1/doc/Users guide.html<br />
Enjoy Passenger, a product of Phusion (www.phusion.nl) <img src='http://rails20.jp/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> <br />
http://www.modrails.com/</code></p>
<p>これでインストール完了です。次にhttpd.confを修正します。上のコマンド結果に出ているものをそのまま使えば良いだけです。</p>
<p><code>LoadModule passenger_module /opt/local/lib/ruby/gems/1.8/gems/passenger-1.0.1/ext/apache2/mod_passenger.so<br />
RailsSpawnServer /opt/local/lib/ruby/gems/1.8/gems/passenger-1.0.1/bin/passenger-spawn-server<br />
RailsRuby /opt/local/bin/ruby<br />
RailsEnv development</code></p>
<p>RailsEnvはデフォルトがproductionになっていますので、必要に応じて変更してください。後はVirtualHostを使う場合は、コマンド結果と同じように設定します。</p>
<p><code>&lt;VirtualHost *:80&gt;<br />
ServerName local.example.com<br />
DocumentRoot /path_to_rails_root/public/<br />
ErrorLog logs/j-error_log # 必要に応じて<br />
CustomLog logs/j-access_log combined # 必要に応じて<br />
&lt;/VirtualHost&gt;</code></p>
<p>これで設定は完了ですが、Apache2.2系の場合以下の設定を修正する必要があるようです。またはディレクトリ設定の追加を行う必要があります。</p>
<p><code>&lt;Directory /&gt;<br />
Options FollowSymLinks<br />
AllowOverride All<br />
Order deny,allow<br />
Deny from all ← これをコメントアウト<br />
&lt;/Directory&gt;</code></p>
<p>他の環境（Apache 2.0系など）は確認していませんので各自お願いします。ではApacheを再起動して確認してみます。</p>
<p>
<a href="http://rails20.jp/wp-content/uploads/61.jpg"><img src="http://rails20.jp/wp-content/uploads/6-tm1.jpg" width="440" height="288" alt="ピクチャ 6.png" /></a><br />
<strong>mod_rails経由での起動</strong></p>
<p>　</p>
<p>見事、Railsのページが表示されれば完了です。キャッシュも含めて特に動作は問題ないように思えます。レスポンスも悪くありません。Ajaxの部分も動作します。なお、設定によるのかも知れませんが、静的なファイルについてはApacheから送信されているようなので、これはレスポンス向上にも役立ちますね。</p>
<p>次回はレスポンスの実際の計測を行ってみたいと思います。とりあえず公式サイトに掲載されているレスポンス比較は以下の通りです。</p>
<p>
<a href="http://rails20.jp/wp-content/uploads/passenger-mongrel-thin-benchmark.jpg"><img src="http://rails20.jp/wp-content/uploads/passenger-mongrel-thin-benchmark-tm.jpg" width="440" height="273" alt="passenger_mongrel_thin_benchmark.png" /></a></p>
<p>via <a href="http://www.modrails.com/documentation.html">Documentation — Phusion Passenger (a.k.a. mod_rails)</a></p>
<p>　</p>
<p>ということで、Typoであればトップ、PetstoreではThinに劣るくらい、EldoradoではMongrel/Thinと似たり寄ったりといった所のようです。レスポンス性能も高いようですし、何より設置の手軽さが良いですね。</p>
<p>　</p>
<p><strong>Overview — Phusion Passenger (a.k.a. mod_rails)</strong><br />
　<a href="http://www.modrails.com/">http://www.modrails.com/</a></p>
<p><strong>MOONGIFT: » チェック必須！Rails新時代の到来か？「Passenger（mod_rails for Apache）」:オープンソースを毎日紹介</strong><br />
　<a href="http://www.moongift.jp/2008/04/passenger/">http://www.moongift.jp/2008/04/passenger/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://rails20.jp/2008/04/passenger/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Atom.builderもキャッシュするxmlcacheプラグイン</title>
		<link>http://rails20.jp/2008/04/xmlcache_plugin/</link>
		<comments>http://rails20.jp/2008/04/xmlcache_plugin/#comments</comments>
		<pubDate>Thu, 10 Apr 2008 08:05:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[プラグイン]]></category>
		<category><![CDATA[開発]]></category>

		<guid isPermaLink="false">http://rails20.jp/2008/04/xmlcache_plugin/</guid>
		<description><![CDATA[

xmlcacheプラグインのプロジェクトページ
　
RailsでRSSやAtomを出力する際に利用するAtomFeedHelperがあると思いますが、これは通常のキャッシュが使えません。普通にcacheを使うと、
undefined local variable or method `_erbout' for #&#60;ActionView::Base:0x24dde68&#62;
というエラーが出てしまいます。
そこで利用するのがxmlcacheプラグインです。インストールは、
ruby script/plugin install http://xmlcache.googlecode.com/svn/trunk/xmlcache
と行います。これをインストールした状態で、
cache_xml "cache name" do
　hogehoge
end
とすれば、通常のキャッシュ（フラグメントキャッシュ）同様の処理が可能になります。これでフィード生成が高速化されるようになりますね。ちなみにcaches_pageはアクションごとの設定なので、フォーマットによってキャッシュする、しないといった設定ができない模様…。これはこれで面倒だ。
]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://rails20.jp/wp-content/uploads/11.jpg"><img src="http://rails20.jp/wp-content/uploads/11-tm.jpg" width="440" height="303" alt="ピクチャ 11.png" /></a><br />
<strong>xmlcacheプラグインのプロジェクトページ</strong></p>
<p>　</p>
<p>RailsでRSSやAtomを出力する際に利用するAtomFeedHelperがあると思いますが、これは通常のキャッシュが使えません。普通にcacheを使うと、</p>
<p><code>undefined local variable or method `_erbout' for #&lt;ActionView::Base:0x24dde68&gt;</code></p>
<p>というエラーが出てしまいます。</p>
<p>そこで利用するのがxmlcacheプラグインです。インストールは、</p>
<p><code>ruby script/plugin install http://xmlcache.googlecode.com/svn/trunk/xmlcache</code></p>
<p>と行います。これをインストールした状態で、</p>
<p><code>cache_xml "<span style="font-style: italic;">cache name</span>" do<br />
　hogehoge<br />
end</code></p>
<p>とすれば、通常のキャッシュ（フラグメントキャッシュ）同様の処理が可能になります。これでフィード生成が高速化されるようになりますね。ちなみにcaches_pageはアクションごとの設定なので、フォーマットによってキャッシュする、しないといった設定ができない模様…。これはこれで面倒だ。</p>
]]></content:encoded>
			<wfw:commentRss>http://rails20.jp/2008/04/xmlcache_plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Railsで開発するときにはキャッシュを予め想定に入れておく</title>
		<link>http://rails20.jp/2008/04/cache_tips/</link>
		<comments>http://rails20.jp/2008/04/cache_tips/#comments</comments>
		<pubDate>Tue, 08 Apr 2008 12:33:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[開発]]></category>

		<guid isPermaLink="false">http://rails20.jp/2008/04/cache_tips/</guid>
		<description><![CDATA[

via En attendant Jérémie on Flickr &#8211; Photo Sharing!
　
今回、まともにキャッシュを使おうと思い始めたのですが、ある程度組み上げた段階でキャッシュを組み入れようとすると色々問題が起こることが分かりました。まず知識としては、Railsのキャッシュは3パターンあります。

Page
Action
Fragment

があります。Pageは一番強力で、一度生成後はApacheやlighttpdなどのWebサーバレベルでレスポンスを返してくれます。アプリケーションサーバを通さない分、高速です。が、逆に言えば生成した後はRails側で制御できない状態になるので、表示を細かに変更することはできません。
次にAction Cacheがあります。これはPageアクション同様に生成されるページ全体をキャッシングしますが、Railsのアクションは実行するという点が異なります。アクションを通るので、DBにアクセスして情報を取得することが可能というメリットはありますが、DBへのアクセスがボトルネックになっている場合は使えません。
最後にFragmentキャッシュです。これはViewの中で細かく利用できます。言わば部品を定義していくことで、一部分だけの表示をキャッシングしていくことができます。細かく制御できる利点はありますが、裏を返せば多数使うと管理が大変になります。
では次に問題点や解決策を挙げてみたいと思います。


まず、レンダリングの高速化を考えてできるだけPageキャッシングを使っていきたいと思います。が、ログイン後に出す「○○さんいらっしゃい」という系統のメッセージを出す場合は問題です。これの解決策としては幾つかあるのですが、今回はJavaScriptとCookieで解決しました。
ログイン時にCookieに対してログイン名を渡します。
cookies[:login] = name
これでCookieレベルでログイン名が渡せるようになります。次にビュー側では、

&#60;div id="logged_in"&#62;　&#60;%= link_to _("My page"), :controller =&#62; :memo, :action =&#62; :mypage %&#62;
　(&#60;%= link_to _("Settings"), :controller =&#62; :account, :action =&#62; :settings %&#62;)
　&#60;%= link_to _("Log out"), :controller =&#62; :account, :action =&#62; :logout %&#62;
&#60;/div&#62;
&#60;div id="logged_out"&#62;
　&#60;%= link_to _("Login"), :controller =&#62; :account, :action =&#62; :login %&#62;
&#60;/div&#62;

という形で、ログイン時とログアウト時の両方を書いておきます。その状態でJavaScriptを使います。ここではクッキーの制御が簡単にできるCookieManagerを使いました。
Cookie Manager &#124; Javascript [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://rails20.jp/wp-content/uploads/463339300-9544e80701.jpg"><img src="http://rails20.jp/wp-content/uploads/463339300-9544e80701-tm.jpg" width="440" height="293" alt="463339300_9544e80701.jpg" /></a></p>
<p>via <a href="http://www.flickr.com/photos/73491156@N00/463339300">En attendant Jérémie on Flickr &#8211; Photo Sharing!</a></p>
<p>　</p>
<p>今回、まともにキャッシュを使おうと思い始めたのですが、ある程度組み上げた段階でキャッシュを組み入れようとすると色々問題が起こることが分かりました。まず知識としては、Railsのキャッシュは3パターンあります。</p>
<ul>
<li>Page</li>
<li>Action</li>
<li>Fragment</li>
</ul>
<p>があります。Pageは一番強力で、一度生成後はApacheやlighttpdなどのWebサーバレベルでレスポンスを返してくれます。アプリケーションサーバを通さない分、高速です。が、逆に言えば生成した後はRails側で制御できない状態になるので、表示を細かに変更することはできません。</p>
<p>次にAction Cacheがあります。これはPageアクション同様に生成されるページ全体をキャッシングしますが、Railsのアクションは実行するという点が異なります。アクションを通るので、DBにアクセスして情報を取得することが可能というメリットはありますが、DBへのアクセスがボトルネックになっている場合は使えません。</p>
<p>最後にFragmentキャッシュです。これはViewの中で細かく利用できます。言わば部品を定義していくことで、一部分だけの表示をキャッシングしていくことができます。細かく制御できる利点はありますが、裏を返せば多数使うと管理が大変になります。</p>
<p>では次に問題点や解決策を挙げてみたいと思います。</p>
<p></p>
<p><span id="more-29"></span></p>
<p>まず、レンダリングの高速化を考えてできるだけPageキャッシングを使っていきたいと思います。が、ログイン後に出す「○○さんいらっしゃい」という系統のメッセージを出す場合は問題です。これの解決策としては幾つかあるのですが、今回はJavaScriptとCookieで解決しました。</p>
<p>ログイン時にCookieに対してログイン名を渡します。</p>
<p><code>cookies[:login] = name</code></p>
<p>これでCookieレベルでログイン名が渡せるようになります。次にビュー側では、</p>
<p><code><br />
&lt;div id="logged_in"&gt;</code><code>　&lt;%= link_to _("My page"), :controller =&gt; :memo, :action =&gt; :mypage %&gt;<br />
　(&lt;%= link_to _("Settings"), :controller =&gt; :account, :action =&gt; :settings %&gt;)<br />
　&lt;%= link_to _("Log out"), :controller =&gt; :account, :action =&gt; :logout %&gt;<br />
&lt;/div&gt;<br />
&lt;div id="logged_out"&gt;<br />
　&lt;%= link_to _("Login"), :controller =&gt; :account, :action =&gt; :login %&gt;<br />
&lt;/div&gt;<br /></code></p>
<div id="logged_out"></div>
<p>という形で、ログイン時とログアウト時の両方を書いておきます。その状態でJavaScriptを使います。ここではクッキーの制御が簡単にできるCookieManagerを使いました。</p>
<p><strong>Cookie Manager | Javascript Code | All Things Webby</strong><br />
　http://insin.woaf.net/code/javascript/cookiemanager.html</p>
<p><code><br />
function handle_cached_user() {<br />
　var manager = new CookieManager({shelfLife:30});<br />
　var logged_in = $('logged_in');<br />
　var logged_out = $('logged_out');<br />
　if(manager.getCookie('login') == null) {<br />
　　logged_in.style.display = 'none';<br />
　　logged_out.style.display = 'inline';<br />
　} else {<br />
　　logged_out.style.display = 'none';<br />
　　logged_in.style.display = 'inline';<br />
　}<br />
　message = manager.getCookie('message');<br />
　if (message != null) {<br />
　　$("notice").innerHTML = decodeURIComponent(message).replace(/\+/g, " ");<br />
　　manager.setCookie("message", "");<br />
　}<br />
}</code></p>
<p>という風にして、loginというクッキーが存在するならログイン状態に、なければ未ログイン状態としてHTML側の表示を制御しています。この場合の問題点としては、JavaScriptレベルでの制御なので、それを基準にサーバ側の処理は行ってはいけないということがあります。サーバ側は別なセッションなりできちんとアクセス制限を行う必要があります。</p>
<p>が、この方法を使えば、パブリックな情報は殆どPageキャッシュレベルにすることが可能です。</p>
<p>Pageキャッシングの問題として、ページネーションを使った場合の処理があります。これはURLの?以下の文字はキャッシングを別にしてくれないということが問題です。そのため、pageをroute.rbに組み入れておくと、1.htmlのようなページネーションに対応したHTMLファイルを生成してくれるようになります。</p>
<p>map.connect &#8216;memo/index/:id/:page&#8217;, :controller =&gt; &#8216;memo&#8217;, :action =&gt; &#8216;index&#8217;, :requirements =&gt; { :page =&gt; /\d+/}, :page =&gt; nil</p>
<p>Actionキャッシングは今回は使いませんでした。できるだけDBに接続しないような方法を考えた場合、Actionキャッシングでは中途半端でした。</p>
<p>Fragmentキャッシングは様々な場所で利用しています。例えば、今回はデータベースには簡単なデータのみを保存し、文字情報はAmazon S3に保存しています。これはMogileFSなどの分散化ファイルシステムを使った場合でも同様ですが、HTTPベースでのアクセスになるので速度的に不利です。そのため、必要なデータはキャッシングし、できるだけ接続しないようにしながらストレージを活用していくのが重要です。</p>
<p>当初はモデルのafter_findを使って、データベースからデータを取得した際に、それに関連するデータをAmazon S3から取得する形にしていたのですが、Fragmentキャッシュを利用するにあたって、Amazon S3に極力接続しない形に移行しました。</p>
<p>また、ログインしている否か、マイページなのか否かによって細かく表示を制御している場合、Fragmentキャッシュは相当増える可能性があります。そして増えすぎるとその管理が煩雑になります。そこで解決手段としては、そうした表示上の制御をできるだけ除いてしまうということがあります。ログイン時にしか使えない機能も表示してしまうことで、それがクリックされた際にはログインのページを表示するといった方法や、エラーメッセージを出すという手法をとるようにします。また、それらをJavaScriptで制御するという方法も可能ではありますが、JavaScriptにあまり頼りすぎるのも問題があります。</p>
<p>次の問題として、エラーメッセージがあります。例えばflash[:notice]を使ってエラーメッセージを出した場合、エラーメッセージが表示された状態でキャッシュが作成され、固定化されてしまいます。これだと、別なユーザが見た場合や、再読み込みした場合でも同じエラーメッセージが出続けます。これはCookieレベルでエラーメッセージを出すようにすると解決します。cookie[:message] = &#8220;hogehoge&#8221;でメッセージを与えておき、表示側でCookieにメッセージがあればそれを表示し、Cookieを消すという動作です。</p>
<p>これらの方法を後から行うと、パブリックなアクションとマイページ系のアクションを別にしたり、レイアウトも別にしたりと修正が相当入ります。元々想定しながら作っておくのが一番です。</p>
<p>PageキャッシングとFragmentキャッシングを活用することで、速度的には相当改善されるようになりました。CookieやJavaScriptたよりになるデメリットもありますが、単なる表示制御だけで、アクセス権限の制御はサーバ側できちんと行っている限りはそれほど問題にはならないかと思います。Railsは他のフレームワークに比べると速度面のデメリットが大きいと思いますので、キャッシングをうまく使って速度向上を行ってみてください。</p>
]]></content:encoded>
			<wfw:commentRss>http://rails20.jp/2008/04/cache_tips/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>iTunesをRailsで動かす「iTunesRails」</title>
		<link>http://rails20.jp/2008/04/itunesrails/</link>
		<comments>http://rails20.jp/2008/04/itunesrails/#comments</comments>
		<pubDate>Mon, 07 Apr 2008 07:57:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[開発]]></category>

		<guid isPermaLink="false">http://rails20.jp/2008/04/itunesrails/</guid>
		<description><![CDATA[これは面白い。RubyCocoaとRailsを組み合わせることで、WebブラウザからiTunesを操作できるようになっています。ベースはRails2.0.2を使って開発されています。RubyCocoaは大きな可能性を秘めていますので、OSXとRubyの組み合わせで新しいアプリケーションが次々と生まれていきそうです。
RubyはOSX標準のものではなく、MacPortsのものを使っていたのですが、この場合RubyCocoaが使えません。その場合はrequire &#8216;osx/cocoa&#8217;ができない。 &#8211; Hirameki InspirationとBuild &#8211; RubyCocoa wiki を参考にしてインストールします。
2008年4月7日時点でのコマンドは、

$ tar xfz RubyCocoa-0.13.2.tgz
$ cd RubyCocoa-0.13.2
$ ruby install.rb config --prefix=/opt/local --build-universal=no
$ ruby install.rb setup
$ sudo ruby install.rb install
です。バージョンは変わっても、他は同じかと思います。後は通常のRailsアプリケーションのように起動すればOKです。
そしてこちらがiTunesRailsの画面です。


キューに入れたり、再生/停止などの操作がブラウザ上から可能です。再生中であっても画面を切り替えて操作できます。ボリュームが1単位で変えられるのが面白いです。


　
itunes-rails &#8211; Google Code
　http://code.google.com/p/itunes-rails/
]]></description>
			<content:encoded><![CDATA[<p>これは面白い。RubyCocoaとRailsを組み合わせることで、WebブラウザからiTunesを操作できるようになっています。ベースはRails2.0.2を使って開発されています。RubyCocoaは大きな可能性を秘めていますので、OSXとRubyの組み合わせで新しいアプリケーションが次々と生まれていきそうです。</p>
<p>RubyはOSX標準のものではなく、MacPortsのものを使っていたのですが、この場合RubyCocoaが使えません。その場合は<a href="http://d.hatena.ne.jp/samurai20000/20080320/1206005949">require &#8216;osx/cocoa&#8217;ができない。 &#8211; Hirameki Inspiration</a>と<a href="http://limechat.net/rubycocoa/wiki/?Build">Build &#8211; RubyCocoa wiki</a> を参考にしてインストールします。</p>
<p>2008年4月7日時点でのコマンドは、</p>
<p><code><br />
$ tar xfz RubyCocoa-0.13.2.tgz<br />
$ cd RubyCocoa-0.13.2<br />
$ ruby install.rb config --prefix=/opt/local --build-universal=no<br />
$ ruby install.rb setup<br />
$ sudo ruby install.rb install<br /></code></p>
<p>です。バージョンは変わっても、他は同じかと思います。後は通常のRailsアプリケーションのように起動すればOKです。</p>
<p>そしてこちらがiTunesRailsの画面です。</p>
<p><span id="more-26"></span></p>
<p><a href="http://rails20.jp/wp-content/uploads/5.jpg"><img src="http://rails20.jp/wp-content/uploads/5-tm.jpg" width="440" height="283" alt="ピクチャ 5.png" /></a></p>
<p>キューに入れたり、再生/停止などの操作がブラウザ上から可能です。再生中であっても画面を切り替えて操作できます。ボリュームが1単位で変えられるのが面白いです。</p>
<p>
<a href="http://rails20.jp/wp-content/uploads/21.jpg"><img src="http://rails20.jp/wp-content/uploads/2-tm.jpg" width="440" height="316" alt="ピクチャ 2.png" /></a></p>
<p>　</p>
<p><strong>itunes-rails &#8211; Google Code</strong><br />
　<a href="http://code.google.com/p/itunes-rails/">http://code.google.com/p/itunes-rails/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://rails20.jp/2008/04/itunesrails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ローカルでAmazon S3を使った開発をParkPlaceを利用して行う</title>
		<link>http://rails20.jp/2008/03/amazon_s3_development_use_parkplace/</link>
		<comments>http://rails20.jp/2008/03/amazon_s3_development_use_parkplace/#comments</comments>
		<pubDate>Wed, 26 Mar 2008 06:46:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Amazon]]></category>
		<category><![CDATA[Web API]]></category>
		<category><![CDATA[プラグイン]]></category>
		<category><![CDATA[開発]]></category>
<category></category>
		<guid isPermaLink="false">http://rails20.jp/2008/03/amazon_s3_development_use_parkplace/</guid>
		<description><![CDATA[
Amazon S3のトップページ。ここから申し込み可能。
Amazon S3はAmazonによるストレージサービスです。1バイト〜5GBまでのオブジェクトを自由に作成し、取り出し、更新、削除することができます。データベースに保存しないような、画像やファイルなどを保存するのに最適なソリューションです。
Amazon S3を使う場合、RubyにはAWS::S3という便利なライブラリがあります。これを使うとごく簡単にAmazon S3を利用することができます。Ruby on Railsでの開発の際にももちろん利用します。

AWS::S3のトップページ。使い方も書かれています。
問題はローカル環境で開発している時です。ネットワーク接続が必須なのは非常に面倒ですし、何よりAmazon S3は有料のWeb APIなので、開発しているだけで課金されてしまうのは問題です。
そこで使うのがAmazon S3クローンであるParkPlaceです。このソフトウェアはクローンとは言っても置き換えを目指すのではなく、Amazon S3を利用したソフトウェア開発を便利にするために提供されているソフトウェアになります。ここではこのParkPlaceを使った開発方法を書きたいと思います。

ParkPlaceのトップページ

必要なファイルは殆どgemで手に入ります。注意点としてはMongrelは1.0.1固定にしておく必要があるということです。1.0.2でも良いかもしれませんが、試していません。1.0.5ではエラーがありました。

sudo gem install camping --include-dependencies
sudo mongrel --include-dependencies -v 1.0.1
gem install sendfile # Windowsでない場合必要らしい

また、Amazon S3向けのライブラリもインストールします。

sudo gem install aws-s3
これで準備完了です。後はParkPlace本体をダウンロードします。これはSubversionでcheckoutするだけです。

svn co http://code.whytheluckystiff.net/svn/parkplace/trunk parkplace
そして必要に応じてbin/parkplaceを修正します。

gem 'mongrel', '&#60; 1.1'
↓
gem 'mongrel', '= 1.0.1'
これで準備は完了です。


AIR:parkplace nakatsugawa$ bin/parkplace -v
-- No RubyTorrent found, torrent support disbled.
** Please login in with `admin' and password `pass@word1'
** You should [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://rails20.jp/wp-content/uploads/8.jpg"><img src="http://rails20.jp/wp-content/uploads/8-tm.jpg" alt="ピクチャ 8.png" height="275" width="440" /></a><br />
Amazon S3のトップページ。ここから申し込み可能。</p>
<p><a href="http://www.amazon.com/gp/browse.html?node=16427261">Amazon S3</a>はAmazonによるストレージサービスです。1バイト〜5GBまでのオブジェクトを自由に作成し、取り出し、更新、削除することができます。データベースに保存しないような、画像やファイルなどを保存するのに最適なソリューションです。</p>
<p>Amazon S3を使う場合、Rubyには<a href="http://amazon.rubyforge.org/">AWS::S3</a>という便利なライブラリがあります。これを使うとごく簡単にAmazon S3を利用することができます。Ruby on Railsでの開発の際にももちろん利用します。</p>
<p><a href="http://rails20.jp/wp-content/uploads/7.jpg"><img src="http://rails20.jp/wp-content/uploads/7-tm.jpg" alt="ピクチャ 7.png" height="275" width="440" /></a><br />
AWS::S3のトップページ。使い方も書かれています。</p>
<p>問題はローカル環境で開発している時です。ネットワーク接続が必須なのは非常に面倒ですし、何よりAmazon S3は有料のWeb APIなので、開発しているだけで課金されてしまうのは問題です。</p>
<p>そこで使うのがAmazon S3クローンである<a href="http://code.whytheluckystiff.net/parkplace">ParkPlace</a>です。このソフトウェアはクローンとは言っても置き換えを目指すのではなく、Amazon S3を利用したソフトウェア開発を便利にするために提供されているソフトウェアになります。ここではこのParkPlaceを使った開発方法を書きたいと思います。</p>
<p><a href="http://rails20.jp/wp-content/uploads/4.jpg"><img src="http://rails20.jp/wp-content/uploads/4-tm.jpg" alt="ピクチャ 4.png" height="275" width="440" /></a><br />
ParkPlaceのトップページ</p>
<p><span id="more-21"></span></p>
<p>必要なファイルは殆どgemで手に入ります。注意点としてはMongrelは1.0.1固定にしておく必要があるということです。1.0.2でも良いかもしれませんが、試していません。1.0.5ではエラーがありました。</p>
<pre>
<code>sudo gem install camping --include-dependencies
sudo mongrel --include-dependencies -v 1.0.1
gem install sendfile # Windowsでない場合必要らしい
</code></pre>
<p>また、Amazon S3向けのライブラリもインストールします。</p>
<pre>
<code>sudo gem install aws-s3</code></pre>
<p>これで準備完了です。後はParkPlace本体をダウンロードします。これはSubversionでcheckoutするだけです。</p>
<pre>
<code>svn co http://code.whytheluckystiff.net/svn/parkplace/trunk parkplace</code></pre>
<p>そして必要に応じてbin/parkplaceを修正します。</p>
<pre>
<code>gem 'mongrel', '&lt; 1.1'
↓
gem 'mongrel', '= 1.0.1'</code></pre>
<p>これで準備は完了です。</p>
<pre>
<code>
AIR:parkplace nakatsugawa$ bin/parkplace -v
-- No RubyTorrent found, torrent support disbled.
** Please login in with `admin' and password `pass@word1'
** You should change the default password for the admin at soonest chance!
** ParkPlace example is running at http://127.0.0.1:3002/
** Visit http://127.0.0.1:3002/control/ for the control center.
</code></pre>
<p>で起動します。起動はmongrelを使って行い、http://localhost:3002/controlがメイン画面になります。上記に表示されているID/PWでログインできます。ここではBucketの管理やファイル一覧、アップロード/削除が可能です。</p>
<p><a href="http://rails20.jp/wp-content/uploads/6.jpg"><img src="http://rails20.jp/wp-content/uploads/6-tm.jpg" alt="ピクチャ 6.png" height="275" width="440" /></a><br />
ParkPlaceの管理画面</p>
<p>管理画面の立ち上げが確認できたら、irbベースで利用してみます。</p>
<pre>
<code>
$ irb
>> require 'rubygems'
=> false
>> require 'aws/s3'
=> true
>> AWS::S3::Base.establish_connection!(
?>                                     :access_key_id     => '44CF9590006BF252F707',
?>                                     :secret_access_key => 'OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV',
?>                                     :use_ssl => nil,
?>                                     :server  => 'localhost',
?>                                     :port => 3002
>>                                     )
=> #<aws ::S3::Connection:0x65c4d0 @secret_access_key="OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV", @options={:secret_access_key=>"OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV", :persistent=>true, :server=>"localhost", :use_ssl=>nil, :port=>3002, :access_key_id=>"44CF9590006BF252F707"}, @access_key_id="44CF9590006BF252F707", @http=#<net ::HTTP localhost:3002 open=false>>
>> music_bucket = AWS::S3::Bucket.find('moongift')
=> #<aws ::S3::Bucket:0x6029f8 @object_cache=[#<aws::S3::S3Object:0x1873060 '/moongift/Users/nakatsugawa/Downloads/parkplace/s3.rb'>, #</aws><aws ::S3::S3Object:0x1873000 '/moongift/file'>, #</aws><aws ::S3::S3Object:0x1872930 '/moongift/file2'>, #</aws><aws ::S3::S3Object:0x1872920 '/moongift/file3'>], @attributes={"name"=>"moongift", "is_truncated"=>false, "xmlns"=>"http://s3.amazonaws.com/doc/2006-03-01/"}>
>> music_bucket.objects[2].about
=> {"last-modified"=>"Wed, 26 Mar 2008 05:58:10 GMT", "connection"=>"close", "content-type"=>"binary/octet-stream", "etag"=>"ca12cb05b0da7680fd49d7fb4a516f18", "date"=>"Wed, 26 Mar 2008 06:07:34 GMT", "content-disposition"=>"", "server"=>"ParkPlace", "content-length"=>"0"}
>> music_bucket.objects[2].value
=> "require …"
>> ^C
>>
</aws></net></aws></code></pre>
<p>このようにして、通常のAmazon S3同様に利用できるようになります。アクセス権限さえ付与すれば、HTTPベースでアクセスできるのもAmazon S3同様です。AWS::S3自体の利用法については公式サイトのドキュメントを参考にしてください。</p>
<p>以上がParkPlaceの利用法になります。予想以上にAmazon S3に近く、使い勝手が良さそうです。後は接続先情報をconfig/environments/development.rbなどに記述して環境に応じて使い分けるようにすれば良さそうです。</p>
<p>参考URL</p>
<p><strong>Park Place – Trac</strong><br />
<a href="http://code.whytheluckystiff.net/parkplace/">http://code.whytheluckystiff.net/parkplace/</a></p>
<p><strong>AWS::S3 &#8211; Ruby Library for Amazon Simple Storage Service (S3)</strong><br />
<a href="http://amazon.rubyforge.org/">http://amazon.rubyforge.org/</a></p>
<p><strong>Amazon.com: Amazon S3, Amazon Simple Storage Service, Unlimited Online Storage: Amazon Web Services</strong><br />
<a href="http://www.amazon.com/gp/browse.html?node=16427261">http://www.amazon.com/gp/browse.html?node=16427261</a></p>
]]></content:encoded>
			<wfw:commentRss>http://rails20.jp/2008/03/amazon_s3_development_use_parkplace/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
