GAE+PHP/Rubyで拓く新世界

第7回 GAE+SQL4GでRailsアプリ開発(リベンジ編)

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

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

2010/8/17

実サイトに近いアプリをデプロイしてみる

- PR -

 連載第5回では、2つのテーブルを操作するごく小規模なアプリケーションを作成、実行してみました。当時は残念ながらGAE上ではまともに動作させられずに終わってしまいましたが、今回の環境であれば普通に動作させることができるはずです。しかしそれだけでは少々物足りない感じもしますので、ここでは実際にRailsで稼働しているサイトを例に、その主要機能を抜粋したものをGAEで動かしてみましょう。

 今回、例としてあげるサイトは、筆者(ナレッジエックス)が開発に協力している「green pedal map」という自転車愛好家のための地図情報サイトです。

 このサイトはRuby on Railsで構築されており、Google MapsのAPIを利用して自転車で巡りたいスポットやサイクリングのためのルートの情報などをみんなで登録し共有することができるようになっています。Google MapsのAPIはあくまでも表示にのみ利用されており、データの永続化はRDBMSによって行われています。

ちなみに、今でこそ同種の機能はGoogle Mapsのマイマップ機能などでも実現されており、この仕組み自体が目新しいわけではありませんが、このサイトは前身となる旧サイトを含めると、2005年ごろから稼働しています。2005年といえばRuby on Rails自体のバージョン1.0が出たばかりの年であり、Google MapsのAPI利用もそれほど多く行われていなかった時期です。当時は筆者自身が開発に関わっていたわけではありませんが、当時としては非常に先進的な試みであったと思います。

 さて、今回はこのサイトの主要機能であるスポットおよびルートの登録・閲覧を抜き出して、GAE上で稼働させてみました。全機能をそのまま稼働させるという選択肢もあったのですが、GAE上で稼働させるとインターネット上に実サイトと同じダミーのサイトができることになり利用者の混乱を来す可能性があることなどを考慮し、主要機能の抜粋とさせていただきました。

なお、テストサイト上に表示されるアイコンや画像については、green pedal mapの運営主体であるNPO法人グリーンペダル様のご厚意で実サイトのものをそのままお借りしています。

 とはいえ、個々の機能そのものは、実サイトのものとほとんど変わりませんし、ソースコードも抜粋のために削った以外には特に大きな変更をしておりません。

 上記の手順通りにGAE用に変換して実際にデプロイしてみましたが、以前の連載時と違い、ローカルではもちろんですが、GAE上でも問題なく動作することが確認できました。筆者がデプロイを行ってみたテスト用のサイトが下記にありますので、興味がおありの方は是非お試し下さい。以前の掲載時(連載第3回、第5回)と比べても、体感速度で分かるくらいにレスポンスが良くなっています。

●テスト用のサイト
http://kx-gmaptestapp.appspot.com/

リベンジ(?)成る

 ということで、なんとかGAE上でそれなりの機能を持ったアプリケーションが動作できることが確認できました。SQL4Gのチューンアップ・エンハンスはもちろんのこと、GAE上でのJRuby環境の性能改善、GAE自身のパフォーマンスアップなどが総合的に貢献し、RailsアプリであってもPure JavaのGAEアプリケーションと比べてもそれほど引けを取らない体感速度が実現できることがお分かり頂けたと思います。ここからは皆さんのアイデアで、もっといろいろなRailsアプリをGAE上で動かしてみてください。この連載をきっかけに、GAEでRailsを活用される方がより多くなれば幸いです。

GAEやSQL4Gの今後の展開について

 今回で連載が終了します。最後に、GAEやSQL4Gのロードマップなど今後の展開について簡単に紹介します。

GAEのロードマップについて

 Googleのサービスを支えているのと同じスケーラブルなインフラ上で、さまざまな機能を享受することができるGAEですが、最近行われたGoogle I/Oでの発表によれば、さらに多彩なサービスが提供される予定です。

 2010年第4四半期以降に提供されているサービスは以下の通りです。

