2013年05月09日

Python と Java それぞれの Hello World

Google App Engine 比較シリーズ 2 回目は Hello World を実現するのに何を書けばいいか、というのを比較してみましょう。

フレームワークを特に導入せず、一番簡単な記述をするためには、 Python では SDK に同梱されている webapp2 を、 Java では単純に Servlet を使うことになります。 (注: Python ランタイムには細かく言うと Python 2.5 と Python 2.7 の二種類がありますが、ここでは Python 2.7 についてだけ述べます)

Python ではこうなります: Hello, World!

Java ではこうなります: Creating a Project

Python では Python スクリプトファイル一つと、設定ファイルとして app.yaml 一つでできあがります。 一方 Java はまず正しいディレクトリ構成を作った上で、java ソース一つと、設定ファイル二つ web.xml と appengine-web.xml とが必要になります。

プログラム

プログラムコードを見てみます。

Python では webapp2.RequestHandler を継承したクラスで、 get メソッドをオーバーライドします。 引き渡される情報は特にないので引数 self のみです。 self.response.headers 辞書にヘッダを設定し、 self.response.write メソッドでボディを書き出します。

Java では javax.servlet.http.HttpServlet を継承したクラスで doGet メソッドをオーバーライドします。 引数は常に必要で、HttpServletRequest reqHttpServletResponse resp です。 リクエストの情報は今回一切関知しません。 resp.setContentType メソッドでヘッダに Content-Type を設定します。 resp.getWriter().println メソッドでボディを書き出します。

このように、どちらも流れはほぼ同じです。

Python のファイルにはさらに WSGI の設定が含まれています。 これはスレッドセーフに実行させるためにハンドラーを WSGI アプリとして登録するものです。 定形処理とは言えちょっと面倒ですね。

設定ファイル

設定ファイルも見ておきましょう。

Python 側の app.yaml にある

application: your-app-id
version: 1

と Java 側の appengine-web.xml にある

<application></application>
<version>1</version>

が対応します(application には本当はアプリケーションIDを入れる必要があります)。

app.yaml には他に runtime や threadsafe などといった項目がありますが、 appengine-web.xml には対応する項目はありません。

app.yaml ではさらに URL とハンドラーの対応付けも記述しますが、これは Java では(Servlet 標準の) web.xml に記述します。

(実は Java でも yaml 設定ファイルを使うことができるようです。 Java App Configuration Using app.yaml)

ついでに書いてしまいますが、特定のバージョンを参照する URL が Python と Java ではなぜか異なっていることに注意が必要です。 Python の場合、バージョン 1 の URL は http://1.your-app-id.appspot.com/ ですが、 Java の場合、バージョン 1 の URL は http://1.latest.your-app-id.appspot.com/ です。

次回予告

次回は Datastore について比較します。

ラベル:GAE
posted by mft at 19:00| Comment(0) | TrackBack(0) | 技術文書 | このブログの読者になる | 更新情報をチェックする

Google App Engine 比較シリーズ

このシリーズでは Google App Engine の Python と Java のランタイムを比較していきます。

私はもともと Pythonista なので、Google App Engine も Python で主に使ってきました。 最近 Java ランタイムを触る機会がありましたので、比較をしてみたいという趣旨のシリーズです。 (Go ランタイムとかそのうち登場するんじゃないかという別のランタイムとかはとりあえず取り上げません。 悪しからずご了承下さい。)

そういうわけで、基本的に Python 側から Java を眺めてみるという視点になります。 Java を愛して止まない皆様からの温かいツッコミをお待ちしています。

Python と Java それぞれのランタイムの利点

Google App Engine には2013年5月現在3種類のランタイムが用意されています。 2008年のプレビュー当時からある Python、 2009年に登場した Java、 そして2011年に追加された Go です。 ここでは Python と Java を取り上げます。

それぞれのランタイムの利点は何なのでしょう。 以下は個人的な感想ですので、会社の意見を代表するものではありません。

Python ランタイムの利点
  • 手軽に始められる
  • 記述量が少なく、開発が楽
Java ランタイムの利点
  • 開発者の確保が容易
  • 実は Java VM 上で動けば Java で書かなくてもいい

開発環境の比較

開発環境も軽く比較しておきましょう。

Python

Python 2.7 と Python 用 App Engine SDK をまずは用意します。

Python のコード、HTML ファイル、設定用に yaml ファイル、この3種類のファイルを読み書きできるエディタ、それと appcfg.py などを実行するためにシェル環境が必要になります。 私は Emacs 派なので Emacs で全て編集しますが、vim でも sublime2 でも好きなものを使えばいいと思います。 え、Eclipse で PyDev? お好きにどうぞ。

Java

Java SE 6/7 をまずは用意します。

Java のコードを Emacs で書くのは苦痛なので(軟弱者!)、Eclipse を使いましょう。 Google plugin for Eclipse というものが公式に用意されており、 これを使うと App Engine SDK も一緒にインストールされますし、デプロイまで簡単にできます。 といいますか、プロジェクトごとのディレクトリ構成の準備などを New Project 一発で作ってもらえないと素人的には死ねます。 xml や html も入力補助がありますが、使い慣れたエディタとどっちがいいかは判断の別れるところです。

次回予告

次の記事では、Hello World のコードを眺めます。

ラベル:GAE
posted by mft at 18:18| Comment(0) | TrackBack(0) | 技術文書 | このブログの読者になる | 更新情報をチェックする
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。