FeaturesPluginsDocs & SupportCommunityPartners

Ruby のブログを 10 分で作成

執筆: Brian Leonard、管理: Chris Kutler
2008 年 4 月
[リビジョン番号: V6.1-1]

このチュートリアルでは、NetBeans IDE での Ruby サポートを使用して、簡単なデータベース Web アプリケーションを作成し、実行します。このチュートリアルの手順に従うことで、次の作業を行う方法を学ぶことができます。

  • Rake タスクとマイグレーションファイルを使用して、データベース表を作成および更新する
  • スキャフォールドジェネレータを使用して、作成、読み取り、更新、削除 (CRUD) を行う基本的なデータベース Web アプリケーションを生成する
  • ビューを編集して Web ページを調整する

目次

このページの内容は NetBeans IDE 6.1 が対象です

このチュートリアルを完了するには、次のソフトウェアが必要です。

ソフトウェアまたはリソース 必須バージョン
Ruby サポートを含む NetBeans IDE version 6.1
MySQL データベースサーバー version 5.0

Ruby on Rails アプリケーションの作成

まず、Ruby on Rails プロジェクトを作成します。デフォルトでは、アプリケーションは、Ruby on Rails プロジェクトのアプリケーション用規則に準拠したディレクトリ構造内に作成されます。

  1. NetBeans IDE で、「ファイル」>「新規プロジェクト」を選択します。

  2. 次の図に示すように、「カテゴリ」リストから「Ruby」、「プロジェクト」リストから「Ruby on Rails アプリケーション」を選択します。

    「新規プロジェクト」ウィザードでプロジェクトの種類として Ruby on Rails を選択
  3. 「次へ」をクリックし、プロジェクトの名前と場所を指定します。
  4. 次の図に示すように、「プロジェクト名」テキストボックスに「rubyweblog」と入力します。

    このページのほかの設定はデフォルト設定のままにします。

    「名前と場所」パネルで「プロジェクト名」を rubyweblog に設定
  5. 次の条件を満たす場合は手順 8 に進みます。

    • デフォルトの root ユーザー名を使用している
    • root にパスワードが必要ない
    • MySQL データベースサーバーを使用している

    IDE では、デフォルトでこれらの条件が想定されます。

  6. 「次へ」をクリックしてデータベースアクセスを設定します。

  7. 「データベース情報を直接指定」オプションを選択し、データベースアダプタを選択し、ユーザー名とパスワードを入力します。「データベース名」は空にしておきます。

  8. 「完了」をクリックして新しいプロジェクトを作成します。

    プロジェクトと同じ名前のプロジェクトディレクトリが作成され、database.yml ファイルが編集領域で開きます。開発構成のデフォルトのデータベース名は rubyweblog_development です。

  9. 開発セクションのアダプタ、データベース、ユーザー名、およびパスワードの設定が正しいことを確認し、「database.yml」タブにある小さい「x」ボタンをクリックしてファイルを閉じます。

    database.yml ファイルの画像

スキャフォールドの作成

このブログアプリケーションは、ブログ投稿のインスタンスを保存する Post モデルに基づいています。ここでは、Rails スキャフォールドジェネレータを使用してモデルとそのコントローラ、また index (リスト)、show、new、edit の各ビューを作成します。

ジェネレータでは、モデルのデータベース表を作成するためのマイグレーションファイル、単体テスト、およびモデルテストを記述するためのフィクスチャースタブも作成されます。

  1. 次の図に示すように、「プロジェクト」ウィンドウで「rubyweblog」プロジェクトノードを右クリックし、「生成」を選択します。

    ポップアップメニューの「生成」アクションの選択
  2. 次の図に示すように、「Rails ジェネレータ」ダイアログで、「生成」ドロップダウンリストから「scaffold」を選択します。

    「生成」ドロップダウンリストの「scaffold」の選択
  3. 「モデル名」テキストボックスに「Post」と入力します。

  4. 「属性ペア」テキストボックスに「title:string」と入力し、「了解」をクリックします。

    スキャフォールドジェネレータによって作成、更新されるファイルは「出力」ウィンドウに表示されます。

データベースの作成

