SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

サーバ側コーディング不要のGoogle App Engine開発ツール「gaedirect」

クラウドアプリケーション開発をJavaScriptだけで!

サーバ側コーディング不要のGoogle App Engine開発ツール「gaedirect」


  • X ポスト
  • このエントリーをはてなブックマークに追加

2.3 コマンドラインで利用する場合

コマンドラインからの設定と実行

 コマンドラインからgaedirectを使用する場合は、GAEのダウンロードサイトを開き、図2-8のリンクからSDKをダウンロードします。

図2-8 Google App Engine SDK for Javaのダウンロードリンク
図2-8 Google App Engine SDK for Javaのダウンロードリンク

 ダウンロードファイルを解凍すると、図2-9のようなフォルダ構成で展開されます。ここでは、gaedirectとappengine-java-sdkをgae下の並列フォルダに配置しています。なお、今回ダウンロードされるバージョンではgaedirectのフォルダが「gaedirect11」になっています。

図2-9 解凍後のSDKディレクトリ構成
図2-9 解凍後のSDKディレクトリ構成

 図2-9でGAEのプログラム作成とデプロイ用に使用されるコマンドが「bin」フォルダに入っており、図の右側に表示されています。この中で「dev_appserver.sh」と「appcfg.sh」はLinuxとMacOS用のshellスクリプトでWindows環境では使用しません。Windowsでは「dev_appserver.cmd」「appcfg.cmd」を使用します。

 dev_appserver.cmdは作成したプログラムをローカルPCで実行する場合に、appcfg.cmdはGoogleのクラウド環境にアップロード/デプロイするときに使用します。

コマンドラインからgaedirectを実行

 プログラムの実行はWindowsのコマンドプロンプトから行います。図2-9のディレクトリ構成で、「bin」ディレクトリに移動後、コマンドラインから次のように入力して実行します。

>dev_appserver.cmd   ../../gaedirect/war
図2-10 コマンドラインからgaedirectを実行
図2-10 コマンドラインからgaedirectを実行

 プログラムが正常に実行されると、コマンドラインに、「The server is running at http://localhost:8080/」のメッセージが表示されます。

図2-11 コマンドラインからのgaedirect起動
図2-11 コマンドラインからのgaedirect起動

 この状態でコマンドを実行したPCのWebブラウザから「http://localhost:8080/」のアドレスを指定すると、図2-12のようにgedirectのメニュー画面が表示されます。

図2-12 gaedirectのサンプルメニュー
図2-12 gaedirectのサンプルメニュー

 プログラム実行の終了は[Ctrl]+[C]キーで行います。

コマンドラインからクラウド環境へデプロイ

 クラウド環境へのアップロード/デプロイは「appcfg.cmd」で行いますが、デプロイの前に「appengine-web.xml」の内容を修正します。appengine-web.xmlは「WEB-INF」下に配置されており、このファイルをエディタで開くとリスト7のような記述内容になっていますので、applicationとversionタグにアプリケーションIDとバージョンを書き込んでください。

リスト2-1 appengine-web.xml
<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
    <application></application>
    <version>1</version> 
    <system-properties>
        <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
    </system-properties>
</appengine-web-app>

 アプリケーションIDとバージョンIDを書き込んだ後、「bin」ディレクトリから次のコマンド入力でデプロイが実行されます。

>appcfg.cmd  update  ../../gaedirect/war
図2-13 appcfg.cmdコマンドでクラウド環境へのデプロイ
図2-13 appcfg.cmdコマンドでクラウド環境へのデプロイ

 デプロイが成功すると、図2-14のような画面表示に変わり、外部インターネットからアクセスできるようになります。

図2-14 デプロイ成功時の画面表示
図2-14 デプロイ成功時の画面表示

2.4 gaedirect開発の経緯

 gaedirectを作成するきっかけとなったのは「jsonengine」です。jsonengineに興味を持ち機能を調べてみたのですが私の印象ではあまり使いやすくなく、もっと自分が使いやすいツールを作ってしまおうというのがgaedirectを作成したきっかけです。

 jsonengineを一言で言えば、その名前が示す通りにJSONデータのためのエンジン(engine)という印象です。JSONはJavaScriptでのオブジェクト表記法をベースとした軽量なデータ記述言語で、JavaScriptでのデータ処理が簡単なことはよく知られていますが、このJSONデータをそのままの形でサーバ側データストアに保管し、使用したいときに読み出すことができれば大変便利です。そしてjsonengineではこのJSONデータ場所としてGAEのBigtableを使用したということでしょう。従ってJSONデータを扱うことに専念するのであればjsonengineは最適のシステムと言えるのかもしれません。

 しかし長年業務系や基幹業務系でのSEやシステム開発などをやってきた筆者にはちょっと違和感があり、特に将来的なサーバ側でのプログラム開発へと繋いでいく場合には使いにくいと感じます。

 それではもう少し具体的に、jsonengineのサンプルとそこで登録されたエンティティの内容を見ながら、筆者があまり使いよくないと感じた点を述べてみます。

