IBM®
本文へジャンプ
    Japan [変更]    ご利用条件
 
 
検索範囲検索:    
    ホーム    製品    サービス & ソリューション    サポート & ダウンロード    マイアカウント    
skip to main content

developerWorks Japan  >  Web development | Open source  >

Ruby on Rails究極指南: 第2回 Rails専用IDE「RadRails」でRailsをもっともっと快適に

developerWorks
ページオプション

JavaScript を要するドキュメントオプションは表示されません


レベル: 初級

高橋征義, Writer, ITmedia

2007年 5月 11日

いくらRailsが「less code」をキャッチコピーに使っているとはいえ、まったくコードを書かなければ何も起きません。今回は、コードを書くための環境として、Rails専用IDEである「RadRails」を取り上げます。

Rails専用IDEのRadRails

さて、いくらRailsが「less code」をキャッチコピーに使っているとはいえ、まったくコードを書かなければ何も起きません。実際にアプリケーションを作るには、コードを書くための環境が必要です。わたしはEmacs/Meadowか秀丸*を使うのが好きなのですが、それだとあまり面白みがないのと、最近ではIDE*を使わないとダメという人も少なくないようなので、ここではRails専用IDEであるRadRailsを取り上げます。

RadRailsは、JavaのIDEとして有名なEclipseをベースにRails対応の拡張を施したもので、2007年3月11日時点ではバージョン0.7.2が公開されています。現在のところ、デバッガやコード補完機能がないので、今ひとつ使うメリットが小さいような気もしますが、ほかのRails用IDE*はArachnoRubyにしろKomodoにしろ*オープンソースではありません。また、RadRailsも将来的にはデバッガや補完機能をつけるようなので、ここでは期待の意味を込めつつRadRailsを使ってみましょう。

事前に必要なJava環境

RadRailsはJavaアプリケーションであるため、実行にはJavaのランタイムが必要です。Java.comのサイトからJDKかJREをインストールしておきましょう。

RadRailsのアーカイブファイルを展開したら、radrails.exeを実行してRadRailsを起動します。起動中に使用するワークスペースを聞かれるので、Instant Railsを展開したrails_appフォルダを指定します。

既存プロジェクトの取り込み

RadRailsでは、新規プロジェクトの作成以外に、既存プロジェクトの取り込みも可能となっています。ここでは、先ほど紹介したCookbookを取り込んでみましょう。

[File]メニューの[New...]を選択すると、ウィザードの選択画面になるので(図1)、[Rails]-[Rails Project]を選択します。プロジェクト名の入力画面では「Project name」にプロジェクト名を入力しますが、ここではCookbookを取り込むので「cookbook」と指定します(図2)。さらに、既存プロジェクトの場合、「Options」の「Generate Rails application skeleton」のチェックを外します。


図1. ウィザード選択画面


図2. プロジェクト名設定画面

以上で、CookbookのコードがRadRailsで編集できるようになります(図3)。


図3. コードを開いた画面





上に戻る


新規プロジェクトの作成

今度は新規プロジェクトとして、簡単なアンケート投票システムを作ってみます。

enqueteプロジェクトの生成

先ほどと同様に、[File]メニューから「New...」を選択し、さらに[Rails]-[Rails Project]を選択します。次に、新規Railsプロジェクト作成用のダイアログで、プロジェクト名に「enquete」と入力して[Finish]ボタンをクリックすると、enqueteプロジェクトが生成されます。

データベース

続いてデータベースの作成ですが、データベースの情報を見るにはphpMyAdminを使用します(図4)。


図4. phpMyAdminのメニュー画面

Instant RailsのApacheが実行されている状態でWebブラウザから「http://localhost/mysql/」にアクセスすると、phpMyAdminのメニュー画面が表示されます。ただ、初期設定では日本語の場合に問題があるため、修正が必要です。Instant Railsのインストールディレクトリにあるphpmyadmin/lang/japanese-utf-8.inc.phpファイルの9行目を、

$charset = 'UTF-8';
  ↓
$charset = 'utf-8';

と小文字に変えてください。これで正しく表示される*ようになります。

enquete用のデータベースは、以下のような命名規則があります。

  • 開発用:enquete_development
  • テスト用:enquete_test
  • 本番用:enquete_production

