Hatena::ブログ(Diary)

暗号、数学、時々プログラミング このページをアンテナに追加 RSSフィード

2008-04-11

本当は興味のあるアナタへ捧ぐ − Google App Engine

| 02:56 | 本当は興味のあるアナタへ捧ぐ − Google App Engineを含むブックマーク

虚数の情緒」にて「英語が分からなくても学ぶ為の書物が十分に手に入る日本人は幸せである」といった類の記述があった。明治期に多くの才能が猛烈な勢いで欧米の本を翻訳して行ったからこそ、人々は日本に居ながらにして様々な教養を身に付けることが出来たのであり、それが1つの日本の強みであった、といった主旨だ。

ただこうした試みは、昔とは比較にならない大量の情報が溢れている現代においては無謀に過ぎたものであり、梅田望夫さんが著書の中で「これからを考えると、やっぱり英語は出来るに越したことはないよ」という主旨の事を述べられているのは、残念ながら正しいのだろうと思う。「オレサマが遍く全ての英語ドキュメントを日本語化してやるぜ!」なんて決意すら湧かない。

とは言え、言葉が障壁になって面白いものに触れる事を躊躇っている人達は今でもきっと沢山いるだろう。「Google App Engine で遊んでみた(本当にそういうタイトルのエントリーがあったらスミマセン。単なる例のツモリです)」とかって記事を読みながら「くそー、俺もやりたいケド、英語だと集中力が続かないんだよなぁ。。本当は俺だって…」なんて歯噛みしている方々の一助くらいにはなるんじゃなかろうか?なんて思い、導入部を翻訳(?)した昨日のエントリー「Google App Engine に嫉妬」に引き続いて今日はチュートリアルを翻訳していきたいと思う。なにしろこういうエントリーは会社を一切気にする必要がないので書きやすい。

さて、例によってウソは書いていないハズだが、読み易さを優先し丸めた表現を使う場合があるので、業務でGoogle App Engine を利用される方は適宜ご自身で原文をご確認頂く事を強くオススメする。

そして今回は何となくそんな気分だったので鬼教官風。個人的には軽いノリの方が頭に入りやすいので、こういうの"超"訳って感じで他の人が翻訳するの流行らんだろうか…と少し期待しちゃったりする今日この頃。


Google App Engine はじめたいヤツはついて来い!


聞いたぞ。「英語が出来れば僕だって…」だと? 良いだろう。そんなお前に教材を用意してやった。良かったな。さぁ、思う存分読むと良い。あ?「何が書いてあるの?」だって? お前はそれが分かると読むか読まないか決められるのか? ・・・まぁ良いだろう。初回だからな。ざっくりと説明してやるからしっかり読めよ。

今回用意したのはチュートリアルだ。コイツはGoogle App Engine の簡単なプロジェクトを通じ、アプリケーションをどうやって作り、そして公開するか?を理解していく為に用意されたものだ。具体的には「ゲストブック」「App Engine サービス(Datastore やGoogle User Service などを含む)の利用法を紹介する為のいくつかのデモ」を含んでるぞ。

チュートリアルの流れは次の通りだ。

準備は良いか? よし。じゃあ始めるぞ。


イントロダクション


心配するな。App Engine でアプリを作るのは簡単だ。ホンの数分で出来ちゃうくらいだからな。それから、アップロードするのも他のユーザに公開するのも全部無料だし、別に何か強制するつもりも全く無いから安心して良いぞ。

まずは簡単なゲストブックアプリを作るぞ。こいつは公開されたメッセージボードにユーザが個々のメッセージを投稿する事が出来るものだ。ユーザは匿名でも投稿出来るし、Googleアカウントを使って投稿する事も出来る。そんなアプリを作っていくぞ。

このゲストブックアプリを通じてApp Engine Datastore の利用法を学ぶ事になる。それからGoogleアカウントを使ったアプリの開発方法、webappを含むPython web フレームワークの使い方なんかも出てくるから、見落とすなよ。ついでにDjangoテンプレートエンジンの使い方のデモもあるぞ。最初からトピック満載で嬉しいだろう? ん?何だその顔は?

