概要
Flashゲームでは以前はSharedObjectでゲームのセーブが出来たのですが、最近はブラウザのセキュリティでデフォルトでは一定期間で消えるようになりました。
消えるとプレイヤーから文句を言われますし、ブラウザの設定で消さないように出来ると注意書きをしても無視するプレイヤーがかなりいます。無視されなくても理解できないユーザーもかなりいます。
そのため、最近ではブラウザゲームのゲームデータの保存はサーバーで行う事が多くなりました。
また、Webで保存したデータをアプリと共有できれば、Webのユーザーをアプリに導いたりも出来ます。
ここではゲームデータの保存のためにGoogle App Engineの使い方を紹介していきます。
Google App Engine
Google App Engine(以下GAE)はGoogleのクラウドサービスで、簡単にいえばGoogleのサーバー群の上に乗って動くレンタルサーバーの様なものです。
GAEをブラウザゲームの保存に使う理由は以下の通りです。
- 無料枠があり、ゲームがヒットしなければサーバー代は無料になる
- 従量課金だがそれほど高価では無く、課金されたとしても、ちゃんと調整していれば大きな額にならないため、広告を入れておけば赤字にはならない
- 自動でリソースがスケールするので、過負荷でサーバー自体が落ちると言うことは無い
- 自分でサーバーの管理をする必要は無い
ブラウザでのカジュアルゲームの場合、初期にかなりアクセスが集中してその後はほとんど負荷が無くなることが多いです。すると最初の数ヶ月のために性能の良いレンタルサーバーを借りるのは無駄が大きくなります。GAEだとアクセスが多くても勝手にスケールし、しかもアクセスが少なくなれば無料になります。使った分だけ払えば良く初期投資などのリスクが無いので、リリース前に負荷が読めにくく安定もしないブラウザゲームにとってはとてもありがたいです。
また、アプリのデータの共有などでも全く同じ理由が当てはまります。さらにGAEはプッシュ通知などにも対応したのでアプリのデータ保存にも最適です。
ただし、もちろん問題もあります。
- 他のサーバーに後から移したくなってもそのままでは無理である
- ちゃんと課金額が大きくならないような調整をしていないとそれなりにかかる
- 集計や並べ替えといった処理が難しい
- はじめから負荷が高く一定であることが分かっているならサーバーを借りた方が安くなる場合が多い
- swfなど、容量の大きな静的ファイルは普通のサーバーに置いた方が安くなる
しかし、これらの問題はほとんどの場合、サーバー側の処理が複雑になったときに重要になるので、個人で作るカジュアルゲームなどでは気にすることはあまりないでしょう。また、知識があれば避けられる問題も多いです。
言語
対応している言語はJavaやPython、PHP、Goなどいろいろあります。国内ではJavaの情報が多いようですが、海外ではPythonも人気があります。
それ以外の言語については分かりませんが、Goは最近の言語でPHPは最近の対応なので資料が少ない事が予想されます。
カジュアルゲームのデータの保存程度ならPythonをお勧めします。
大規模開発ならJavaのような厳密な型定義やクラスのある言語の方が良いかも知れませんが、ゲームデータの保存だと少ない場合は1ユーザー1レコード、管理用の物も含めて2~3テーブル程度しかデータはありませんので、それだけのためにJavaで書くのは面倒です。Pythonだとタイプ量が格段に減ります。
また、ひょっとすると最近は改善されているかも知れませんが、開発環境であるGAEのSDKの実行速度がPythonの方がずっと速いです。よって数日で完成するようなものならPythonの方がだんぜん能率は良いです。
また、Pythonは海外では非常によく使われている歴史のある言語なので、ライブラリなどがとても充実しています。しかもその多くが最初から標準ライブラリで使えるようになっています。ただし残念ながら日本語の資料は少ないです。また、日本語処理などでは不満が出る場合があります。
言語自体の習得は簡単です。Pythonは教育用でも使われているぐらいわかりやすい上に、ゲームデータの保存程度では簡単な機能しか使いません。すでに他の言語を習得している人なら入門書を一冊読む程度で最低限の知識は得られます。
サーバー構成
GAEは転送量に応じて課金があるので、Flashゲームのように容量が大きくなる物をGAEのサーバーに置いておくのは費用面であまり良くありません。また、運用面でもGAEはFTPなどでアップロードするわけは無いので、管理がちょっと面倒になります。swfや読み込む外部画像ファイルなどは通常のレンタルサーバーに置いておいた方が良いでしょう。 GAEへはcrossdomain.xmlを使ってアクセス可能にしておきます。
こうすることで、万一アクセス数が予想以上に増えたときにもswfをホストしているレンタルサーバーを増やしたり変えたりする柔軟な運用が可能となります。もし同一のレンタルサーバーでswfのホストもデータの保存もしていると、アクセスが多いときに引っ越したりするのは少し面倒になります。
そんな事を気にするほどのアクセスが無かった、という場合にはGAEの無料範囲で収まるでしょうから、固定のサーバー代が余分にかかることもありません。
Google App Engine Launcher
GAE for pythonの開発にはGoogleの配布しているSDKを使います。SDKはコマンドラインからも使えますが、「Google App Engine Launcher」というGUIが配布されているのでそれを使うと便利です。
https://cloud.google.com/appengine/downloads
こちらでインストーラが配布されているので、インストールします。WindowsでPython2.7を入れていないパソコンの場合は、途中でPythonを入れてくださいというメッセージが出るのでそこからリンクをたどってPython2.7を入れるのを忘れないようにしてください。Macの場合は通常Python2.7ははじめから入っています。Linuxの場合は上記ダウンロードページを参考にパスなどの設定が必要です。
Eclipse
開発用のエディタとしてEclipseを使います。理由は他の言語の開発などでもよく使われるので資料が多いのと、PyDevというPython統合環境用EclipseプラグインがデフォルトでGAEをサポートしているので、テンプレートなどが用意されており便利だからです。もちろん、使い慣れたエディタで作業してもかまいません。
また、GoogleはGAEに対応したeclipse用のプラグイン「Google Plugin for Eclipse」をリリースしています。Webゲームの保存程度ならそれを使う必要は無いのここでは触れませんが、アプリ開発などではこれを使うとプッシュ通知などのテンプレートを利用できたりします。
Eclipseのインストールについては「Eclipse インストール」などで検索するとわかりやすい記事が大量にヒットすると思いますのでそちらを参考にしてください。 ちなみにEclipseはデフォルト設定だと結構遅いので、非力なパソコンの場合は「eclipse 高速化」などで検索して特にメモリ関連の設定などはすこし変更しておいた方が良いかもしれません。
PyDev
PyDevはEclipseのプラグインとして動作するPython統合環境です。
Pythonのコード補完などがそれなりに使えるようになり、GAE用のテンプレートも用意されているので大変便利です。
Eclipseへのインストールは「Help」から「Install New Software」を選び、URLにPydevの配布場所を入力します。このURLは変更される場合もあり得るので、上記PydevのサイトでEclipse plugin用のURLを確認してください。この記事執筆段階では「http://pydev.org/updates/」となっています。
Pydevを選択し、画面の指示通り進み規約などにも同意してインストールを終えます。
Hello World
ここではPydevの機能を使ってHelloWorldを表示させます。
PyDevを利用するために、Eclipse右上にパースペクティブの切り替え追加ボタンがあるので、それを使ってパースペクティブをPydevに切り替えます。
上の画像のようにPyDevが表示されていない場合は、一番左の+のあるアイコンを押すと追加できます。
EclipseのNewからProjectを選択します。
ウイザード画面では「PyDev Google App Engine Project」を選択して「Next」をクリックします。
次にプロジェクト名を入力します。 このとき、もしGrammer Versionが2.7になっておらず、選択肢にも無いときは「Click here to configure an interpreter not listed.」をクリックしてPythonのインストールディレクトリを指定する必要があります。
次にコード補完のため、GAEのインストールディレクトリを指定する必要があります。たとえばWindows7ならデフォルトで「C:\Program Files (x86)\Google\google_appengine」です。
これらの設定は後で「Project」の「Properties」からでも変更することが出来ます。
最後にapplication idとテンプレートを指定します。application idはアプリケーションを識別するIDで、Googleのサーバーで公開した場合には後から変えることは出来ません。今回はテスト用なので適当でもかまいませんが、公開するアプリの場合はわかりやすくて一意になるような名前をつけましょう。
テンプレートはHello Worldを指定します。
これでHello Worldを表示するためのプロジェクトは準備できましたので、Google App Engine Launcherで起動します。まずGoogle App Engine Launcherを立ち上げ、「File」から「Add Existing Application」を選択し、
さらに先ほど制作したプロジェクトを選択します。Portなどの番号はデフォルトで問題ありません。
一覧に追加したプロジェクトが現れるのでそれを選択し、Runボタンを押します。
無事起動したらBrowseボタンが選択可能となるので押します。
ブラウザでHello Worldが表示されるはずです。
Hello Worldプロジェクトの解説
では作成されたプロジェクトの内容を見ていきましょう。最初にアプリ全体の設定を行うapp.yamlです。
application: hello-world-app version: 1 runtime: python api_version: 1 handlers: - url: /.* script: helloworld.py
最初の行はアプリケーションのIDです。実際にGoogleに登録するときにアプリケーションを区別するために使われます。
versionはアプリのバージョンを表します。GAEでは公開したアプリのバージョンをいつでも自由に変えることが出来ます。つまり、version 1を公開してつぎのアップデートでversion 2にしたとします。しかし、不具合が見つかったのでversion 1に戻したい場合は、web上のコンソールですぐに戻す事が出来ます。
もし、versionを変えずにサーバーに登録するとソースコードが上書きされてしまい、元に戻すことは出来ません。アップデートするときはよほどささいな変更で無い限り、必ずversionを上げていくようにしましょう。そうすればいざというときにすぐに元に戻すことが出来ます。
runtimeは使っている言語環境です。ここではそのまま、pythonです。この部分は将来的にpython3などが登場する可能性があり、そのような状況を見越してpython27とバージョンを明示的に指定しておくことも出来ます。実際に公開するアプリの場合は、その方が良いかも知れません。ただし、python27を指定する場合はthreadsafeというパラメータをapp.yamlで指定する必要があります。
threadsafe: [true | false]
trueだとリクエストが同時に処理され、falseだとシリアルに処理されます。通常は処理を速くするためにtrueにして必要なリソースの部分に排他をかけます。
api_versionはGAEのAPIのバージョンです。現在は1しか無いようですので1にしておきましょう。Python3対応で2になりそうですが分かりません。
handlersはアクセスしてきたURLをどのスクリプトで処理するかを表しています。ここではルート以下全てのアクセスをhelloworld.pyで処理するようにしています。
この例はかなり単純ですが、これ以外にもスレッドの管理方法や静的ファイルの紐付けなどをapp.yamlで行います。GAEで最初に躓きやすい場所なので、簡単な例でしっかり使い方を覚えておきましょう。開発中にまったく実行すらされなくなった、という場合は大抵app.yamlに間違いがあります。 また、GAE Launcherのログボタンを押すと、エラーメッセージなどが表示されるので、何かおかしいときはそこで原因が分かる場合もあります。わからない事もあります。ちなみにログは何かの不具合か最初ウインドウが真っ白に見えるかも知れませんが、少しスクロールすると表示されます。
つぎにhelloworld.pyですが、こちらは簡単です。
print 'Content-Type: text/plain' print '' print 'Hello, world!'
1行目はヘッダでContent-Typeにtextを指定、2行目は改行、3行目は文字出力です。
以上がHello Worldプロジェクトの内容です。実際の開発ではフレームワークなどを使うのでもう少し複雑になりますが、GAEの開発の概要は理解できると思います。
もちろん、これらのファイルをEclipse以外のテキストエディタで作成し、GAEのLauncherに登録しても実行することが出来ます。
次「Google App Engine for Python その2」でGAEでデータを保存する例を紹介します。
添付ファイル:
ぺージ情報 | |
---|---|
ぺージ名 : | Google App Engine for Python |
ページ別名 : | 未設定 |
ページ作成 : | njf |
閲覧可 | |
グループ : | すべての訪問者 |
ユーザー : | すべての訪問者 |
編集可 | |
グループ : | すべての訪問者 |
ユーザー : | すべての訪問者 |