Googleは、Google App Engine Standard環境のJavaソースコード、プロダクションランタイム、App Engine API、ローカルSDKをオープンソースとして公開した。
2018年にリリースされたGoogle App Engineは、開発者がアプリケーションを容易にデプロイし、スケールアップできるように設計された。現在ではJava、PHP、Python、Node.js、Go、Rubyなど、多数の言語をサポートしている。
Java 8、Java 11、Java 17の他、GroovyやKotlinといったJVM言語を使用して、サーブレットベースのWebアプリケーションをデプロイできる。さらにSpring BootやQuarkus、Vert.x、Micronautなど、さまざまなフレームワークを使うことも可能だ。
下図はそのモジュールの概要を示したものだ。オレンジ色の項目が公開されたアーティファクトで、黄色は社内インフラである。最後に"*"の付くモジュールは、プロダクションサーバ側でのみ使用される。
com.google.appengine.api
パッケージにあるJava App Engine APIを使えば、次のようなApp Engineサービスにアクセスすることができる。
- Datastore — Webアプリやモバイルアプリで一般的に使用されるNoSQLデータベース
- Blobstore — バイナリblobの保存に使用するもので、Java 8でのみ利用可能
- Taskqueue — 計算タスクをエンキューするもので、Java 8でのみ利用可能
- Memcache — 高価な処理結果をキャッシュする
- Urlfetch — 外部サービスをコールする
注目すべきなのは、これまでに挙げた機能がすべてローカル実装されている点だ。そのため、ローカル開発環境でのアクセスが可能であり、変更をチェックするためにクラウドへのデプロイを強いられることはない。
デフォルトでは、App EngineはJettyサーブレットコンテナを使用する。App Engineの起動方法とコンポーネントの動作、あるいはスタートアップ時のサービスの構成方法を探りたいのであれば、ランタイムフォルダを見てみるとよいだろう。
App Engine Remote APIを使用すれば、JavaアプリケーションからApp Engineサービスにアクセスすることが可能になる。例えば、ローカルで動作するアプリケーションから、Remote API経由で運用中のDatastoreにアクセスすることができる。App Engineアプリケーションから、別のApp EngineアプリケーションのDatastoreにアクセスするようなことも可能だ。
Googleの社内インフラストラクチャで、App Engineの基盤になっているBorgクラスタ管理システムとApp Engineを結合するいくつかのレイヤに関しては、Googleはまだオープンソースとして公開していない。
App Engine Standard Javaランタイムがオープンソース公開されたことによって、開発者は、ローカル開発環境やデータセンタ内のオンプレミスに加えて、理論上は他のコンピューティングプラットフォームや、あるいはCloud RunのようなGoogle Cloudであっても、自身の望む場所でApp Engine環境全体を実行できるようになった。
Google Cloud PlatformのGitHubリポジトリには、Java 8やJava 11を使用したアプリケーションのサンプルが公開されている。
サポート対象言語の一覧とそれらの対応バージョンについては、App Engineドキュメントページで確認することができる。
オープンソース化で可能になったことの詳細は、Google Cloud Platformリポジトリで確認して頂きたい。