ただいま整理中。
Blogspot (Blogger?) に移行しました!
タイムライン | 技術系 | TIPS | ライフハック系 | その他 | 左記カテゴリ以外は、右の欄の下のタグクラウドへ!
.

2010年10月21日

GAE: Windows環境でRubyをつかったGoogle App Engine開発環境導入まとめとコマンドヘルプ

※[ブックマーク]ボタンの中に delicious, reddit, digg, Google+(G+) のボタンもあります。

■本稿の目的

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について




《スポンサードリンク》



posted by もふもふ at 04:08 | ロンドン ☀ | Comment(0) | TrackBack(0) | カテゴリ: 技術 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
トラックバックURLは,"Trackback(x)"のリンクを押すと表示されます.
×

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