NetBeansとScalaを使ってAppEngineたんといちゃいちゃする方法
俺「新しいアプリだよ。さぁ、デプロイするからAppSlotを解放するんだ…!」
appengineたん「で、でぷろい…ですか…?こんなおっきなあぷり…は、入るかな…?」
俺「今日はScalaを使ったアプリケーションなんだよ」
appengineたん「Scalaなんて…そんな変態的なこと…で、できません ///」
俺「もう遅いよ。どうだ? どんどんアプリがアップロードされていくぞ!」
appengineたん「は、入りました…。こんなおっきなアプリケーション…あついです…」
俺「よしテストだ。どんどんリクエストをおくってやるからな」
appengineたん「そ、そんなにリクエストされたら…らめぇっ!!SpinUpしちゃうぅっ!!」
俺「まだまだいくぞ。おらっ!データストアにputしてやるっ!」
appengineたん「らめぇぇ!あっ、あふれちゃうっ!!データが…quotaからあふれちゃうよぉぉっ!!」
自分の頭の悪さに絶望しました。どうみても手遅れです本当にあり(ry
ねたはさておき、Scala2.8 + NetBeans6.8で、Google App Engine/Javaの環境の作り方についてまとめました。
NetBeanでScala
NetBean6.8入れる
まずはNetBean6.8を入れますよ。ダウンロー丼してインスコれ!!
http://netbeans.org/downloads/
NetBeans Scala plugin
次に、NetBeans Scala pluginを入れます。
http://wiki.netbeans.org/Scala68v1#Install_with_NetBeans_6.8
ダウンロードしたファイルを適当なとこに解凍しておきます。
次に、NetBeansのメニューから[ツール]→[プラグイン]を選び、[ダウンロード済み]のタブを開きます。[プラグインの追加]ボタンを押して、先ほど解凍したNetBeans Scala pluginのフォルダを表示させ、*.nbmファイルを全て選択します。
これでインストールを押すと、プラグインがインストールされます。
MaxOSXの人は、Scala実行環境のパスを環境変数に設定しておく必要があります。
NetBeansをインストールしたフォルダ(通常は"/Applications/NetBeans/NetBeans 6.8.app/Contents/MacOS")に、environment.plistと言うファイルを以下の内容で作ります。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>SCALA_HOME</key> <string>/Users/ozaki/dev/Scala/scala-2.8.0.Beta1-prerelease/rt</string> <key>PATH</key> <string>/opt/local/bin:/opt/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/Users/ozaki/dev/Scala/scala-2.8.0.Beta1-prerelease/rt/bin</string> </dict> </plist>
SCALA_HOMEには、Scala2.8をインスコしたパスを、PATHには、Scala2.8のbinディレクトリを絶対パスで追加します。このファイルを作成したら、一度ログアウトしないと有効になりませんので注意が必要です。
Google App Engin Pluginを入れる
Google App Engine SDK
まず、Google App Engine SDKが無ければダウンロー丼しておくべし。
Google App Engine Plugin
[ツール]→[プラグイン]を選び、[設定]のタブを開きます。[追加]ボタンを押して、"http://kenai.com/projects/nbappengine/downloads/download/Latest_NetBeans68/updates.xml"を追加します。
[使用可能なプラグイン]タブを開いて[カタログを再読込]すると、GoogleAppEngineのプラグインが一覧に表示されますので、全て選択して[インストール]します。
プラグインのインストール後に、GoogleAppEngineのサーバーをサービスに追加します。
左側の[サービス]タブを表示し、"サーバー"を右クリックして[サーバーの追加]を選びます。
"Google App Engine"を選択して次へ。
"Installation Location"には、Google App Engine SDKを解凍したディレクトリを指定します。
Google App Engine Libraryの追加
[ツール]→[ライブラリ]を選び、"新規ライブラリ"を選びます。
名前に"AppEngineLibs"と入力し、"jar/フォルダを追加"を押して、Google App Engine SDKを解凍したディレクトリにある"user/appengine-api-1.0-sdk.jar"を選択して追加します。
サンプルプロジェクトを動かしてみる
Google App Engine SDKに付属しているサンプルアプリを動かしてみましょう。
[プロジェクト]→[新規作成]を選び、"サンプル"の中にある"Google App Engine"のGuest Bookを選びましょう。
できたプロジェクトを実行すると、ブラウザで動作が確認できます。
ScalaでApp Engineを動かしてみる
Webアプリケーションプロジェクト
では、ScalaでApp Engineを動かしてみましゅ。
[ファイル]→[新規プロジェクト]を選んで、"Java Web"の"Webアプリケーション"を選択します。
プロジェクト名などを入力して、"サーバーと設定"のところでサーバに"Google App Engine"を選んで完了です。
Scalaプロジェクト
Scalaを使う場合、Webアプリケーションプロジェクトとは別にScalaプロジェクトを用意します。このプロジェクトを先ほど作ったWebアプリケーションプロジェクトから参照させる形です。
[ファイル]→[新規プロジェクト]を選んで、"Scala"の"Scala Class Library"を選択します。
出来たプロジェクトのライブラリを右クリックして[ライブラリを追加]を選び、"AppEngineLibs"と"Scala28"を追加します。
プロジェクトを→クリックして、[新規]→[その他]から"Scala"の"Scala Class"を選んで新規作成します。
内容をこんな感じにします。
package testapp class FirstScala { def someMethod() = { "This comes from Scala!!" } }
Webアプリケーションプロジェクトを変更する
Webアプリケーションプロジェクトのライブラリを右クリックして[ライブラリを追加]を選び、"AppEngineLibs"と"Scala28"を追加します。
次に、Webアプリケーションプロジェクトのライブラリを右クリックして、[プロジェクトを追加]を選びScalaプロジェクトを追加します。
"Webページ"にあるindex.jspを修正します。
<%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <%@page import="testapp.FirstScala"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <h1>Hello World!</h1> <p>Test: <%= new FirstScala().someMethod() %></p> </body> </html>
実行
Webアプリケーションプロジェクトを実行すると、ブラウザに画面が表示されます。
もしここで、SCALA_HOMEが読み込めないというAntのエラーが出る場合は、 Scalaプロジェクトの"nbproject/build-impl.xml"を開き、-init-privateターゲットないでscala.homeを絶対パスで設定するようにしてみてください。
<target depends="-pre-init" name="-init-private"> <property file="nbproject/private/config.properties"/> <property file="nbproject/private/configs/${config}.properties"/> <property file="nbproject/private/private.properties"/> <property environment="env"/> <condition property="scala.home" value="${env.SCALA_HOME}"> <isset property="env.SCALA_HOME"/> </condition> <property name="scala.home" value="/Users/ozaki/dev/Scala/scala-2.8.0.Beta1-prerelease/rt"/> <property name="scala.lib" value="${scala.home}/lib"/> <fail unless="scala.home"> You must set SCALA_HOME or environment property and append "-J-Dscala.home=scalahomepath" property to the end of "netbeans_default_options" in NetBeansInstallationPath/etc/netbeans.conf to point to Scala installation directory. </fail> <property name="scala.compiler" value="${scala.lib}/scala-compiler.jar"/> <property name="scala.library" value="${scala.lib}/scala-library.jar"/> <taskdef resource="scala/tools/ant/antlib.xml"> <classpath> <pathelement location="${scala.compiler}"/> <pathelement location="${scala.library}"/> </classpath> </taskdef> </target>