それじゃ、先ずは開発環境を準備しないと何も始まらんからな。そこから始めるぞ。つまりSDKのダウンロードとセットアップだ。


開発環境


Google App Engineアプリ開発とアップロードにはSDKを使う。

SDKは作ったアプリをローカルで動作確認する為のWebサーバアプリを含んでいる。Datastoreもローカルに持ってるし、アカウント関連、URL fetchのAPIも使えるぞ。メールだってローカルPCから直接送れる。それから、SDKはPython 2.5 が使える限りPC環境はこだわらない。WindowsだろうとMacだろうとLinuxだろうと好きなのを使ってくれ。

Mac OS X 10.5 Leopard のユーザなら既にPython 2.5 がインストールされてるが、全員がMacユーザじゃないだろうからな。必要に応じてPython 2.5 をインストールしてくれ。ちなみに、Pythonのサイトはココだ。後でじゃなくて今やれよ。先に進めないぞ。

念のために聞くぞ。Pythonインストールは終わってるか?

よし、じゃあ次はSDKだ。App Engine SDK をダウンロードするぞ。ダウンロードページの指示に従えばインストールも簡単に分かるハズだ。

今回のチュートリアルでは次の2つのコマンドを使う事になる。

dev_appserver.py 開発用webサーバの起動
appcfg.py App Engine にアプリアップロードする

WindowsとMax OS Xインストーラーはこれらのコマンドをコマンドパスの中に入れ込んでる。インストールが完了したら、コマンドプロンプトからこれらのコマンドが実行出来るようになってるハズだ。

Zipアーカイブの方のSDKを使うなら、それらのコマンドはgoogle_appengineってディレクトリで見つけられるぞ。探してみてくれ。

よし、これで環境は整ったな? じゃあ、いよいよ実際にコードを書いてみるぞ。


Hello, World !


Google App Engineアプリは標準のCGIを使ってWebサーバと交信する。HTTPのPOSTでリクエストを投げて、処理の結果がまたHTTPレスポンスとして返ってくると思えばいい。アプリケーションHTTPヘッダを含めたレスポンスを生成する部分を担当するワケだな。

じゃあメッセージを表示するダケのショボいアプリでも作ってみるか。


簡単なリクエストハンドラの生成

先ずは「helloworld」ってディレクトリを作れ。アプリケーションに必要なファイルは全部ココに入れるからな。次に helloworld ディレクトリに移動して、「helloworld.py」ってファイルを作るぞ。中身はこんな感じだ。

print 'Content-Type: text/plain'
print ''
print 'Hello, world!'

このPython スクリプトは、リクエストを受けた際に返却するHTTPヘッダと、実際のレスポンスの中身を記述してるワケだ。見るからにシンプルで解説の必要もないな?


config ファイルの作成

App Engine のアプリは「app.yaml」って名前のconfigファイルを持ってる。こいつを説明するぞ。こいつには、どのハンドラースクリプトがどのURLに対して利用されるべきか?が記述されてる。

じゃあ、さっそくhelloworld ディレクトリの中に app.yaml を作るぞ。中身はこんな感じになる。

application: helloworld
version: 1
runtime: python
api_version: 1

handlers:
- url: /.*
  script: helloworld.py

中身を上から順に1行ずつ説明していくぞ。

  • アプリケーションのIDは「helloworld」になる。アプリケーションをApp Engine に登録する時に、最終ステップでユニークなIDを選ばなきゃならん。そしたらここも変わるな。開発中は、どんな値を入れても構わん。今のところはそのまま「helloworld」にしておくぞ。
  • アプリケーションのバージョン番号を格納する場所だ。この例だとバージョンは1だと宣言している事になる。既に触れられていると思うが、App Engine はバージョン管理が出来る。管理用コンソールを経由し、実際に稼動させるアプリのバージョンを指定する時にこの値を利用するってワケだな。
  • 次は2行まとめた解説だ。注意しろよ。アプリが前提としてるランタイム環境と、そのバージョンを宣言する部分だ。今は固定値みたいなもんだが、将来的に他の言語をサポートするようになると必要なエリアになるな。
  • 次も2行まとめた説明になるぞ。まず、URLパスを記述し、次の行でリクエストがそのパスにマッチした場合に実行すべきスクリプトを宣言している。この例だと「何であろうとhelloworld.pyの結果を返す」ってコトになる。これまた簡単だな。

