Google App Engine

Google App Engine (GAE) は、Googleの提供するGoogle Cloudのサービスの1つであり、ウェブアプリケーションをPHP・Python・Java・Goを使用して開発し、Googleのインフラストラクチャー上で実行し、バージョン管理することができる。

 概要 
PHP用、Python用、Java用、Go用にそれぞれソフトウェア開発キット (SDK) が用意されている。Java用のSDKはSDK単体のものと、Eclipseのプラグインが同社より提供されており、Google Web Toolkitの開発と統合されている。このほか、Java用には有志によりNetBeans用とIntelliJ用のプラグインがそれぞれ作成されていて、そちらでも開発は可能である。またJavaに対応していることから、Java仮想マシン上で稼働するJython・JRuby・Scalaなども（自ら導入作業等を経れば）開発することができる。

GAE上で動くウェブアプリケーションはデータベースとして同社のBigTableにAPIを通じてデータを格納するもので、同社のインフラのスケーラビリティを利用することができる。

 他のアプリケーションホスティングとの相違 
Google Compute EngineやAmazon EC2などのスケーラブルホスティングサービスと比較すると、GAEのインフラの方がよりアプリケーションを作成しやすいが、実行できるアプリケーションの種類は限定される。

GAEのインフラにより、数百万ヒットまでスケールするアプリケーションを作成するための開発・運用の問題をかなり軽減できる。Google側にてクラスタへのデプロイ、モニタリング、フェイルオーバー、そして新インスタンスの実行を必要に応じて行う。

他のサービスにおいては、ユーザーがUnix系ソフトウェアはほぼ全てインストール、設定が可能であるのに対し、GAEのデベロッパーは言語として、PythonあるいはJavaを使用し、限られたAPIを使用することを要求される。現在のAPIにより次の機能が実現できる。
 BigTableという非リレーショナルなデータベースへのデータの格納および抽出
 HTTPリクエストの送信
 電子メールの送信
 画像処理
 キャッシング
 cron
 XMPP通信

既存のウェブアプリケーションはほとんどリレーショナルデータベースが必要なので、修正なしではGAEで実行することはできない。

日ごと、および一分ごとのクォータにより以下のリソースが制限される。
 帯域
 CPU使用量
 リクエスト数
 並列リクエスト数
 APIを呼び出す回数

また、個々のリクエストは実行に30秒以上かかったり、10MB以上のデータを返す際には終了させられる。

ただし、SDKのver.1.4.0以降は、バックグラウンドのリクエストにおける 30秒制限の撤廃（10分まで中断されずに実行し続ける）、
API 呼び出しのサイズを1MBから32MB増加（URLFetchレスポンスサイズ制限、Memcacheのバッチget/put呼び出し、Image APIのrequest/response、Mail API の送信添付ファイルのサイズ制限）が行われた。

 SQLとGQLの違い 

GAEのデータストアはSQLのようなシンタックスを持ち、GQLと呼ばれる。GQLにおけるSelect句は単一のテーブルにのみ実行可能である。GQLは敢えてJoin句をサポートしていない。これはクエリが複数のマシンに及ぶ時に非効率であることが知られているからであるCampfire One: Introducing Google App Engine (pt. 3) - YouTube。その代わりにReferenceProperty()を使用することにより、1-NおよびN-Nのリレーションが作成可能であるModeling Entity Relationships - App Engine — Google Cloud Platform。このshared-nothingのアプローチにより、ディスク障害時もシステムへの障害を防ぐことが可能である。

select句のwhere節は単一のカラムのみに対し、>, <=, <, <=操作を実行することが可能である。したがって、単純なwhere節のみが構築可能である。リレーショナルデータベースからデータストアへ移行する際に、開発者はデータ操作のパラダイムシフトを要求される。

GAEは各データストアセルから返される最大の行数を1000に制限している。結果のソーティング順序があるプロパティにより表せる場合において、この制約は人が読むために作成されたウェブアプリケーションには影響しない（単一ページに1000レコード表示することはまずないからである。なお、ページングや、キャッシングなどの機構は組み込み可能である）。アプリケーションが各オペレーションにおいて1000レコード以上必要な場合、独自のクライアントサイドソフトウェアを使用するか、Ajaxページを使用することにより無制限の行に対し操作が可能となる。この場合クエリの結果セットに対しオフセットを行うため、時間がかかるという制約を受けることになり、長い結果セットではリクエストタイムアウトが発生することがある。

DB2、Microsoft SQL Server、MySQL、OracleやPostgreSQLとは違い、データストアAPIはリレーショナルなSQLではない。

しかしながら、従来のリレーショナルデータベースに慣れたものからすれば対極に位置するBigTableは扱いに苦労するものであり、SQLライクに扱えるようにするフレームワークが幾つか作られている。Googleもこの点については問題点として認識しており、2011年秋にMySQL互換データストアであるGoogle Cloud SQLを発表しGoogle App Engine Blog: Google Cloud SQL: Your database in the cloud、GAEの内部データベースとして取り扱えるようにした。

 競合サービス 

当サービスはAmazon Web Servicesと競合する。これはアマゾンのサーバにおいてファイルホスティングや、コード実行を可能とするアプリケーションサービスの集合である。
他の競合としてはマイクロソフトのAzure Services Platform、セールスフォースのForce.comが挙げられる。
また、Google App Engine用に開発されたアプリケーションを実行するためのオープンソースのフレームワークとしてはAppScaleがある。

 歴史 
 2008年4月：プレビューリリース版を公開
 2009年2月：有料版のサービスを開始
 2009年4月：Javaアプリケーションに対応
 2011年5月：Go言語に対応

 関連項目 
 Google
 Google Cloud
 Platform as a Service (PaaS)
 AppScale
 クラウドコンピューティング

 参照 

 外部リンク 


App Engine
Category:ウェブアプリケーション
Category:クラウドコンピューティング