この節では、Rake タスクを使用して rubyweblog_development データベースを作成します。次に 001_create_posts.rb マイグレーションファイルを使用して posts 表をデータベースに追加します。

  1. 「プロジェクト」ウィンドウで「rubyweblog」プロジェクトノードを右クリックし、ポップアップメニューから「Rake タスクの実行」>「db」>「create」を選択します。

    ポップアップメニューの「create」の選択

    database.yml ファイルの定義に従って、Rake によって開発構成用のデータベースが作成されます。

    注: 「出力」ウィンドウにエラーメッセージが表示される場合は、database.yml ファイルの開発セクションにあるユーザー名とパスワードが正しいことを確認してください。また、データベースサーバーが実行中であることも確認してください。

  2. 「プロジェクト」ウィンドウで「データベースマイグレーション」を展開し、「migrate」を展開します。

  3. 次の図に示すように、「001_create_posts.rb」ノードをダブルクリックしてファイルを編集領域で開きます。

    「001_create_posts.rb」ノードのダブルクリック

    ファイルが開き、次のコード例に示すように、posts という表を作成する self.up メソッド、および posts 表を破棄する self.down メソッドが作成されます。

    class CreatePosts < ActiveRecord::Migration
      def self.up
        create_table :posts do |t|
          t.string :title
    
          t.timestamps
        end
      end
    
      def self.down
        drop_table :posts
      end
    end

    create_table メソッドはデフォルトで id 列を追加し、timestamps メソッドは created_at 列と updated_at 列をデータベース表に追加します。

  4. 次の図に示すように、「プロジェクト」ウィンドウで「rubyweblog」ノードを右クリックし、「データベースマイグレーション」>「現在のバージョンへ」を選択します。

    データベースのマイグレーション

    このアクションによってデータベースが更新され、posts 表が取り込まれます。次の図に示すように、マイグレーションが完了したら「出力」ウィンドウにメッセージが表示されます。

    「出力」ウィンドウのマイグレーションメッセージ

アプリケーションの実行

次にアプリケーションをテストします。

  1. 「プロジェクト」ウィンドウで「構成」ノードを展開し、routes.rb をダブルクリックしてエディタで開きます。

  2. 次のコメントを探します。

    # map.root :controller => "welcome"
  3. この行のコメントを解除し、次に示すようにコントローラを "posts" に変更します。

    map.root :controller => "posts"
  4. 「プロジェクト」ウィンドウで「公開」ノードを展開し、「index.html」を右クリックして、ポップアップメニューから「削除」を選択します。

    index.html ページはデフォルトの開始ページを表示しますが、これは表示したいページではありません。index.html を削除すると、Rails では表示するページが routes.rb 内で確認されます。

  5. メインメニューから「ファイル」>「すべてを保存」を選択します。

  6. ツールバーにある「主プロジェクトを実行」ボタンをクリックします。

    「主プロジェクトを実行」ボタン

    このアクションによって WEBrick サーバーが起動し、次のページがブラウザに表示されます。このサーバーは、Ruby で記述され、Ruby on Rails フレームワークに付属する Web サーバーです。

    Web ブラウザに表示されたページ

    注: 別のサーバーを使用するようにプロジェクトを構成できます。WEBrick 以外のサーバーを使用している場合は、ブラウザのアドレステキストボックスに「http://localhost:3000/posts」と入力して Enter キーを押す必要がある場合があります。

  7. 「New post」リンクをクリックして、次の図に示すアプリケーションの 2 ページ目を表示します。

    ブラウザに表示されたアプリケーションの 2 ページ目
  8. タイトルを入力し、「Create」をクリックします。

    次の図に、サンプルのブログ投稿を示します。

    サンプルのブログ投稿
  9. 「Back」リンクをクリックして投稿の一覧に戻ります。

表への別の列の追加

ここでは、各ブログエントリのテキストを保持する body 列を posts 表に追加します。

  1. 「データベースマイグレーション」ノードを右クリックし、ポップアップメニューから「生成」を選択します。

    ポップアップメニューの「生成」の選択

    「生成」ドロップダウンリストでマイグレーションが選択された状態の「Rails ジェネレータ」ダイアログが開きます。

  2. 次の図に示すように、「引数」テキストボックスに「AddBodyToPost body:text」と入力します。

    「マイグレーションの生成」ダイアログ
  3. 「閉じる」をクリックします。

    IDE によってバージョン付きマイグレーションスクリプト 002_add_body_to_post.rb が作成されます。ファイルが開き、次のコード例に示すように、body 列を追加する self.up メソッド、および列を削除する self.down メソッドが表示されます。生成されたコードで最初の引数 AddBodyToPost から表の名前を抽出している方法を確認します。

    class AddBodyToPost < ActiveRecord::Migration
      def self.up
        add_column :posts, :body, :text
      end
    
      def self.down
        remove_column :posts, :body
      end
    end
  4. 「rubyweblog」ノードを右クリックし、ポップアップメニューから「データベースマイグレーション」>「現在のバージョンへ」を選択します。

    またはソースファイルで右クリックし、ポップアップメニューから「実行」を選択します。

  5. 「プロジェクト」ウィンドウで「ビュー」>「posts」の順に展開し、「edit.html.erb」をダブルクリックしてファイルを編集領域で開きます。

  6. 次のコード例でボールドで示している文を edit.html.erb ファイルに追加します。

    また、カーソルを Title の <p> タグの前に置き、段落の末尾の </p> タグまでドラッグし、Ctrl+Shift+ 下矢印キーを押して行を複製します。TitleBody に置き換え、f.text_field :titlef.text_area :body に置き換えます。

    <h1>Editing post</h1>
    
    <%= error_messages_for :post %>
    
    <% form_for(@post) do |f| %>
      <p>
        <b>Title</b><br />
        <%= f.text_field :title %>
      </p>
    
      <p>
        <b>Body</b><br />
        <%= f.text_area :body %>
      </p>
    
      <p>
        <%= f.submit "Update" %>
      </p>
    <% end %>
    
    <%= link_to 'Show', @post %> |
    <%= link_to 'Back', posts_path %>
  7. 「new.html.erb」をダブルクリックしてファイルを編集領域で開きます。

  8. 次のコード例でボールドで示している文を new.html.erb ファイルに追加します。また、手順 6 に示したように Ctrl+Shift+ 下矢印キーを使用して Title の段落を複製し、複製したコードを編集することもできます。

    <h1>New post</h1>
    
    <%= error_messages_for :post %>
    
    <% form_for(@post) do |f| %>
      <p>
        <b>Title</b><br />
        <%= f.text_field :title %>
      </p>
    
      <p>
        <b>Body</b><br />
        <%= f.text_area :body %>
      </p>
    
      <p>
        <%= f.submit "Create" %>
      </p>
    <% end %>
    
    <%= link_to 'Back', posts_path %>
  9. 「show.html.erb」をダブルクリックしてファイルを編集領域で開きます。

  10. 次のコード例でボールドで示している文を show.html.erb ファイルに追加します。また、手順 6 に示したように、Ctrl+Shift+ 下矢印キーを使用して Title の段落を複製し、Title:Body: に、@post.title@post.body に変更することもできます。

    <p>
      <b>Title:</b>
      <%=h @post.title %>
    </p>
    
    <p>
      <b>Body:</b>
      <%=h @post.body %>
    </p>
    
    <%= link_to 'Edit', edit_post_path(@post) %> |
    <%= link_to 'Back', posts_path %>
  11. メインメニューから「ファイル」>「すべてを保存」を選択します。

  12. ブラウザに戻って「New post」リンクをクリックし、次の図のような新しい「Body」欄を確認します。

    「Body」欄がある New post
  13. さらにいくつかのブログエントリを作成します。

    終了したら、「Back」をクリックして「Listing posts」ページに戻ります。