App Engine for Business Support
ビジネス向け、アプリケーションサポート(詳細
App Engine for Business SLA
99.9%の稼動保証
Billing
課金、請求機能
Hosted SQL
フル機能のSQLサーバ提供
Custom Domain SSL
独自ドメイン及びSSLによるGAEアプリケーションへのアクセス

 上記を考慮すると、Googleは GoogleAppsを始めとする多彩なサービスの軸をエンタープライズ領域に傾けてきていると考えているのは筆者だけではないと思います。

 また、GAEのSDKにおいては最近のバージョンアップにより、OpenIDとOAuthによる認証が実験的ながらサポートされるようになりました。これにより、例えばOAuth認証を使用するTwitterのAPIの活用など、Webサービスの領域にもその可能性を広げてきていて、ますますGAEは目が離せない存在となっていきそうです。

SQL4GとGAEについて

 Googleが提供予定のサービスは確かに魅力的なものではありますが、サービスのスタートアップ時には、そこまで濃厚なケアは必要ないとお考えになる方も多いでしょう。そこで一例ですが、以下のような運用パスもSQL4Gなら容易に実現できます。

・ビジネスやサービスのスタートアップ時には完全無料で使いやすいSQL4G + ノーマルのGAEを活用する。

・ビジネスやサービスの進展と共にGoogle が提供する SLA、SSL等の高付加価値サービスを使用する。

 または、GAEに頼らない別の方法で運用を行う。

 連載の中で何度か述べましたが、SQL4GはH2DataBaseをベースとしたPureJavaデータベースサーバなので、OracleやMySQLをはじめとする各種RDBMSへのマイグレーションも容易です。これは、SQL4G自体が優れた可搬性を持っているが故の大きなアドバンテージといえます。

 SQL4Gの優れた可搬性とGoogleが提供する各種高付加サービスの組み合わせにより、SQL4G/PHP4Gの活躍の幅はさらに広がっていくと筆者は確信しています。

SQL4Gのチューニングについて

 2月の初回連載から半年が経ち、「クラウド」を取り巻く環境は成熟に向かってその歩みを速めていますが、その間、SQL4Gはたゆむことなくバージョンアップを重ねてきました。

 オリジナルのH2DataBaseで不要となるクラスタリングや各種ファイルシステムの機能のソースを削除することによる軽量化や、不要なメソッドコールの削除を行うとともに、H2DataBaseのストレージI/O部分をBigtableに最適化(※)するよう大幅な書き換えを行いました。

(※)最適化に関する部分について詳細に述べるとそれだけで数回の連載に匹敵してしまうので簡単に述べると、オリジナルのDatabaseクラス(org.h2.engineパッケージ)をInterface化し、Databaseをimplementした新規クラスにBigtableに最適化した実装をスクラッチで書き起こしました。

 その結果、SQL4G本体のファイルサイズは約8MBから1.5MBに、また、スピンアップ時間は約5秒から1秒へと大幅に軽量化、高速化しました。もちろんSQL発行に対する応答時間も改善しています。

 SQL4Gを利用した弊社のクラウド・サービス「グループスケジューラー」の性能テストでは、20万件格納させたテーブルに対する問い合わせをはじめとするアプリケーション操作も十分な速度で問題なく動作していました。参考ですが、1テーブルに80万件のデータが格納されていてもSQL4Gがハングアップすることはありませんでした。

SQL4Gのロードマップについて

 さまざまなチューニングによって、この半年でSQL4Gは大きく性能を向上し、GAE+SQL4G というインフラは完全に実用段階に入ったといっても過言ではありません。

 今後はさらなる性能向上を目指すことは言うまでもなく、バックアップ/リストア機能をなど、エンタープライズの領域においても十分に使える機能を追加する予定です。

 また、PHP4Gにおいても第6回の連載で述べたように、さらなる機能の向上を予定しています。

最後に……

 半年にわたり連載を続けてまいりましたが、今回で最終回となります。

 クラウドを取り巻く環境は「ドッグイヤー」と言われるとおり、ものすごいスピードで進化を遂げています。数年後のサーバ環境は現在のものからは想像が付かない世界となっているかもしれません。そのときは、私たちエンジニアやユーザーの誰もがハッピーになれる世の中になっていることでしょう。

 いままでお付き合いいただき誠にありがとうございました。

prev
2/2

Index
GAE+SQL4GでRailsアプリ開発(リベンジ編)
  Page1
google-appengine gemのバージョンアップ
google-appengine gem 0.0.15でのセットアップ手順
  Page2
実サイトに近いアプリをデプロイしてみる
リベンジ(?)成る
GAEやSQL4Gの今後の展開について
GAEのロードマップについて
SQL4Gのロードマップについて
最後に……

 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 記事ランキング

本日 月間