まずは開発用データベースを作成します。phpMyAdminのメニュー画面で、「新しいDBを作成します」という表示の下のフォームに「enquete_development」と入力し、[作成]ボタンをクリックします。これによって、enquete_developmentデータベースが作成されたはずです(図5)。


図5. データベースの作成

テーブルの作成にはmigrationを使用します。まず、RadRailsのウインドウ下部にある「Generators」タブを選択し、左側のドロップリストで「migration」を選んで右側に「Enquete」と入力します(図6)。そして[Go]ボタンをクリックすると、db/migrate/ディレクトリ以下に001_enquete.rbファイルが作成されます。これがEnquete用のmigrationファイルです。このファイルには、反映させたいテーブルの内容を記述します。最初は単にメソッド名が書いてあるだけなので、ここに具体的な処理*を書いていきましょう(リスト1)。


図6. migrationの入力


リスト1 001_enquete.rbファイルに反映させたいテーブルの内容を記述
                
class Enquete < ActiveRecord::Migration
    def self.up
        create_table :enquetes do |t|
                t.column :title, :string, :limit => 100, :null => false
                t.column :body, :string, :limit => 200
        end

        create_table :items do |t|
                t.column :enquete_id, :integer, :null => false
                t.column :name, :string, :null => false, :limit => 100
                t.column :count, :integer, :null => false, :default => 0
                t.column :created_at, :timestamp
                t.column :updated_at, :timestamp
        end
    end

    def self.down
        drop_table :items
        drop_table :enquetes
    end
end

この内容をデータベースに反映させるには、Instant Railsから「rake migrate」を実行します。InstantRailsのメインメニューから[Rails Applications]-「Manage Rails Applications...」を選択後、[Create New Rails App]ボタンをクリックすると、cmd.exeが立ち上がります。ここで、

> cd enquete
> rake migrate
            

と実行すると、データベースにテーブルが作成されます。

phpMyAdminで確認してみましょう。画面左側のドロップリストから「enquete_development」を選択すると、enquetesテーブルとitemsテーブル、schema_infoテーブルができており(図7)、テーブルの中身を見てみると、id、title、created_at、updated_atの4つのカラムが存在するはずです。


図7. migrateの実行結果

scaffold

テーブルが完成したところで、scaffold*によってコードを生成します。画面右下で「Generators」タブを選択してから、左側のドロップリストで「scaffold」、右側に「Enquete Admin::Enquetes」と入力し、[GO]ボタンをクリックします。すると、scaffoldが実行され、enquete関連のファイルが生成されます(図8)。


図8. scaffoldの実行結果

Cookbookと同様に、再度WEBrickを立ち上げてWebブラウザで「http://localhost:3000/admin/enquetes/」にアクセスすると、scaffoldで生成された画面が表示されます(図9)。


図9. scaffoldで作った管理画面へのアクセス

選択肢の作成

アンケートの選択肢を作る場合は、先ほどと同様に「Generators」タブで「Item Admin::Items」と入力すれば、管理画面が表示されるようになります。しかし、これでは選択肢とアンケート自体の結びつきがありません。そこで、モデルクラスに変更を加えます。

まず、画面左側にある「RadRails Navigator」タブで、app/models/enquete.rbを開き、

class Enquete < ActiveRecord::Basehas_many :itemsend

のように追加します。同様に、app/modes/items.rbにも、

class Item < ActiveRecord::Base
    belongs_to :enquete
end

のように追加します。これによって、EnqueteとItemを関連づけることができました。

続いて、選択肢の管理画面でアンケートを選べるようにします。これは、views/admin/items/_form.rhtmlを編集し、Nameのtext_fieldの下にリスト2のような2行を付け加えます。これによって、アンケートが選べるようになります(図10)。


リスト2 views/admin/items/_form.rhtmlに追加する内容
                
<p><label for="item_enquete_id">enquete</label><br />
<%= select("item", "enquete_id", Enquete.find_all.collect {|e| [ e.title, e.id ] }) %></p>


図10 http://localhost:3000/admin/items/newにアクセスしてみるとアンケートが選択可能に変更されていることが分かる

投票画面の作成

実際の投票画面は、専用の新しいコントローラーVoteControllerを作成します。ここではすでにモデルが存在するので、scaffoldではなくcontrollerを使用します。「Generators」タブの左側で「controller」を選択し、右側に「Vote show vote」と入力して[Go]ボタンをクリックすると、コントローラーが生成されます。

