愛と勇気と缶ビール

ふしぎとぼくらはなにをしたらよいか

無料かつ(おそらく)最速であなたのWebアプリケーションを世界に公開する方法

無料なのは間違いないが、(おそらく)最速にしてあるところがミソ。


魔法使いに必要なもの

  • 基本的なRubyの知識
  • 基本的なhttp, htmlに関する知識
  • Googleアカウント

魔法使いに必要でないもの

前提

そんじゃあ始めます。俺の環境がLinuxなので、WinやMacを使ってる方は適宜読み替えてね。



1、まずGoogle App Engineのアカウントを取得する。アプリケーションを適当に登録する。


Googleのアカウントがない人はまずそこから。既に持ってる人はGoogle App Engineに登録するだけ。特に説明することはない。アプリケーションを登録し、ID(app id)を控えておくこと。



2、Google App Engine SDK for Javaをダウンロード、インストールする。


これもあまり問題ないと思われる

http://code.google.com/intl/ja/appengine/downloads.html

以下、~/gae/sdkSDKがインストールされており、~/gae/sdk/binにPATHが通してある前提で。



3、JRubyおよびSinatraの実行環境を用意する。


これを自分でやると面倒なので、エラい人の肩に乗っかります

http://jugyo.org/blog/3388

基本的にはこのページ上部に貼ってある、githubのページに飛んで

http://github.com/jugyo/sinatra_on_gae/tree/master

中の上あたりに「fork」「watch」「download」のボタンがあるので、downloadをクリッコしてzipファイルを落とす → そいつを展開 → 展開したディレクトリを例えば ~/gae/app とする。

~/gae/app 以下に、README.text(f)ileってファイルとWEB-INFというディレクトリがある状態が、正解。


ちなみにWEB-INFの中身はこうなってる

  • app.rb・・・サンプルアプリ
  • appengine-web.xml, web.xml・・・App Engine用の設定ファイル
  • gems・・・Webアプリに必要なRubygem置き場。デフォルトではrackとsinatraが入ってる
  • lib・・・appengine(hogehoge).jar, jruby-core.jar, jruby-rack(hogehoge).jar, ruby-stdlib.jar等。要は、App Engine上でJava+JRubyを動かすための.jar詰め合わせ

つまり、WEB-INF以下にいわゆるJava実行環境以外のものが全部突っ込んであるってこと。Google App Engine(以下GAE)ではAmazon EC2みたいにサーバインスタンスを一個まるまる借りるわけではないので、「サーバにJRubyをインストールし、それを使う」なんてことはできない。だから、アプリケーションに必要なものは全て特定のディレクトリにぶち込み、それらをまるごとGAEにアップロードする形になる。(chroot jailみたいなイメージ。全然違うけど。)


なので、アプリケーションでrubygemを使いたい場合は、gem install -i ~/gae/app/WEB-INF/gems "gemname" --no-rdoc --no-ri のようにして、WEB-INFの下のgemsディレクトリにgemを直接ぶち込み、一緒にアップロードする。アップロードできるファイルの数に制限があるので、gems以下にできたbinとかcasheとかdocディレクトリには富竹さんと同じ目にあってもらう。



4、設定ファイルをちょちょいとイジってアップロード


appengine-web.xmlの以下の部分を自分のapp idに合わせて改訂

[Your Application Identifier]



で、appcfg.sh update ~/gae/app



これであなたのアプリが、http://[Your Application Identifier].appspot.com/にデプロイされましたとさ。



Google先生「あとは俺にまかせて、お前は先に行け!」



ちなみに情報系ボンクラ修士2年でGAEを全く触ったことがない俺は30分くらいでサンプルアプリのデプロイに成功しました。ハードウェアを用意する手間(Google先生が低減)、実行環境を用意する手間(jugyoさんにより低減)、アプリを作成する手間(Sinatraにより低減)、デプロイする手間(Google先生がry)、それらを合算すると他の方法に比べて(おそらく)最速なのではないでしょうか。



同梱されてるSinatraのサンプルアプリはこんな感じ


require 'rubygems'
require 'sinatra'

get '/' do
 'Hello World!!'
end


これだけで、/(アプリのルートディレクトリ)にhttp GETをかけると"Hello World!"と返すアプリになります。Railsのガチムチっぷりと比べると、おそろしいお手軽さ。そのうちSinatra本体についてもなんか書きます。


http://www.sinatrarb.com/