図2-15 jsonengineサンプル画面
図2-15 jsonengineサンプル画面

 図2-15はjsonengineの日本語ドキュメントの掲載されているサンプルですが、このサンプルを自分の環境にインストールしてGAE管理者画面の「Datastore Viewer」から登録されたエンティティを確認してみると、図2-16と図2-17のようになっています。エンティティは画面上で横長に表示されるので、前半と後半に分けて表示しています。

図2-16 jsoengine登録エンティティ(前半)
図2-16 jsoengine登録エンティティ(前半)
図2-17 jsonengine登録エンティティ(後半)
図2-17 jsonengine登録エンティティ(後半)

 上記の図を踏まえて筆者が感じたことは以下のようになります。

(1)データ型が取り扱いにくい

 データ型指定について、jsonengineの日本語マニュアルには下記のように記述されています。

jsonengine はパラメータを次の順で解析しようとします。1) long 型, 2) double 型, 3) boolean 型 4) string 型。したがって、”001” や “true” といった文字列を渡す場合には注意してください。それらは String 型としては保存されません。もしこれらを避けるため、プロパティーの型を明示したい場合は、JSON ドキュメントスタイルを使用してください。

 jsonengineはパラメータを上記のように解析するので、標準ではユーザが型指定することができず、また指定したい場合は「JSON ドキュメントスタイル」を使用するということですが、JSONスキーマで定義する必要があり、また定義できる基本スカラー型はinteger, number, string, boolean, nullだけなので、GAEで使用可能なデータ型をすべてカバーすることはできません。特に最大1MBのText型を明示的に指定できないことが気になりました。

(2)エンティティ構造が独自で汎用的でない

 また図2-16と図2-17にある、生成されたエンティティのデータ構造はjsonengine特有のもので、一般的なGAEのサーバ側記述でBigtableにデータを格納した場合のエンティティ構造とは大部違っています。jsonengineでのデータ構造が特有のものになる理由としてはSlim3の使用があります。Slim3はGAEのサーバ側開発でいくつかの特徴をもつ良いツールですが、Slim3でエンティティを生成する場合はソフトスキーマではなく、プロパティ数固定のエンティティになります。ところで、登録されるデータ項目数はアプリケーションごとに当然違ってきますが、Slim3を使用しているjsonengineでは登録項目数に対応するプロパティを持つことができないため、プロパティをリスト項目として対応しており、エンティティも独自の構造になってきます。

 このように、jsonengineも、ここで紹介するgaeditectもサーバ側の記述なしでGAEのBigtableにアクセスできるツールですが、例えば緊急時にこれらのツールでサイトを作成し、その後落ち着いてから、サイト機能を充実させるためにサーバサイドでの作り込みを追加するような場合は、サーバ側でのデータ処理にもマッチしたエンティティ構造にしておく必要があります。jsonengineではこのような場合の継続性に無理がでてくると考えられます。

 ただし、このように筆者は感じた問題点もそのツールが指向している範囲外とすればそれだけのことで、要はどのような目的でそのツールを使用するのかということから、JSONデータの保存と利用に特化したjsonengineとは異なるツールが必要ではというのが筆者の考えです。

 ついでに言えばgaedirectはその名前のとおりにデータストア(Bigtable)に対するクライアントからのダイレクトアクセスだけでなく、サービス機能のダイレクトアクセスについても、これから取り組んでいく予定でいます。

次のページ
3 gaedirectでのCRUD(登録・参照・更新・削除)処理

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
サーバ側コーディング不要のGoogle App Engine開発ツール「gaedirect」 連載記事一覧
この記事の著者

清野 克行(セイノ カツユキ)

慶應義塾大学工学部電子物理専攻卒。日本IBM、日本HPで、製造装置業を中心とした業務系/基幹業務系システムのSE/マーケティングや、分散アプリケーションによる社内業務システム開発などに携わる。現在は、クラウドやAjax関連の/ソフト開発/書籍執筆/セミナー講師/コンサルティング、などを行っている。情...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6084 2012/03/19 10:16

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング