GAE+PHP/Rubyで拓く新世界

第3回 SQL4GでGAE+Railsを体験しよう

萩原 巧
リトルソフト株式会社

中越 智哉
株式会社ナレッジエックス

2010/2/23

Web アプリケーション開発者にとって、魅力的な環境に映るGoogle App Engineだが、データの永続化などで落とし穴が存在する。これまでの開発手法を変えずに使えないだろうか(編集部)
- PR -

 第2回「SQL4GでGAE+PHPを体験しよう」では、SQL4Gを使って、Google App Engine(GAE)環境上で、PHPアプリケーションを動作させるまでを解説しました。

 今回は、GAE上でRailsを使用して、リレーショナルデータベースを活用するアプリケーションを構築するための環境を準備します。

 大まかな手順は以下のとおりです。

  • GAE+Rails+リレーショナルデータベースの開発環境の設定
  • 簡単なスクリプトをRalisで作成し、動作確認

GAE+Rails環境のセットアップ

 GAE+Rails+リレーショナルデータベース環境の設定手順を説明します。Railsでの環境設定は基本的にコマンドベースになります。

 本稿では、GAE+Railsの環境設定をUbuntu 9.10で行いますが、WindowsでもCygwinなどを導入することにより、同様の環境を構築できるはずです。

 まず、JRubyをインストールしますが、これはJava VM上で動作するため、Java SE 6が必要となります。事前にJava SE 6をインストールしてください。また、セットアップに必要な一部のスクリプトがJRubyで動作しないため、ノーマルのRuby環境もインストールします。

 次に、JRubyのアーカイブ(jruby-bin-1.4.0.tar.gz)をダウンロードし、適当なディレクトリで展開します。

 例えば、ユーザーのホームディレクトリ直下に展開する場合、

$ cd
$ tar zxvf jruby-bin-1.4.0.tar.gz

と、コマンドを実行します。

 JRubyの実行ファイルに対して、実行パスを設定しておきます。Ubuntuの場合、~/.bashrcに以下のような記述を追加します。

export PATH=$PATH:$HOME/jruby-1.4.0/bin

 設定の反映は、以下のコマンドを実行します。

$ source ~/.bashrc

 では、JRubyの起動を確認しましょう。

$ jruby -v

 以下のように表示されれば起動は成功です。

jruby 1.4.0 (ruby 1.8.7 patchlevel 174) (2009-11-02 69fbfa3) (Java HotSpot(TM) Client VM 1.6.0_16) [i386-java]

 続いて、今回の環境に必要な、以下のgemをインストールします。バージョンが変わると動作が変わってしまう可能性があるため、今回は「-v」オプションでバージョンを指定してインストールしています。

  • Ruby on Rails (2.3.5)
  • google-appengine (0.0.9)
  • activerecord-jdbch2-adapter (0.9.2)
●railsのインストール
$ jruby -S gem install rails -v 2.3.5
●google-appengineのインストール
$ sudo gem install google-appengine -v 0.0.9
【お詫びと訂正(2010年3月5日)】

google-appengineのインストールを行うコマンドのオプション指定に誤りがありました。お詫びして訂正いたします。
誤:$ jruby -S gem install google-appengine -v 0.0.9
正:$ sudo gem install google-appengine -v 0.0.9

●activerecord-jdbc-adapterのインストール
$ jruby -S gem install activerecord-jdbch2-adapter -v 0.9.2

 上記のコマンド例にあるように、JRubyでは基本的に各種コマンドの実行は「jruby -S」に続けて行います。こうすることで、CRuby(オリジナルのRuby実行環境)と区別して実行できます。

簡単なRailsスクリプトを作成しよう

 簡単なサンプルアプリケーションを作成して、JRuby+SQL4Gの動作確認をしましょう。デプロイ用のGAEアカウントの取得方法はPHP編と同様です。

 まず、通常のRailsアプリケーションと同様に、railsコマンドでアプリケーション用のディレクトリ構造を作成します。

