gihyo.jp » DEVELOPER STAGE » 連載 » Ruby Freaks Lounge » 第16回 Google App Engine上でRailsを動かす

Ruby Freaks Lounge

第16回 Google App Engine上でRailsを動かす

はじめに

前回はGoogle AppEngine(GAE)の概略と,GAEとRailsの相性は悪くはないのではないか(良いとは言い切れないところが少し苦しいですが)という話をしましたが,その結果GAEの話ばかりでソースコードもほとんど出てこない,Rubyとあまり関係のない内容になってしまいました。今回はそれを埋め合わせるべく,実際にRailsで小さなサンプルを作成してGAE上で動作させるまでを説明したいと思います。それではさっそくRubyの話に進みましょう。

RailsをGAEの上で使うために

GAEはDBとしてBigTableを使っているのでActiveRecordが使えないことについては前回書きました。それでは ActiveRecordを使っていないRailsアプリなら特別な作業をせずに簡単にGAE上で動かせるのでしょうか?結論から言うと,残念ながらそんなことはありません。GAE上で初めて公にRailsを動かしたOla Bini氏のブログ和訳)に書かれている作業には以下のようなものがあります。

  1. warblerのインストール
  2. GAEでデプロイできるファイル数は(当時は)最大で1000ファイルであったため,freezeしたRailsを含むファイル総数が1000を下回るようにActiveRecord,ActiveResource,Railties,ActionPackの一部などアプリケーションで使用していないファイルを削除
  3. GAEでデプロイできるファイルの最大サイズは10Mなので,jruby-complete.jarを規定サイズに収まるよう複数ファイルに分割
  4. appengine-web.xml,config/environment.rb,config/warble.rbなどの設定ファイルを適切に設定

2に関してはごく最近デプロイできるファイル数が3000に引き上げられたため今では問題ないようですが,Railsをfreezeするとそれだけで 1000ファイルを超えますから,当時はなかなか面倒な作業でした。また3についても,リポジトリから最新を落として来てコンパイルしてjarに固めたあとで,さらに余分な作業が発生するわけでそれなりにハードルを上げていました。

rails_on_gaeプラグインとアプリケーションテンプレート

私も前節の作業をOla Bini氏のブログに従って実際にやってみました。一応動きはしたものの,この作業をいろんな人が各自ばらばらにやるのではあまりにも時間の無駄です。ということで,いくつかの作業を自動化するプラグインを作成して共有しました。それがrails_on_gaeプラグインです。AppEngine SDK(Java),JRuby,Warblerがインストールされている環境なら,railsコマンドでアプリケーションを作成した直後にアプリケーションのルートディレクトリで以下のようなコマンドを実行するだけでGAE上でRailsを動かすための準備が完了するはずです。

rails_on_gaeプラグイン

$ script/plugin install git://github.com/technohippy/rails_on_gae.git
$ rake 'gae:init'

さらにRails2.3からはアプリケーションテンプレートという,新規アプリケーション作成後に定型的に行う作業を自動化できる仕組みが用意されていますので,上記のプラグインのインストールとrakeタスクの実行を行うアプリケーションテンプレートも作成しました。こちらを使うと,以下のようなコマンドを実行するだけでGAE上で動かすRailsアプリのひな形が完成します。

アプリケーションテンプレート

$ rails アプリケーション名 -m http://gist.github.com/103256.txt

プラグインでインストールされるライブラリ

プラグインをインストールしてrakeタスクを実行すると,先に書いた面倒な作業を自動的に行うことに加えて,いくつかの便利なライブラリがlibディレクトリ以下にインストールされます。ここではそれらのライブラリについて簡単に説明します。

appengine-jruby

GAE/J APIのJRubyラッパーで,以下のAPIをJRubyから利用できます。それぞれのAPIの詳細についてはGoogle Codeのドキュメントを参照してください。

  • AppEngine::Logger
  • AppEngine::Testing
  • AppEngine::Users
  • AppEngine::Mail
  • AppEngine::Memcache
  • AppEngine::URLFetch
  • AppEngine::Datastore

また,appengine-jrubyはAppEngine::Datastoreを利用したDatastore用のDataMapper Adapterを含みます。最新のDataMapper(0.10.0)を用意すればDataMapper APIを使用してDatastoreにアクセスできるはずです。ただし,こちらについてはまだ私の方で動作が確認できていないので, rails_on_gaeプラグインではDataMapperはインストールされません。

余談ですがappengine-jrubyの開発にはGoogleの社員が関わっているそうです。もちろんGoogleが正式に会社としてサポートしているわけではないようですが,それでもやはり少し安心感がありますよね。

Bumble

Ola Bini氏が作成したDatastoreアクセス用の簡易ライブラリです。ただしrails_on_gaeプラグインに付属するものは appengine-jrubyのAppEngine::Datastore APIを使用するように変更されています。例として,前回と同じソースコードですが,Bumbleを使用したモデルの定義は以下のようになります。