テストしてみる

config ファイルの中で全てのURLに対するハンドラスクリプトマッピングが終わったら作業は完了だ。早速、App Engine SDK を使ってWebサーバアップロードしてテストしてみるぞ。

次のコマンドでWebサーバを起動しろ。コピペしないで、ちゃんと helloworld ディレクトリまでのパスも入れろよ。

google_appengine/dev_appserver.py helloworld/

これでWebサーバは起動したハズだ。ポート8080でリクエストを受けるようになってるぞ。ブラウザを起動し、次のようにタイプしてサーバアクセスしてみろ。

path http://localhost:8080/

利用するポート番号の変更方法とか、開発用のサーバの細かな利用方法が知りたい場合はココをチェックしろ。ああ、それから「--help」オプションをつけてコマンドを実行する方法もあるぞ。


サーバは賢い


アプリを開発中、Webサーバは起動したままで問題ない。Webサーバはファイルの中身に変更があるかチェックして必要に応じて再読み込みするようになってるからな。まったく最近のサーバは賢いなぁ。


ちょっと試してみるか? Webサーバを起動したままで、helloworld.py を編集してみろ。そうだな、Hello World! を何か他の文字列にでも変えてみるとか。で、ブラウザをリロードしてみるとドウなった? ちゃんと変更が反映されてるだろ?

Webサーバをシャットダウンしたければ、ターミナルウィンドウがアクティブなのを確認してからControl-C(システムでBreakに相当するキー)を押せば良いぞ。

残りのチュートリアルの間、Webサーバは起動したままでOKだ。止めたかったら止めても良いケドな。またサーバを起動したかったら、上で紹介した方法をまた使えば良いダケだから詳しい説明はしないぞ。


次回へ続く


これでApp Engine アプリ開発を一通り眺められたワケだ。App Engine にアップロードすれば世界中に公開可能だ。早速そうしたいと思うかも知れんが、そう焦るな。その前にWebアプリケーションフレームワークについて学んでおいた方が良い。ただな。。。実はちょっと疲れた。続きは次回エントリーを読んでくれ。

skobayasskobayas 2008/05/16 23:07 こんばんは。今更ながらgoogle app engineをいじり始めた者です。
いろいろ探して、たどり着きました。

それもあるのですが、冒頭の英語の話に膝ポンでしたので、
僭越ながらコメントをさせていただきます。

シリコンバレーにはインドや中国出身のプログラマが山のように居ますが、彼らに共通しているのは英語が出来ること。
ま、当たり前と言えばいえるのですが、これは重要なポイントを押さえています。
インドはともかく、中国は翻訳に膨大なコストがかかるそうです。
ってのは、彼らはカタカナを持たないために、中国語に存在しない単語を翻訳しようとすると、それらの単語を一から創らなければならず、それがために翻訳が遅れる。
ある程度以上の出来る人間はそれを嫌って英語をそのまま読んでしまう。
そうした人間はどんどん先端技術に触れることが出来て...というシナリオみたいです。
日本もそうなればいいんですがね。
と思いながら、せっかく訳を公開して頂いているのですから、これはありがたく便乗させていただこうかと思ってます。

ps
サーバが賢いのはここを読むまで知りませんでした。
(いちいち再起動はどうしたもんか、と思ってました)

このサーバ、tomcatっぽいけど、もっと敷居が低い感じですかね?

hamatsu1974hamatsu1974 2008/05/17 01:14 確かに、「カタカナにするにしてもドウしたもんか…(読む人になんとか通じさせねば!)」と悩む時は日本語でさえありますから、中国語は大変でしょうね。。母国語で思考する限り、学習テキストは母国語がベストだとは思いますが…

# サーバの仕様は、ソースコードを見れば分かるカモ、、ですが、今のところは不明です。時間がなくて(^^;

あびばあびば 2010/03/08 20:21 Google App Engineについての説明がとれもわかり易かったです。