$ jruby -S rails sql4gtest

 続いて、動作確認用の簡単なModel/Controllerクラスを作成します。ここではno(社員番号)、name(氏名)、dept(部署)というカラムを持つemployeeテーブルに対するModelクラスと、それを操作するためのControllerクラスを作成します。

●Controllerクラスの作成
$ cd sql4gtest
$ jruby script/generate controller Sample
●Modelクラスの作成
$ jruby script/generate model Employee

 生成されたファイルのうち、app/controllers/sample_controller.rbを、次のように編集します。このコントローラは、SQL4Gに対してテーブルとデータを設定します。

●app/controllers/sample_controller.rbを編集
require 'java'
class CreateEmployees < ActiveRecord::Migration
    def self.up
        execute <<-"EOF"
create table employees (
    id integer not null default 0 auto_increment primary key,
    no integer,
    name varchar(255),
    dept varchar(255),
    created_at timestamp,
    updated_at timestamp
)
        EOF
    end
end

class SampleController < ApplicationController
    def index
        @employees = Employee.all
        respond_to do |format|
            format.html # index.html.erb
            format.xml  { render :xml => @employees }
        end
    end

    def up
        CreateEmployees.up
        Employee.create(:no=>1,:name=>"ながお",:dept=>"開発部")
        Employee.create(:no=>2,:name=>"はぎわら",:dept=>"技術部")
        Employee.create(:no=>3,:name=>"なかごし",:dept=>"教育部")
        redirect_to :action=>:index
      end
end

 さらに、app/views/sample/index.html.erbというファイルを作成します。

●app/views/sample/index.html.erb
<html>
<body>
<h1>Listing employees</h1>

<table>
    <tr>
        <th>No</th>
        <th>Name</th>
        <th>Dept</th>
    </tr>

<% @employees.each do |employee| %>
    <tr>
        <td><%=h employee.no %></td>
        <td><%=h employee.name %></td>
        <td><%=h employee.dept %></td>
    </tr>
<% end %>
</table>
</body>
</html>
 
1/3
next

Index
SQL4GでGAE+Railsを体験しよう
  Page1
GAE+Rails環境のセットアップ
簡単なRailsスクリプトを作成しよう
  Page2
サンプルアプリケーションをGAE+SQL4Gに対応させよう
environment.rbを書き換える
database.ymlを書き換える
Gemfileに設定を追加
SQL4G/データベースアクセス関連ライブラリの配置
jruby-rackライブラリのアップデート
  Page3
ローカル環境での動作確認
GAE上へのデプロイ

index GAE+PHP/Rubyで拓く新世界

 Coding Edgeお勧め記事
いまさらアルゴリズムを学ぶ意味
コーディングに役立つ! アルゴリズムの基本(1)
 コンピュータに「3の倍数と3の付く数字」を判断させるにはどうしたらいいか。発想力を鍛えよう
Zope 3の魅力に迫る
Zope 3とは何ぞや?(1)
 Pythonで書かれたWebアプリケーションフレームワーク「Zope 3」。ほかのソフトウェアとは一体何が違っているのか?
貧弱環境プログラミングのススメ
柴田 淳のコーディング天国
 高性能なIT機器に囲まれた環境でコンピュータの動作原理に触れることは可能だろうか。貧弱なPC上にビットマップの直線をどうやって引く?
Haskellプログラミングの楽しみ方
のんびりHaskell(1)
 関数型言語に分類されるHaskell。C言語などの手続き型言語とまったく異なるプログラミングの世界に踏み出してみよう
ちょっと変わったLisp入門
Gaucheでメタプログラミング(1)
 Lispの一種であるScheme。いくつかある処理系の中でも気軽にスクリプトを書けるGaucheでLispの世界を体験してみよう
  Coding Edgeフォーラムフィード  2.01.00.91


Coding Edge フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Coding Edge 記事ランキング

本日 月間