2009/11/23

GoogleAppEngineにGaelykとT2を仕込んでみる

Javaを勉強した後にLL系にいった自分としては、GAE/JでまたJavaをやるのはなぁと思っていた。だったらGroovyは?と思って調べていた時にGaelykと出会った。(GAE/Pはスルーしてました。PythonよりGroovyの方が好きなこともありますが…)
単純にGAE/JでGroovyを動くようにするには、こちらのブログに書いてある通りにすれば良いのだが、GaelykはGAEの様々な機能を使い易くしてくれている。特に「low-level datastore API」と「task queue API」に反応してしまった。

※詳しくはGaelykのTutorialページを参照。また、チュートリアルを日本語訳してくださっている方も

またT2を使うのは、URLが/hoge/foo.groovyとかになってしまうのがカッコ悪いから(笑)ではなく、WebアプリのURLはできるだけアーキテクチャに依存されないようにすべきという考えに基づき、/hoge.拡張子やら?p=fooを排除したいのと、T2でURLマッピングしていた方が、後々何かあったときに柔軟に対応できそうな気がするから。

思いの他、前置きが長くなってしまったが、とりあえず、セットアップのメモ。

環境はこんな感じ。
  • Mac OS X 10.5.8 (Leopard)
  • Eclipse 3.5
  • appengine-java-sdk-1.2.6
  • Groovy 1.7-beta-2
  • Gaelyk0.3.1
  • T2 0.6.2-ga
  • T2 extension modules 0.6.2-ga
  • Google Guice 1.0
あと、Javaは1.6を使います。(多分T2が1.6じゃないといけないから)

では、Eclipseでプロジェクトを作成し、それをカスタマイズしていきます。

1.GAEのプロジェクトを作成します。(GWTは使わないので外してます)


2.デフォルトで展開されるファイルはこんな感じ


3.下記から必要なファイルをダウンロードして必要なjarを集め、プロジェクトに追加していきます。

gaelyk-template-project-0.3.1.zip
http://gaelyk.appspot.com/download/

t2-0.6.2-ga.zip
t2-ext-0.6.2-ga.zip
http://code.google.com/p/t-2/downloads/list

guice-1.0.zip
http://code.google.com/p/google-guice/downloads/list

必要なjarはコレ



4.追加するとこんな感じ

※外して良いjarもあると思いますが、調べてないのでそのままいきます。

5.Javaコンパイラーを1.6に設定します


6.ビルドパスに「t2-0.6.2-ga.jar」を追加します


7.設定ファイルを編集します
・Gaelyk031_T2_Sample/build.groovy
new AntBuilder().sequential {
    webinf = "war/WEB-INF"

    gaeHome = System.getenv("APPENGINE_HOME")
    if(!gaeHome) {
        println "To build your file you have to set 'APPENGINE_HOME' env variable pointing to your GAE SDK."
        System.exit(1)
    }

    taskdef name: "groovyc", classname: "org.codehaus.groovy.ant.Groovyc"

    groovyc srcdir: "src", destdir: "${webinf}/classes", {
        classpath {
            fileset dir: "${webinf}/lib", {
                include name: "*.jar"
            }
            fileset dir: "${gaeHome}/lib/", {
                include name: "**/*.jar"
            }
            pathelement path: "${webinf}/classes"
        }
        javac source: "1.6", target: "1.6", debug: "on"
    }
}

・war/WEB-INF/web.xml



    
        Guice Servlet Filter
        com.google.inject.servlet.GuiceFilter
    
    
    
        t2
        org.t2framework.t2.filter.T2Filter
        
            t2.rootpackagepackage com.keygraphix.gae.sample
        
            t2.container.adapterorg.t2framework.t2.adapter.GuiceAdapter
        
            t2.eagerloadtrue
        
            t2.exclude-resourcescss, js, png, gif, jsp, jar
    
    
    
        Guice Servlet Filter
        /*
    
    
    
        t2
        /*
    
    
    
        GroovletServlet
        groovyx.gaelyk.GaelykServlet
    
    
    
        GroovyServlet
        groovy.servlet.GroovyServlet
    
    
        GroovyServlet
        *.groovy
    


7.src/com.keygraphix.gae.sample/IndexPage.javaを作成
package com.keygraphix.gae.sample;

import org.t2framework.t2.annotation.core.Default;
import org.t2framework.t2.annotation.core.Page;
import org.t2framework.t2.navigation.Forward;

@Page("/")
public class IndexPage {
    @Default
    public Forward index() {
        return Forward.to("/index.groovy");
    }
}
※ここがJavaなのは、Groovyでの動かし方が分からなかったから。でもGroovyで書いてもコード量減らないですよね。

8.war/WEB-INF/groovy/index.groovyを作成
html.html {
    head {
        title "Hello"
    }
    body {
        p "Hello Gealyk & T2 Sample"
    }
}

9.サーバの起動


10.で確認ブラウザ


これで最低限動くようになりました。あとは、バリバリ開発していくだけ?ですね。

プラグインで一発環境構築とかできるようになりたいなぁ。
あと、SyntaxHighlighterの表示が思った通りにならないので、これも課題だなぁ。