入力の検査

ここでは Post クラスにコードを追加し、ユーザーが「Title」と「Body」の両フィールドに値を入力していることを確認できるようにします。

  1. 「プロジェクト」ウィンドウで「モデル」ノードを展開し、「post.rb」をダブルクリックしてエディタでファイルを開きます。

  2. クラス定義の中で行を追加し、「vp」と入力してから Tab キーを押します。

    vp トリガーが置換され、パラメータを使用する次のコードテンプレートに変わります。
    validates_presence_of :attribute
  3. title, :body」と入力して Enter キーを押します。このコードは次のようになるはずです。

    validates_presence_of :title, :body
  4. ファイルを保存し、ブラウザに戻り、「New post」をクリックして「Create」をクリックします。

    これで、アプリケーションで「Title」と「Body」を空白にできないことが表示されるようになりました。

    Title と Body がないことを報告するエラー

一覧をブログのような外見にする

ここでは、index.html ビューを編集して、次の図に示すようにブログ一覧の外見を一般的なブログのようにします。

変更したブログページ
  1. 「プロジェクト」ウィンドウで「ビュー」>「posts」を展開し、「index.html.erb」をダブルクリックしてファイルを編集領域で開きます。

    このビューには、ブログエントリの一覧が表示されます。

  2. <h1> 要素と <table> 要素を削除し、次のボールドで示すコードに置き換えます。

    <h1>The Ruby Blog</h1>
    <% for post in @posts %>
      <h2><%= post.title %></h2>
      <p><%= post.body %></p>
      <small>
        <%= link_to "permalink",
          :action => "show",
          :id => post %>
      </small>
      <hr>
    <% end %>
    
    <br />
    
    <%= link_to 'New post', new_post_path %>
    

    このコードは、post アクションの各インスタンスで Title、Body、および Permalink を作成します。

  3. 変更を保存し、アプリケーションを実行して Post モデルの新しいインタフェースを確認します。

  4. ブログの最新のエントリを先頭に表示するには、追加したコードを編集し、次に示すように .reverse メソッドへの呼び出しを追加して、ソート順序を逆にします。

    <% for post in @posts.reverse %>
  5. ファイルを保存してブラウザを再表示し、一覧が逆の順序で表示されることを確認します。

応用

この課題で学んだスキルを使用して、タスク一覧の Web プロジェクトを作成します。スキャフォールドジェネレータを使用して、title:string フィールドと description:text フィールドを使用して Task モデルの周りにスキャフォールドを構築します。Rake を使用してデータベースを作成し、次に「データベースマイグレーション」を使用して表を作成します。ルートを対応付けるように route.rb ファイルを編集し、index.html ファイルを必ず削除します。

次の手順



>> その他の NetBeans Ruby ドキュメント


Companion
Projects:
MySQL Database Server   Open JDK: an Open SourceJDK   GlassFish Community: an Open Source Application Server    Mobile & Embedded Community    Open Solaris   java.net - The Source for Java Technology Collaboration   Virtual Box - full virtualizer  Open ESB - The Open Enterprise Service Bus Powered by