RSpec2+Rails3+autotest+mongoid and more
UKSTUDIO – RSpec2+Rails3+autotest環境の構築を見て、Growlで表示させたい!とかmongoidやfacroty_girl使いたいと色々調べたらこんな感じになりました。
しかしActiveRecordやめると大変だなー
UKSTUDIO – RSpec2+Rails3+autotest環境の構築を見て、Growlで表示させたい!とかmongoidやfacroty_girl使いたいと色々調べたらこんな感じになりました。
しかしActiveRecordやめると大変だなー
社内プロジェクトですが、サーバーサイドの知識ほとんどないボクがRuby on Railsを使ってWEBアプリケーションを構築してみた。
内容として一日の行動記録。要は日報アプリケーション。
一日のタスクとそれに費やした時間を記録。
さらに個々のdeliciousアカウントをAPIを使って読み取り、共有したいブックマークを会社のdeliciousにRepostすることができるブックマーク共有機能。
一日の感想コメントと、メッセージチェーン機能(一つ前に日報を書いた人の言葉がみれる。次の日報を送る人に一言コメントが送れる)があり、
それらを送信すると社内の日報としてメールが送信され、アーカイブを閲覧、ダウンロードできるといったものだ。
ボクは今までHTML, CSS, JavaScriptを中心にやってきたんだけど、これらはどうにも限界があった。
つまりボクの考えるWEBというものとは実は無縁の技術だったのだ。それはFlashも同じ。
端的にボクの見ているWEBにサーバーサイドがないとどれだけつまらないものになるかということだ。
mixiやYouTube、Twitter、はてな、このブログもそう。Google検索ももちろんサーバーサイドが提供してくれた。
そこでサーバーサイドをやろうと思う訳だが、JavaScriptしかプログラムのわからないボクにとってPHPはとても壁が高かった。
それこそちょこっとした1アクションくらいならPHPでなんとかする事はできるけどアプリケーションを構築するとなると、ホントお手上げ状態。
そこでフレームワークという言葉に出会う。そしてそれがRuby On Railsだったというわけ。
まずRuby on Railsの壁としてRubyという言語がある。
ドキュメントが少ない。さらに動くサーバーがない。
Rubyが動けばいいかというとそういうわけではなく、このフレームワークは敷居が高い。
ドキュメントに関しては、まずはてブのrailsタグを購読することにしたのと、本を数冊購入した。
中でも最初のRails of Ruby on Railsは良書だった。とにかくRailsに触れる・作るということに徹底していて、よくわからないけどRailsすごい!って気分にしてくれる。
ごちゃごちゃした説明はほとんど省いていて、写真や図をふんだんに使いとにかく楽しい。
初めてのフレームワークということもあり、それらの概要を感覚的につかむのにはとても良かった。それこそ一日でそのままソースを書いていけばブログができてしまった。
Rails体験ツアーって感じです。
次は「たのしい Ruby」「Rubyレシピブック」「Railsレシピブック」シリーズ。ボクのRails三原色。
楽しいRubyはRubyの文法などを知る事ができた。要はオブジェクト指向のドットシンタックスだということでJavaScriptできると似ている部分も多くためになった。
さらにRailsレシピブックはぼろぼろになるまで読んだ。ドッグイヤーしまくり。
サーバーは最終的にPassengerを使う事にした。理由は簡単だからだ。
mod_railsと言われるだけあって、PassengerをサーバーにインストールするだけでRailsの環境を構築できる。
本格的に構築するとなるとlighttpdを使った方がいいみたいですね。でもここに時間をかけるのだけは避けたかった。
社内プロジェクトなのでMac G4にPassengerを入れて運用することにした。
また、このHOKYPOKY.は海外のDreamHostを借りた。
国内でサービスとして運用したい場合はラピッドサイトのVPSなどを借りるのが良さそうだった。
Railsとは少し話がそれてしまうんだけれども、SQLiteというデータベースにも惚れた。
それこそ大規模になってきたらいろんな知識が必要になってくるとは思うのだけれど、SQLiteの手軽さといったらない。
DBを作成しなくていいとか、ファイルをコピーすればそのままデータもコピーされるとかほんとにすばらしい。
とにかくポータブルであることと、DBがどうなっているかみるのに凄く役にたった。
そしてFirefoxのアドオン、SQLite Managerにはお世話になりました。
流行というものの力にもお世話になった。要はRuby on Railsはホットなのだ。
ブックマークされているサイトたちのみんなのテンションやモチベーションが高く、新しい事への挑戦、困難な事への共有、またニュースにも話題が多いのでとにかく飽きない。
まだ正式リリースはされていないが、Rails3.0のMerbとの統合についてなどは近年のフレームワークにおいてとても興味深いニュースとなって、フレームワークを取り巻く環境全てがホットだった。
HTMLコーダーである自分がWEBアプリケーションを構築することができたのには、もちろん自分の中で興味があり挑戦していくこともあったのだが、一番は様々な人のおかげ。
特にプロジェクトとして認めてくれたマネージャーには感謝です。
また、Feedに登場してきた全てのRails関係者の皆さんにも多大な感謝。
まだまだこれから覚えていかないと行けない事も多いし、これからは自分がそういった歯車の一部になっていけるよう精進したいと思いました。
は、これから続きとして書けたらいいなと思います。
Xcode3.0をインストール
Macを買うと付いてくるディスクよりXcode3.0をインストールする。
これをいれることでMacにDevelop機能がいろいろと追加されて便利。
多少ディスクスペースはつかうものの、入れていて損はない。
CDなくした場合はAppleのサイトよりDLできたはず。
Terminal.appをつかってRails環境をインストール
Terminalをつかっていろいろインストールします。
MacPortとRubyGemという二つのインストーラを使います。
これらは登録された名前のものを呼び出すとそれをインストールしてくれるエージェントみたいなものです。
二つ使うのは野菜は八百屋、魚は魚屋みたいな感じ。MacPortはスーパー。RubyGemはRuby専門店ってとこでしょうか。
なのでMacPortはMacに関するもの。RubyGemはrubyに関するものと考えていいでしょう。
まずはMacPortをインストールしなくてはいけません (もう頭がめちゃくちゃw)
export PATH=~/bin:/opt/local/bin:/opt/local/sbin/:$PATH
~/.bash_profileを開くにはTerminalにて
$ cd ~/ $ open .bash_profile
ファイルがなかったら
$ pico .bash_profile
コピペして”Ctrl+O(オー)”、そのままEnterで保存。”Ctrl+X”で終了。
$ sudo port selfupdate
$ sudo port install rb-rubygems
$ sudo gem install rails
$ sudo gem install sqlite3-ruby
$ sudo port install ImageMagick
$ sudo gem install rmagick
サーバー編
ApacheのモジュールとしてRailsを構築
Phusion Passenger(http://www.modrails.com/)を使います。
以下http://www.modrails.com/install.htmlより抜粋
$ sudo gem install passenger $ sudo passenger-install-apache2-module
Press Enter to continue, or Ctrl-C to abort. > Enter (省略) Press Enter to continue. [Enterを押す前に] 1. 上の太字をコピー(LoadModule〜という白い3行のやつ) 2. Finderにて"Shift+Cmd+G"して/etc/apache2と入力httpd.confを開く 3. LoadModuleといっぱい書かれている下に(1)をペースト。 4. Terminalに戻る > Enter
最後までいったら”Ctrl+D”でターミナル終了
NameVirtualHost *:80ServerName localhost DocumentRoot /Users/ユーザー名/Sites/public_html ServerName アプリ名(半角英数) DocumentRoot /Users/ユーザー名/Sites/アプリ名/public
Terminalにて
$ cd /etc $ sudo pico hosts
127.0.0.1 localhostの行の後ろに”(半角スペース)アプリ名”を入れます。そのまま保存
これはlocalhostとURLバーに入れた場合は普通にpubli_html内サーバールートとして動きます。
そしてアプリ名をURLバーに入れるとrailsフォルダ内がrailsアプリとして動きます。
127.0.0.1というIPが「自分」という暗黙のルールになっていて、
/etc/hostsというファイルにてlocalhostはこのIPに予約されていて、「アプリ名」もこのIPに予約。
(ちなみにここにgoogle.comといれるとgoogleではなく自分のpublic_htmlが表示される。)
$ sudo apachectl -t> Syntax OKと表示されたら $ sudo apachectl restart
railsでhello world
VirtualHostにてSites/アプリ名/publicとしたので、今回はhelloWorldというアプリを作成しましょう。
httpd.confに以下を追加。
ServerName helloWorld DocumentRoot /Users/ユーザー名/Sites/helloWorld/public
では最速で作っていきます。
Terminalにて
$ cd ~/Sites //サイトフォルダに移動 $ rails helloWorld //helloWorldアプリ作成 $ cd helloWorld //helloWorldに移動 $ ruby script/generate contoller HelloWorld //HelloWorldコントローラー作成
Finderにてサイトフォルダ内にhelloWorldができていると思います。
また、helloWorld内にapp/controllers/hello_world_controller.rbができているのでこれを編集します。
class HelloWorldController < ApplicationController def index @message = "Hello World" end end
以上に内容を差し替える。
これはHelloWorldの挙動を指定するところで、
def indexは単純にhello_worldでアクセスされたときに表示する挙動
@message = “Hello World”はView(後述)でmessageを呼ぶとHello Worldとして表示されます。
次にViewを作成します。
アプリ/app/viewsにhello_worldフォルダ内にindex.rhtmlを作成します。
とだけ入力して保存。
見てみましょう。
Terminalにて
$ cd /etc $ sudo pico hosts 127.0.0.1 localhost helloWorldと編集 $ sudo apachectl restart
http://helloWorld/hello_worldにアクセスする。
これでrailsが動いているところまで確認できました。
作ってみたもの
BLOG v.1 – NIJITARO.labs
本のコピーだけだったけど、Railsの概要を掴むのが大変だった。
大部わかったけど、細かいところはまだまだだな。
ただコピーだけだとつまらないのでIDEを使わずTextmate + Terminalのみで作成。
機能一覧
展望
Phusion Passenger使って設置してます。
それにしてもPhusion Passengerすごいね。複数のRailsアプリとかも対応してるし、設定には最初色々しらないことあったけど調べれば調べるほどすごい。
あと、テストでつくったんで、今後増やしていったアプリが重くなるようだったらOFFにする可能性は高いです。
って書いてて気になったんで調べてみた。
この記事によれば、デフォルト120秒でRails終了するらしく、複数の小さいアプリを作ってテストする場合なんかにとても便利です。
おぉ!最高!まさにボクの望んだ環境。ルートをいちいち作らなくていいしね。
それでもちょっと負荷かかるようだったらOFFにするかな。
そしてMacのポテンシャルにビビった。
テストサーバーは、Mac mini G4で動いてます。
なにげに自宅サーバーとかやってて良かった。
Rails楽しくなってきたよ。
ちなみに読んでる本はRAILS OF RUBY ON RAILS。他にも実は色々買ったけどこれが一番わかりやすいというかとっつきやすい。
技術書としては異彩を放つ方向性の本。ちょっと話変わるけど、こういう技術書は今後増えてくると思う。すげーぜ、これ。
とりあえずRailsで何ができるかを体験したく
Rails of Ruby on Rails ~Case of LOCUSANDWONDERS.COM~ という本を読みつつ少しずつ勉強はじめているのだけど、実はRails2.0から2.1になってるらしくActiveScaffoldが2.1ではうまく動かない。
「とりあえずRailsで何ができるかを体験したく」というレベルなので、本通りに行かないと完全くじけちゃいますよね。
2.1に対応するのを待っていたら実は対応していた。
というのもsvnでは非対応版しかなく、gitから入手する最新のものは対応しているという感じ。
ふむふむ。
gitをまずはインストールしなくてはいけないので
http://code.google.com/p/git-osx-installer/downloads/より自分にあったものをダウンロードしてインストール。
ボクの場合、現時点では「git-1.5.5.4-osx-leopard-intel.dmg」でした。
インストーラからインストールしたら
「2 – Setup git PATH for non-terminal programs.sh」を実行、sudoでやるといいかも。
そんであとはRailsアプリフォルダにcdして
「script/plugin install git://github.com/activescaffold/active_scaffold.git」
でプラグインインストールでできました。
よかった。これで進められる。
以上。
かなりぶっ飛んでるけどこれが最短且つ最善だと思います。
あとの道のりは1が2を使って3だけで4出来た感動さえあれば何とかなるでしょう。
Ruby on Railsは常にこのサイクルで感動し続けられるから面白い。
ボクがオランダに住んでいたことがあったからか.nlドメインやAmsterdamという言葉があるとどうも親近感が湧くし、応援したくなる。そして自分もそこの一員になりたくなる。
ということでずいぶん悩んだ。
何に悩んだかというとRuby vs Pythonです。
Rubyは日本人が作った。
Pythonはもとをたどればオランダで作られた言語です。
これはPythonっしょ!YouTubeもPythonらしいし!とか思ってた時期もありました。
でもPhusion Passenger a.k.a. mod_railsというものをオランダで作られていることが分かったので試してみる。
これはRubyOnRailsをApacheのモジュール化したものだ。
こいつはやべぇ。とにかくやべぇ。環境がぐっと近づいた。
MongrelとかをProxyBalancerでごにょごにょしなくてもいい。
とにかくやべぇんだ。
インストール手順も超シンプル。
下準備
・Xcodeをインストール。これはMac買ったときについてるCDからインストール
・gemとかつかえるようにする。これはなんとかする。多分検索すれば一発。
インストール
・http://www.modrails.com/install.htmlへアクセス。
・ターミナルを開く。
・そこに書いてあるgem install passenger
を実行。
・続けてpassenger-install-apache2-module
を実行。
・apache2.confをいじる。FInderでCmd+Shift+Gを押すとでてくるポップアップウィンドウに「/etc/apache2」を入力するとでてくる。
・DocumentRootとVirtualhostを設定すればOK。あとの細かい設定はあとででいい。
設定したドメインにアクセスすればアプリ起動してるよ。
とにかくやべぇ。