リスト1 Bumbleモデル定義例

class Blog
  include Bumble

  ds :name, :owner_id, :created_at
  belongs_to :owner, Person
  has_many :posts, :Post, :blog_id, :iorder => :created_at
end

また,Bumbleモデルの基本的な使い方は以下です。

リスト2 作成

Blog.create(:owner => @login_user, :name => 'My Blog')

リスト3 キー指定検索

Blog.get(@key)

リスト4 条件検索

Blog.all(
  {:owner_id => @login_user.id}, 
  :limit => 10, :order => 'created_at'
)

リスト5 更新

@blog.name = 'New Name'
@blog.save!

リスト6 削除

@blog.delete!

Bumbleモデルジェネレータ

ライブラリではありませんが,プラグインをインストールすると上述のBumbleモデルを簡単に生成できるジェネレータがおまけで付いてきます。以下のようにして使用してください。ただし,あくまでもおまけなので過度の期待は禁物です。

Bumbleモデルを生成

$ script/generate bumble_model Post name owner_id created_at

リスト7 生成されるモデル

class Blog
  include Bumble
  ds :name, :owner_id, :created_at
end

著者プロフィール

あんどうやすし

シーサー株式会社勤務。Google認定App Engine API Expert。まれにAS3やObjCやJavaを使うこともある,Perlが苦手なLLの人。

URLhttp://d.hatena.ne.jp/technohippy/

Wave ID:technohippy@wavesandbox.com

コメント

コメントの記入

パスサポ

多数の情報処理技術者試験対策書籍の発行実績を誇る技術評論社がお届けする,資格試験合格サイト「めざせ! 情報処理試験 パスサポ」が開設されました。

ピックアップ

サクセスストーリーに続く,快適サーバー運用管理のヒント!

データの増大,煩雑な管理,システムダウン,セキュリティなど,迫りくる課題からシステム管理者の負担を軽くするポイントを解説します。

gihyo.jp インフラエンジニア情報局

ネットワークやITにかかわるあらゆる業種で必要とされるインフラエンジニアに向けた技術情報や心構え,その魅力について多角的に紹介。

テストエンジニア ステーション

いま,ITに関わるあらゆる開発業務で注目されつつあるテスト系エンジニアをターゲットにしたコンテンツサイトを展開します。

一行クイックアンケート

gihyo.jpで取り上げてほしいネタは?

※検索はページ右上の検索ボックスをご利用ください。

その他の連載

Ruby Freaks Lounge

Rubyに関わる,執筆者自身の旬なテーマを扱った,リレー形式の連載です。

これでできる! クロスブラウザJavaScript入門

JavaScriptはウェブ制作において避けては通れない重要な言語ですが,JavaScriptに苦手意識を持たれている方は少なくないようです。 その最大の原因がクロスブラウザ対応という課題であり,本連載ではクロスブラウザ対応のテクニックを詳細に解説します。

ビジネスで成功するためのシステム運用管理のポイント

システムの多様化,技術進歩に伴い,ITシステムの運用管理の必要性が年々高まっています。本連載では,システムの運用管理とは何かについて,現場のニーズと具体的な指針を押さえながらを解説します。

2010年版SEO体得講座

本連載では,いまや企業サイトの戦略の1つとして欠かすことのできないSEOについて,最新トレンドからすぐに使えるTipsまでを紹介します。

小型Linuxサーバの最高峰 OpenBlockS 600活用指南

搭載メモリの増加,CPUクロックの向上など,あらゆる面が強化された期待の新モデルOpenBlockS 600。この記事ではOpenBlockS 600の紹介から,活用するためのさまざまなノウハウを紹介していきます。

はじめMath! Javaでコンピュータ数学

プログラミング言語入門者向けに,知っていると役立つ数学的トピックスを紹介します。簡単な演習問題と解説で,即活用できる知識を目指します。

教科書には載っていない ネットワークエンジニアの実践技術

ネットワークエンジニア,インフラエンジニアのトラブル対応には,時には「教科書通りにいかない」テクニックが必要となります。資格試験では得られないこうした実践的な技術について,実例を元に紹介します。

Googleケータイ,世に現る

2008年9月,Googleが中心となって開発されている「Android」を採用した携帯電話「T-Mobile G1」が発表されました。本連載ではT-Mobile G1を中心にGoogleケータイに迫ります。

連載一覧

gihyo.jp

  • DEVELOPER STAGE
  • ADMINISTRATOR STAGE
  • WEB+DESIGN STAGE
  • LIFESTYLE STAGE
  • SCIENCE STAGE
  • NEWS & REPORT

書籍案内

  • 新刊書籍
  • 書籍ジャンル一覧
  • 書籍シリーズ一覧
  • 新刊ピックアップ
  • ロングセラー
  • 電脳会議

定期刊行物一覧

  • Software Design
  • WEB+DB PRESS
  • Web Site Expert
  • 組込みプレス

最近のコメント