■本稿の目的
Googleによる App Engine のチュートリアルは、とてもわかり易く、手順をシンプルに追った記述となっている。これにより、PythonまたはJavaを使ったGAEの開発の最低限の方法について、知ることができる。
しかしながら、このチュートリアルでは、以下のような難点がある:
- Rubyの環境については触れられていない
- 開発用のコマンドの詳細の説明については、省かれている
- 手順を丁寧に追っているため、記述に若干冗長な感がある
加えて、ネット上の情報を見ると、それらのほとんどはLinuxベースの環境であって、Windows+Ruby環境でのGAE開発に触れた情報は少ない(Googleでキーワード「GAE Ruby Windows dev_appserver appcfg」で検索すると、実際のページ総数はたかだか「
約 244 件中 3 ページ目 (0.24 秒)
」件である)。そこで、本稿は:
- Windows環境(ActiveScriptRuby)
- RubyをつかったGAE開発
- Googleのチュートリアルより記述を簡潔に
- ただし開発用コマンドの説明は詳細まで行う
という方針で、App Engineを利用した開発の手始めについてまとめた。
■凡例
本稿の表記 Googleのチュートリアルの表記、または本稿が想定する環境等
GAEアプリ App Engineアプリケーション GAE SDK App Engineソフトウェア開発キット GAEリモート動作環境 Googleによって提供されているApp Engine (Python|Java|etc...) ランタイム 環境。 GAEローカル環境 GAEのソースの記述、ローカルWebサーバーでテストなどをおこなうGAEリモー ト動作環境の外、すなわちあなたのPCなどのこと。 GAEアプリID GAEアプリのための任意のID GAE開発用コマンド 核となるコマンド: dev_server.rb, appcfg.rb をいう。
■Google App Engineとは
App Engineとは:
- メールサービス
- Webサーバー・インタフェース
Webアプリ
Webアプリ・開発用コンソール http://(localhost:xxxx|appid.appspot.com)/_ah/admin
(上記Webアプリは、GAEアプリとしての特徴を有する) - ストレージ
を有する、Googleによるサービスの総体のことである。
これらのサービスを使って、ユーザによりGAE SDKを使って開発されるものを、本稿では、GAEアプリと呼ぶ。
GAEアプリを開発、実行する環境は、2つあり:
GAEリモート動作環境、
GAEローカル環境
とよぶ。
■RubyのGoogle App Engine環境
本稿では、単にApp Engineを導入するのでなくて、Rubyを用いた環境を導入する
ことを想定している。実際には、Javaの環境をベースに JRubyを介して、Rubyを
利用する形となる(一般的に提供されている、PythonやJavaによる環境ではない
��。
このRubyを利用するための環境は、 gem形式でGoogleが用意してくれている。
■GAEアプリ開発の一連の流れを簡潔に述べる
チュートリアルの流れを、簡潔に表にまとめた。
ステップ | 用意するもの | 得られるもの | やること |
---|---|---|---|
1.GAE開発環境の用意 | GAE SDKのダウンロード作業 | GAEの開発環境 | Ruby用のGAE SDKをインストールする。 方法については、 前回の記事 を参照のこと。 |
2.GAEアプリのアカウントを登録 | Googleアカウント、 GAEアプリID、 SMSを受信できる携帯電話 | GAEアプリのURL(http://GAEアプリID.appspot.com/) | GAEアプリのアカウント登録サイトで、必要とされる情報を入力する※。 |
3.GAEローカル環境でのGAEアプリの開発 | ソースコード | GAEアプリ | GAEアプリのソースコードを記述する。 |
4.GAEリモート動作環境へのアップロード | GAEアプリ、 アップロード・コマンドの実行( appcfg.rb )、GoogleアカウントのIDとパスワード | GAEリモート動作環境でのGAEアプリの起動 | アップロード・コマンドを実行し、GAEリモート動作環境にアップロードする。 |
※ステップ2の注意
SMSの登録内容について。電話番号の表記の仕方(81を含むのかそうでないか)、メ
ールアドレスかイマイチ判然としない。何度か試しているうちに、Googleか
らSMSが来たため、どれが正しいかわからなかった。
このサイト
でも、同様の事例をまとめているようだ。
Googleから送信されるSMSには、"Google App Engine Code: xxxxxxx"(xは数
字)という内容で、これがGoogleの GAEアカウント認証サイトによって認証
される必要がある。(当方は、ドコモの携帯電話で2010年 9月に行った。)
■GAE開発用コマンドについて
GAE SDKのをインストールすると、チュートリアルに紹介されているコマンド:
dev_appserver.rb
, appcfg.rb
が、ディレクトリ: %RUBY_HOME%\bin\
などに、格納される(実際には、BATファイルからなる複数のスクリプトから構成されるが、本稿で
はここのスクリプトについての説明は割愛する)。
◆概要
●dev_appserver.rb
開発用のローカルWebサーバー兼GAEローカル環境でのGAEアプリのランチャ。
使い方:
dev_appserver.rb [オプション] <warディレクトリ>
「warディレクトリ」にあるGAEアプリを、ローカル環境で起動する。
このローカルWebサーバーは、Googleアカウントをシミュレートしていて、独自
のログイン、ログアウト画面を有する。
●appcfg.rb
GAEアプリの管理コマンド
使い方:
D:/PROGRA~1/ruby-1.8/bin/appcfg.rb [options] <action> <app-dir> [<output-file>]
管理とは、以下のことを指す:
- ランタイム環境へのGAEアプリのアップロード
- index.yamlの更新・削除
- スケジュール・タスクの管理
- スケジュール・タスクの管理
- ランタイム環境へのデータのアップロード
http://code.google.com/intl/ja/appengine/docs/python/tools/uploadinganapp.html
◆GAE開発用コマンドの詳細説明
●dev_appserver.rb
開発用のローカルWebサーバー兼GAEローカル環境でのGAEアプリのランチャ。
使い方:
<dev-appserver> [options] <war directory>
※--help オプション時も、<war directory>指定が必要
オプション:
--help, -h このヘルプメッセージを表示して終了。 --server=SERVER -s SERVER 最新のSDKバージョンを判別に使用するサーバの指定。 --address=ADDRESS -a ADDRESS WebサーバーがバインドするローカルPC上のインタフェースのアドレスの指 定(もしくは、0.0.0.0 で全てのインタフェース)。 --port=PORT -p PORT WebサーバーがバインドするローカルPC上のポート番号の指定。 --sdk_root=root 格納されているSDKでオーバーライドする場合のSDK格納ディレクトリの指定。 --disable_update_check 最新のSDKバージョンのチェックを無効に指定。
例:
D:\Program Files\ruby-1.8\usr\local\sinatra_test>dev_appserver.rb --help . D:/Program Files/ruby-1.8/lib/ruby/gems/1.8/gems/appengine-tools-0.0.15/lib/appengine-tools/boot.rb:50: warning: `*' interpreted as argument prefix => Skipping update check => Booting DevAppServer => Press Ctrl-C to shutdown server Usage: <dev-appserver> [options] <war directory> Options: --help, -h Show this help message and exit. --server=SERVER The server to use to determine the latest -s SERVER SDK version. --address=ADDRESS The address of the interface on the local machine -a ADDRESS to bind to (or 0.0.0.0 for all interfaces). --port=PORT The port number to bind to on the local machine. -p PORT --sdk_root=root Overrides where the SDK is located. --disable_update_check Disable the check for newer SDK versions.
●appcfg.rb
GAEアプリの管理コマンド。
使い方:
D:/PROGRA~1/ruby-1.8/bin/appcfg.rb [options] <action> <app-dir> [<output-file>]
アクション:
<action>は、以下のうちいずれか 1つである必要がある:
help あるアクションのヘルプを出力する request_logs リクエスト・ログをApache共通ログ形式で出力する。 rollback 処理中の更新をロールバックする。 update 新しいバージョンのGAEアプリに更新、あるいは新規作成する。 update_indexes GAEアプリのインデックス(注)を更新する。 update_cron GAEアプリのcronジョブを更新する。 update_queues GAEアプリのタスク・キューの定義を更新する。 update_dos GAEアプリの対DoS保護の環境設定を更新する。 version バージョン情報を出力する。 cron_info cronジョブの次回の実行までの時間を表示する。 run ユーザーのGAEアプリ環境でjrubyを実行する。 bundle GAEリモート環境へのデプロイのために、ローカルのGAEアプリをパッケージングする。
'run' コマンドは、カレント・ディレクトリをGAEアプリのディレクトリと、みなします。
'help <action>' で、詳細の説明を見てください。
オプション:
-h, --help ヘルプを表示して終了。 -s SERVER, --server=SERVER 接続を行うサーバー。 -e EMAIL, --email=EMAIL 利用するユーザ名。省略時は入力待ちに。 -H HOST, --host=HOST 全てのRPCで送られるホストヘッダの上書き。 -p PROXYHOST[:PORT], --proxy=PROXYHOST[:PORT] 指定したプロクシ・サーバを介してリクエストをプロ する。 --proxy_httpsも指定した場合、HTTPだけがプロクシ され、そうでなければHTTPとHTTPSの両方がなされる。 --proxy_https=PROXYHOST[:PORT] HTTPSリクエストをプロクシするプロクシ・サーバ。 --sdk_root=root GAE SDKの格納場所を上書きする。 --passin 標準入力からログイン・パスワードを読む。 --insecure 管理コンソールとの通信ではHTTPSを使用しない。 --enable_jar_splitting 巨大なjarファイル(> 10M)を小さなファイルに分割する。 Split large jar files (> 10M) into smaller fragments. --jar_splitting_excludes=SUFFIXES --enable-jar-splitting が指定された場合、コンマ 区切りでSUFFIXESに指定された拡張子にマッチするファイルは、全ての jarファイルにおいて、分割から除外される。 When --enable-jar-splitting is set, files that match the list of comma separated SUFFIXES will be excluded from all jars. --retain_upload_dir GAEリモート環境へのアップロード時に使用した一時ディレクトリを残す。 Do not delete temporary directory used in uploading. --compile_encoding JSPをコンパイルするときに使用する文字エンコーディングの指定 The character encoding to use when compiling JSPs. -n NUM_DAYS, --num_days=NUM_DAYS ログデータを入手する日数の指定。カットオフ・ポイントは、UTCで12時 である。できるだけ全てのログを得る場合は 0 を指定する。デフォルト 値は 1 である。 Number of days worth of log data to get. The cut-off point is midnight UTC. Use 0 to get all available logs. Default is 1. --severity=SEVERITY ? アプリレベルログメッセージのシビア度の指定。範囲は 0 (DEBUG) から 4 (CRITICAL)である。 Severity of app-level log messages to get. The range is 0 (DEBUG) through 4 (CRITICAL). If omitted, only request logs are returned. -a, --append 既存のファイルに追記する。 -n NUM_RUNS, --num_runs=NUM_RUNS スケジュールされた計算するための実行時間の数 Number of scheduled execution times to compute
例:
D:\Program Files\ruby-1.8\usr\local\sinatra_test>appcfg.rb --help D:/Program Files/ruby-1.8/lib/ruby/gems/1.8/gems/appengine-tools-0.0.15/lib/appe ngine-tools/appcfg.rb:51: warning: `*' interpreted as argument prefix D:/Program Files/ruby-1.8/lib/ruby/gems/1.8/gems/appengine-tools-0.0.15/lib/appe ngine-tools/boot.rb:50: warning: `*' interpreted as argument prefix usage: D:/PROGRA~1/ruby-1.8/bin/appcfg.rb [options] <action> <app-dir> [<output- file>] Action must be one of: help: Print help for a specific action. request_logs: Write request logs in Apache common log format. rollback: Rollback an in-progress update. update: Create or update an app version. update_indexes: Update application indexes. update_cron: Update application cron jobs. update_queues: Update application task queue definitions. update_dos: Update application DoS protection configuration. version: Prints version information. cron_info: Displays times for the next several runs of each cron job. run: run jruby in your application environment. bundle: package your application for deployment. The 'run' command assumes the app directory is the current directory. Use 'help <action>' for a detailed description. options: -h, --help ? ? ? ? ? ?Show the help message and exit. -s SERVER, --server=SERVER ? ? ? ? ? ? ? ? ? ? ? The server to connect to. -e EMAIL, --email=EMAIL ? ? ? ? ? ? ? ? ? ? ? The username to use. Will prompt if omitted. -H HOST, --host=HOST ?Overrides the Host header sent with all RPCs. -p PROXYHOST[:PORT], --proxy=PROXYHOST[:PORT] ? ? ? ? ? ? ? ? ? ? ? Proxies requests through the given proxy server. ? ? ? ? ? ? ? ? ? ? ? If --proxy_https is also set, only HTTP will be ? ? ? ? ? ? ? ? ? ? ? proxied here, otherwise both HTTP and HTTPS will. --proxy_https=PROXYHOST[:PORT] ? ? ? ? ? ? ? ? ? ? ? Proxies HTTPS requests through the given proxy server. --sdk_root=root ? ? ? Overrides where the SDK is located. --passin ? ? ? ? ? ? ?Always read the login password from stdin. --insecure ? ? ? ? ? ?Do not use HTTPS to communicate with the Admin Console. --enable_jar_splitting ? ? ? ? ? ? ? ? ? ? ? Split large jar files (> 10M) into smaller fragments. --jar_splitting_excludes=SUFFIXES ? ? ? ? ? ? ? ? ? ? ? When --enable-jar-splitting is set, files that match ? ? ? ? ? ? ? ? ? ? ? the list of comma separated SUFFIXES will be excluded ? ? ? ? ? ? ? ? ? ? ? from all jars. --retain_upload_dir ? ? ? ? ? ? ? ? ? ? ? Do not delete temporary directory used in uploading. --compile_encoding ? ? ? ? ? ? ? ? ? ? ? The character encoding to use when compiling JSPs. -n NUM_DAYS, --num_days=NUM_DAYS ? ? ? ? ? ? ? ? ? ? ? Number of days worth of log data to get. The cut-off ? ? ? ? ? ? ? ? ? ? ? point is midnight UTC. Use 0 to get all available ? ? ? ? ? ? ? ? ? ? ? logs. Default is 1. --severity=SEVERITY ? Severity of app-level log messages to get. The range ? ? ? ? ? ? ? ? ? ? ? is 0 (DEBUG) through 4 (CRITICAL). If omitted, only ? ? ? ? ? ? ? ? ? ? ? request logs are returned. -a, --append ? ? ? ? ?Append to existing file. -n NUM_RUNS, --num_runs=NUM_RUNS ? ? ? ? ? ? ? ? ? ? ? Number of scheduled execution times to compute
■TODO
- gem について
- App Engine の設定項目について
- GAE Ruby で使用されているRuby FWについて
0 件のコメント:
コメントを投稿
何かありましたら、どうぞ: