オルタナティブ・ブログ > プロジェクトマネジメント10.0 >

失敗しないウェブアプリケーション開発の処方箋

【SpringSource Tool Suite】Google I/Oで紹介された Google Web Toolkit との統合機能のお試しから、お手上げに至るまでのログ

»

5月24日17時情報追記
 (エントリ最下部に記載)
5月25日19時追記
 barakiさんのサイトに美しいチュートリアルが掲載されました!
 http://junglejava.jp/

 barakiさんの記事を読みながら、私が書いたこの記事は情報として中途半端なだけでなく
 Springsource開発者の方々にも大変失礼なものだと思いました。

 試してみた内容を軽い気持ちでブログ記事にしましたが、
 このような不毛なエントリは今後作成しないように心がけたいと思います。
 ※自戒の意味も込めて記事自体はこのまま残していますが、不快な方がいらっしゃいましたらご一報ください。削除いたします。

Ws000008

お世話になっております。
ループス岡村直人です。

先日、「【まと め】Google I/Oの内容が理解できなかったので整理してみたというエントリで、VMWare参加のSpringsourceが提供するIDEについて紹介させていただきました。

その後、たまたま会社でちょっとしたスタンドアロンのアプリケーションを開発(といってもほんのいくつかのタスクを処理すれば済む、インタプリタでも十分なツール)することになったため、開発効率を飛躍的に向上することができ、データベースへの永続化や関連オブジェクトの自動生成が可能と謳われていたSTS(SpringSource Tool Suite)が使えるのではないかと思い試してみました。

以下の説明は一見HOWTO風ですが、最後はかなりぐだぐだな感じで終わります。
きちんとしたニュースサイトのきちんとしたハウツーを期待されている方にはだいぶ残念な結果になりますので、予めお詫び申し上げます。すみませんでした

SpringSource Tool Suite with Google Integration のダウンロード

以下のサイトからダウンロードできます。

http://www.springsource.com/products/springsource-google-download

ダウンロードには名前、会社、メールアドレス、役職、電話番号、利用するプロジェクトのフェーズ(検討中とか、実施確定、とか)や期限、利用するAPサーバなど、「ほんとに使ってくれんの?」と感じる量の個人情報を入力する必要があります。

Windows, Mac, Linux向けパッケージがありますが、今回はWindows32bitOS用インストーラ付きパッケージを選択しました。

インストール

Ws000000

使用許諾を了承します。

Ws000001

インストール先を選択します。
デフォルトのままで問題ないと思います。大昔のEclipseはスペースを含むフォルダにインストールするとうまく動きませんでしたが、最近は大丈夫のようです。

Ws000002

インストールするパッケージを選択します。初心者なのでデフォルトのまま、全部選択します。それぞれのパッケージについてのごく簡単な説明を以下に記載しておきます。

  • tc Server
    TomcatベースのAPサーバのようです。VMWareのニュースリリースによると「tc Server Spring Edition は、最新のアプリケーション実行に適した軽量のプラットフォームで、仮想データ センタのみならず、プライベート クラウドやパブリック クラウドの環境にも最適」とのこと。
  • Spring Roo
    コマンドラインからソースを自動生成するツール。
  • Apache Maven(アパッチ メイヴァン/メイヴィン)
    昔からあるJavaプロジェクト管理ツール ant の新しいやつ。
    ソースコードコンパイルテストJavadoc生 成、テストレポート生成、プロジェクトサイト生成、JAR生成、サーバへのデプロイWAR, EARファイル生成などが可能(Wikipediaより転載)」。新しいツール評価の度にお会いするがいまいち好きになれない。

その後、IDEで利用するJDKを選択すると以下の通りインストールが始まります。

Ws000003

インストールにかかった時間はおよそ10分程度?予想以上に時間がかかりました。
Eclipse拡張系ツールはRAD(Rational Websphere application developer)(推奨メモリ2G以上)やAptanaJBoss IDE、NetBeansなどを試したことがありますが(試したもののうち本気で開発に使ったのはRADくらいですが・・・)、どれもめちゃくちゃ重かったので開発用ではない現在の営業ノートPCで動くかどうか不安になってきます。。。

Ws000004

インストールが終わるとショートカットアイコン作成の有無や、インストールするユーザーなどの設定ができますが、どれもデフォルトで問題なさそうです。

無事インストールが終了すると、ブラウザに「インストールしてくれてありがとうサンキュー画面」が開いて終了です。やれやれ。

起動~絶望

Ws000009

起動するとお決まりのワークスペース選択画面が表示されます。適当に選んで「OK」。

Welcomeページが表示されますが、特におもしろいこともないので閉じます。
まずはプロジェクトを作成してみます。

Ws000010

「File⇒New⇒Roo Project」を選択すると、プロジェクト作成ダイアログが表示されます。

Ws000012

プロジェクト名(Project name)に「hello」、パッケージ名(Top level packeage name)に「com.hello」と入力します。
その他、もしあれば別のバージョンのRooが選択(Roo Installation)できたり、Mavenの仕事を選択(Maven Support)できたり、ソースフォルダをワークスペース外に置くかどうか(Contents)の選択できたり、既存のプロジェクトとの関連付け(Working sets)などができるのですが、怖いのでとりあえず全部デフォルトにします。

「Next⇒Finish」でプロジェクトが作成され・・・ず、いきなり警告が出ます。

Ws000013

「Turn Weaving Service on? Should AJDT's weaving service be enabled?」
AJDTって何?と思いGoogleで調べたところ「AspectJ Development Tool」の略だそうです。
AspectJというのはバイナリベースのアスペクト指向プログラミング用ツールで、確かコンパイル済みのJavaバイナリに対してごにょごにょすることでログ出力や共通処理なんかをビジネスロジックから外部化するライブラリ(?)、だったと思います。3~4年くらい前は。当時、STSを提供するSpringsourceが擁するSpringFrameworkはインターフェースベースのアスペクト指向プログラミング(バイナリをいじるのではなく、対象がインプリメントしているインターフェースを実装した代理インスタンスのようなものを生成して、それらが実際のクラスへのメソッド呼び出しをインターセプトすることでポイントカットだかなんだかの横断的処理を紛れ込ませる方法)だったと思うので、全くの他人だったはずなんですが、今はひと固まりになっているんでしょうか。。ただ、リソースを食うらしいのと、AOPにはロクな思いでがないのでここは断固拒否します。

「Don't ask again until next upgrade」にチェックし、「No(!)」にしました。

これでプロジェクトは作成されるのですが、ただプロジェクトを作っただけなのにもうエラーが出ています。

Ws000014

正直どうしたらいいのかよくわかりませんが、IDEで開発するプログラマが、なんでもよきに計らってくれる系のフレームワーク(CoCとか)に逃げたくなる気持ちがよくわかります。私ももう逃げたいです。

チュートリアルに従って、次はGPE(Google Plugin for Eclipse)とDN(Data Nucleus)をインストールしたいと思います。GPEはRooが生成したGWTアプリケーションをGAEにデプロイするためのツール、DNはGAEへのデータ永続化などをしてくれるそうです。

インストールは「Extensions」タブから、とのことなんですが、パースペクティブをいくら見回してもそんなタブがありません。既に実務で使う気持はかなり萎えているのですが、ここまでに費やした時間を無駄にしないためせめてブログのネタにできるところまで進めようと思います。

ヘルプを検索すると・・・、

Ws000015

なんとIDE内蔵のブラウザでGoogleが開きました。「ググれカス」というやつですね、このタイミングで人間ですらないたかがIDEに言われると正直こたえます。しかも1件目が「Extensionsタブが動いてないんだけど」みたいなタイトルなので余計いやになります。

