Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

Curl+JRuby+Google App EngineでTwitter風アプリを作る
~GAE編~

最終回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2009/09/30 14:00

 前回作成したローカル環境のJRuby on RailsをGAE上に持っていきます。クラウド上に作成したアプリとCurlクライアントをつなぐことで、Ruby on Rails + Curlを実現します。

目次

はじめに

 今回は、前回作ったTwitter風アプリをGoogle App Engineで動くように改造していきます。

 Google App Engineは単なるサーバ環境の提供ではなくデータ管理等も含む独自環境です。そのため、Ruby on Railsのアプリケーションを動かす上で大きな問題点になってくるのは、データ管理機構がRDBではないことです。

 GAEのデータ管理機構「Datasotre(BigTable)」は基本的には Key-Value ストアです。一応、RDBのようにテーブルや行列という概念を持っており、RDB同様に行単位でデータの読み書きを行え、上位ライブラリではSQL風言語もサポートしています。しかし、基本はKey-Value ストアであり検索で指定できる条件は限られています。リレーション(join)等もありません。

 Ruby on Railsの高生産性を支えている大きな要素は、RDBを簡単に扱えるO/RマッパーActiveRecordと、それに連携したテンプレートActionViewやコントローラーActionControllerのコンビネーションです。しかし、ActiveRecordは完全にRDBに依存した設計のため、Datasotreを扱う事はできません。従って現時点では、GAE上で動くRuby on Railsアプリを作るのは簡単ではありません。

 そういった点の回避策も含めて、GAE上でRailsアプリを動かし、Curlクライアントと連携していく手順を見ていきましょう。

GAE環境のインストール

 今回使うrails_on_gaeですが、筆者のWindows環境では正しく動作しませんでした。今回はMac OS XやLinux等のUNIX系OSを使う前提で、環境構築などを説明していきます。

Google App Engine SDK for Javaのインストール

 Downloads - Google App Engine - Google CodeからGoogle App Engine SDK for Java(2009年9月30日時点は appengine-java-sdk-1.2.5.zip )をダウンロードし、適当な場所(例えば /usr/local/appengine-java-sdk-1.2.5 )に展開します。また、展開した中の binディレクトリをPATHに追加します。

WAR作成ツールのインストール

 gemでインストールします。

% sudo  jruby -S gem install warbler  --no-ri --no-rdoc

GAE/J用のRailsアプリを作る

 GAE/J上で動かすには、Ruby on Rails自体やGAEのAPIをアクセスするためのライブラリが必要になります。これらの設定を行ってくれるrails_on_gae プラグインが、technohippy さんによりtechnohippy's rails_on_gae at master - GitHubにて公開されてます。これを使うと簡単にGAEで動くJRuby on Rails環境が簡単につくれます。

 ここでは jtinytterとういプロジェクトを作成します(この作業は時間がかかる場合があります)。

% jruby -S rails jtinytter
% cd jtinytter
% jruby -S script/plugin install git://github.com/technohippy/rails_on_gae.git
% jruby -S rake gae:init
% cp /usr/local/appengine-java-sdk-1.2.5/lib/user/appengine-api-1.0-sdk-1.2.5.jar  lib

GAE向けにソースを書き換える

 最初に説明したようにGAEではActiveRecordが使えませんので、 GAEのDatastoreを扱えるモジュールを使ってモデルを書き換えます。今回はモデルのみの変更で済むように工夫しています。従って、コントローラー、テンプレート等は前回作ったものからコピーしてください。

 Datastoreの操作については、JRubyから直接DatastoreのJava APIを呼び出す事もできますが、今回は上記のインストールで入手できる「Bumble」というモジュールを使います。このモジュールはOla Biniさんの作ったモジュールで、Datastore の機能をRubyから簡単に使えるAPIと、Rails風の関連機能(has_many、belongs_to)を追加したシンプルなものです。ソースコードはここで見れます

 書き換えの内容については次ページ以降で解説していきます。

サンプルソースについて

 こちらよりサンプルソースをダウンロードできます。なお、サンプルソース実行にあたってはライセンスファイル「curl-license-5.dat」が必要になります。Curl IDEなどに含まれているので、コピーして使用してください。

前回サンプルソースのお詫びと訂正

 前回のサンプルソースですが、データベースの設定ファイルが間違っていました。お詫びして訂正します。

 JRubyで動かすにはconfig/database.yml ファイルには「jdbcsqlite3」を指定する必要がありました。config/database.ymlファイルの4行目を以下のように修正してください(※現在公開されているサンプルソースは修正済みです)。

#adapter: sqlite3
adapter: jdbcsqlite3

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 吉田裕美(ヨシダユウミ)

    有限会社 EY-Office 取締役 CADのベンチャー企業でCADのコア部分や図面管理システムなどの開発に従事した後、独立しJava,Ruby,PerlでWebアプリを中心に開発してきた。現在は殆どの開発はRuby on Rails。 ここ数年はソフトウェアエンジニアの教育に興味をもち、従来の...

バックナンバー

連載:Ruby on Rails + Curl
All contents copyright © 2005-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5