そして、コントローラー(リスト3)とビュー(リスト4)を修正します。投票後はそのままリダイレクトで投票前の画面に戻るため、show.rhtmlと一緒に作られたvote.rhtmlは使わずそのままにしておきます。細かい説明は省きますが、rhtmlファイルがテンプレートとなります。これは、eRuby(埋め込みRuby)というフォーマットで書かれたもので、<%?%>の部分がプログラムとして実行されます。

以上の作業によって、簡単な投票フォームの完成です。


リスト3 app/controllers/vote_controller.rb
                
class VoteController < ApplicationController

    def show
      @enquete = Enquete.find(params[:id], :include=>[:items])
    end

    def vote
      @enquete = Enquete.find(params[:id])
      if !params[:id] || !params[:item] || !params[:item][:id]
          flash[:notice] = '選択してください'
          redirect_to :action => 'show', :id => @enquete
          return
      end

      @item = Item.find(params[:item][:id])
      if !@item
          flash[:notice] = '不正な入力です'
          redirect_to :action => 'show', :id => @enquete
          return
      end

      @item.count = @item.count.to_i + 1
      if @item.save
          flash[:notice] = '投票を受け付けました'
          redirect_to :action => 'show', :id => @enquete
      else
          render :action => 'show'
      end
    end
end


リスト4 app/views/vote/show.rhtml
                
<html>
<head>
  <title> <%=h @enquete.title %></title>
  <%= stylesheet_link_tag 'scaffold' %>
</head>
<body>

<b><%=h @enquete.title %></b>

<p style="color: green"><%= flash[:notice] %></p>

<%= start_form_tag :action => 'vote', :id => @enquete %>

<p>
<%=h @enquete.body %>
</p>

<p>
<% for item in @enquete.items %>
<%= radio_button("item", "id", item.id ) %><%=h item.name %>(<%=h item.count.to_i%>票)<br>
<% end %>
</p>

<%= submit_tag '投票' %>

<% end_form_tag %>
</body>
</html>




上に戻る


まとめ

ここまで、Instant RailsとRadRailsの導入法と使い方を紹介してきました。RadRailsは発展途上なこともあり、慣れたエディタの方が使いやすいというケースもあるでしょう。ただ、Railsアプリケーションの開発に挑戦するためのはじめの一歩にはなるはずです。これをきっかけに、自分の開発しやすい形を見つけてみてください。




上に戻る


このページで出てきた専門用語

Emacs/Meadowか秀丸

EmacsはUNIX系OSで、秀丸はWindows環境で代表的なエディタです。また、Meadowは、Windowsで動作するEmacs実装です。

IDE

Integrated Development Environmentの略で、アプリケーションの統合開発環境。

Rails用IDE

Railsにこだわりがないのであれば、Ruby汎用IDEであるRDEや、Eclipse+RDTプラグインを使うという選択肢もあります。
http://homepage2.nifty.com/sakazuki/rde/index.html
http://capsctrl.que.jp/kdmsnr/wiki/rdt/

ArachnoRubyにしろKomodoにしろ

以下のURL参照。
http://www.ruby-ide.com/
http://www.activestate.com/Products/Komodo/

正しく表示される

詳細は「満足せる豚。眠たげなポチ」参照。

具体的な処理

この記述にはMigration専用DSL(DSLについては今後解説)を使用します。

scaffold

データモデルに対する最小限必要な操作(追加・削除・表示・一覧・編集)を行うインタフェースを実装する機能。



参考文献



著者について

ITmedia




記事の評価


サイト改善のため、ご意見をお寄せください。こちらのフォームからお願いいたします。



はいいいえわからない
 


 


12345
不充分・不完全である大変素晴らしい
 


この記事を共有する

はてなブックマーク はてなブックマーク livedoorクリップ livedoorクリップ del.icio.us del.icio.us Buzzurl(バザール) Buzzurl(バザール) Choix! Choix!
Saafブックマーク Saafブックマーク FC2ブックマーク FC2ブックマーク MM/memo MM/memo ニフティクリップ ニフティクリップ Yahoo!ブックマーク Yahoo!ブックマーク
CZブックマーク CZブックマーク newsing newsing




上に戻る


    日本IBMについて プライバシー お問い合わせ