お望み通りググってやったんですがどうも役に立つ記事がみつかりませんでした。「Help⇒Install New Software⇒SpringSource...」すると「Extensions/*」という項目はあるんですが、Grails(Groovyというプログラミング言語を使ったオープンソースのWebアプリケーションフレームワーク)サポートがあっただけでした。

仕方がないので無視して先に進ませてください。

Springパースペクティブ(デフォルトで選択されているパースペクティブ。パースペクティブは右上の方にあるひび割れた豆腐にプラスのマークが付いたアイコンから変更可能)の下の方に「Rool Shell」というビューがありますので、そこからRooのコマンドをたたきます。

Ws000016

まず、上記ビューで「Open Roo Shell for projects...」を押すと、こんなダイアログが開きます。選択の余地はないので迷わずチェックして「OK(!)」です。(最初にプロジェクト作成時、作成したプロジェクトが選択済みで「Roo Shell」ビューが開いていることもあるようです)

Ws000017

そうすると・・・・?

Ws000019

Welcome!ヒャッハー!
その言葉が聞けるまでにもう3時間くらいたってるぜ、単に簡単なO/Rマッパが欲しかっただけなのによう!

という気持ちにさせてくれるビューが開きますので以下を入力します。

persistence setup --provider DATANUCLEUS --database HYPERSONIC_IN_MEMORY entity --class ~.server.domain.Employee --testAutomatically
field string --fieldName userName --sizeMin 3 --sizeMax 30
field string --fieldName department
gwt setup

すると*.java, *.aj, *.xml など、結構な量のファイルが生成されます。

Ws000021

そして結構な量のコンパイルエラーも。import で宣言されているクラスにパスが通らないとか、アノテーションの指定がおかしいとかなので、直そうと思えば直せるのでしょうが、ちょっと私のような素人では今後のお付き合いが難しそうなのでこのあたりで失敬しようと思います。

Springsourceのチュートリアルではこの後は以下のように続きます。

プロジェクトを右クリックして「Run As>Web Application」を選択。
そうすると、GWTベースのアプリケーションがロードされる。GAEにデプロイしたければ、Roo shellから「percistence setup」コマンドを叩けばよい。以下に例を挙げる。

"persistence setup --provider DATANUCLEUS --database GOOGLE_APP_ENGINE --applicationId the-name-you-setup-via-gae-web-ui"

その後は"mvn gae:deploy" と "mvn gae:rollback" でGAEへのインストールとロールバックができる。

ここまででDAOやEntityと思しきクラスが生成されていることはされているのですが、労力と得られた結果を鑑みると今回私が消化すべきタスクにSTSを活用するのは難しいという結果になりました。

生成されたクラス例その1

package com.hello.server.domain;

import org.springframework.roo.addon.dod.RooDataOnDemand;
import com.hello.server.domain.Employee;

@RooDataOnDemand(entity = Employee.class)
public class EmployeeDataOnDemand {
}

生成されたjクラス例その2

package com.hello.server.domain;

import org.springframework.roo.addon.test.RooIntegrationTest;
import com.hello.server.domain.Employee;
import org.junit.Test;

@RooIntegrationTest(entity = Employee.class)
public class EmployeeIntegrationTest {

    @Test
    public void testMarkerMethod() {
    }
}

生成されたソースのコンパイルエラー24個

まとめ
GAEとの連携であれば、Springのツールを使わなくてもGWTが提供しているEclipseのプラグインを使った方が簡単に動くと思います。半年くらい前に試した際は、何の問題もなく、ワンクリックでGAEと連携する環境を構築することができました。

今回うまくいかなかったのはきっと私が使い方をよくわかっていないのが主な原因だと思いますが、素人が軽い気持ちで手を出すようなものではないことはなんとなく理解できました。SpringFrameworkの理解しづらさとかEclipse拡張系Java開発環境やツールの不安定さは昔からこんなものだった気もしますので、もう少し調査や選定に時間をかけられるプロジェクトで威力を発揮するのでしょう。

最後に、印象に残ったSpringsourceの一文を引用して締めさせていただきたいと思います。

Google Plugin for Eclipse (GPE), carefully optimised to ensure complete compatibility with GWT applications produced by Roo and easy GAE deployment

・・・どこにあったんだその渾身の機能は。
それでは、よろしくお願いいたします。

巻末付録

Rooのコマンドリファレンス

http://static.springsource.org/spring-roo/reference/html/index.html


====================================================================

5月24日17時追記

SpringSourceの担当者よりサポートのメールが来たため現在不具合についてやり取りをしています。顧客サポートは案外手厚いのかもしれません。

(メールの内容を抜粋)

Hi Naoto,

Thank you for downloading SpringSource Tool Suite (STS) with integrated tools for Google.  I am your initial point of contact and will do my best to answer any questions you may have about SpringSource. If you have technical questions about STS, don’t hesitate to post them to the forum or make feature requests in our JIRA.

Forum: http://forum.springsource.org/forumdisplay.php?f=32
JIRA: https://jira.springsource.com/browse/TOOLS

As you may know, SpringSource and Google are committed to creating technology that is portable across cloud providers, improves developer productivity and helps you build amazing rich internet applications. I am interested to learn about how you are putting Spring, GWT, Roo or Google App Engine to good use within your company.

*Are the applications you are building designed just for use in the cloud? Do you plan to also run your application
in a lightweight container like Apache Tomcat?
*Have you tried using Spring Roo to scaffold or extend your application?
*Will your applications use GWT for the presentation tier technology? Are there other Google technologies that you
want Spring to easily integrate with?

Again, if you have any questions let me know if I can help.

また、エントリ本文中にあったRoo Shellの実行ログは長い上に情報としての価値が低いので削除しました。

====================================================================

5月24日18時追記

Springsourceのサポートから返信が来てました。

【サポート】
フォーラムで質問してみてよ。
だいたい数時間で返事があるよ。

【私】
ああ、すぐわからないなら大丈夫。
あまりにも最初でつまづいたので質問するのに必要な情報すらないんだ。

(終了)

また数カ月したら試してみようと思います。

 

 

Comment(2)