2013年6月10日月曜日

GAE で複数のアプリを1つにまとめる

Google App Engine は無料で使える Web アプリのホスティングサービスです。
データベース(data store)やユーザ認証などのサービスが付いています。
サーバサイドの言語として Python, Java, Go, PHP が使えます。

Google App Engine - Google
https://developers.google.com/appengine/?hl=ja

ただし、無料アカウントの場合は 10 個までしかアプリを作成できません。
ちょっとしたミニゲームやツールを次々に公開していては、
すぐに 10 個を超えてしまいます。

そこで、ミニゲームやツールをまとめて 1 つのアプリ内に配置するのがお勧めです。
1 つのアプリ内に複数のディレクトリを作って、リクエストされたURLパターンから振り分けることができます。

ただし、GAE では 1アプリに付きデータベースが 1 つしか使えません。
単純なランキングなら1つのデータベースにまとめていれてしまっても問題ないのですが、複雑な操作をする場合は別のアプリとして独立させたほうが良いでしょう。

以下、実際に1つのアプリ内に複数アプリを共存させる方法です。


ディレクトリの配置

今回は okanoworld というアプリ内に複数のアプリを共存させてみます。
okanoworld 直下に複数のミニゲームディレクトリを置きます。
ミニゲームとは別に sever というディレクトリを作っておきます。

okanoworld の中に reversi3ds を配置



URLによる振り分け

app.yaml の header: ディレクティブでURLパターンとファイルパスを関連付けます。
http://okanoworld.appengine.com/アプリ名
でアプリのファイルが参照できるようにします。

app.yaml
application: okanoworld
version: 1
runtime: go
api_version: go1

handlers:

# リバーシ for 3ds
- url: reversi3ds
  static_files: reversi3ds/index.html
  upload: reversi3ds/index.html
- url: /reversi3ds
  static_dir: reversi3ds

# アプリその2
......

url に reversi3ds を指定することで http:okanoworld.appspot.com/reversi3ds に対する設定ができます。
まず、 reversi3ds をリクエストした時に index.html が表示されるように設定しています。
更に、画像ファイルなどのリソースへアクセスできるようにディレクトリ自体を static_dir に設定しています。


リソースの参照

アプリ内で画像などのリソースを読み込む場合は、
先ほど設定した URL パターンに合わせて以下のように書く必要があります。
<img src="/reversi3ds/hoge.png" />

これは <base> で相対パスの基準を変えることによって、簡単に出来ます。
<head>
    ...
    <base href="/reversi3ds/">
    ...
</head>
<body>
    ...
    <img src="hoge.png" />
    ...
</body>

GAE 以外からアプリを持ってきた場合、<base> を加えるだけでいいので楽ちんです。
以上で複数のミニゲームやツールを1つのアプリにまとめることができました。

0 件のコメント:

コメントを投稿