sbt0.10.1 で google app engine を試す方法。そして sbt の plugin の仕組み自体の簡単な説明など


2012年2月くらいに追記:
ちょっとsbtとappengine pluginのversionが古くて、設定のやりかた変わっていたりするのでから、リンク先のコードはあまり全部を参考にしないほうがいいかも



今まで

という構成でGAEをやってました。この前つくった commit log を tweet する bot のコードもgoogle code に置いてあります*1


SVN使ってたのは、それまで慣れてたからということや、plugin が google の id と結びついていて*2それなりに便利だし、安定してるしという理由です。


で、今までは、GAEで何か作るのにmavenとかsbtとかそもそも使ってませんでした。依存ライブラリのjarはそのまま突っ込んでSVNに登録しちゃってました。簡単なものを作るのには、そこまでbuildのときに複雑なことやるわけじゃないので、どうにかなるわけですが、いやしかしいい加減ちゃんと管理するべきだろ自分・・・(´・ω・`)


ということで、どうせなら sbtの0.10系使って、eclipseはとりあえず使わずに、gitもつかって全部コマンドラインからやってみよう!ということで、 sbt-appengine plugin を使ってやってみました。


で、その結果を github に置いておきました(´・ω・)つ https://github.com/xuwei-k/sbt-appengine-prototype/

以下簡単に説明

sbtの0.10系にはpluginという仕組みがあります*3

sbt の plugin については ここに公式のdocument があり、またここにpluginの一覧があります
sbtのドキュメントはgithubのwikiからscala-sbt.orgに移りました!
このdocument には plugin の作成方法まで書いてありますが、利用者側が使う場合に最初に最低限やることはおそらく2つで

  1. /project/plugins の下に build.sbt または「full configration のプラグインのためのプロジェクトの設定ファイル」を書く
  2. /project の下の build.sbt または「full configration のプロジェクトの設定ファイル」に、設定をimportする

ということをします。具体的には今回の場合

*4

ところでsbtは単に「sbt」というコマンドを打つと、sbtのコンソールが立ち上がるわけですが、デフォルトの状態で以下のように169個コマンドがあるようです。

sbtの対話型のコンソールはダブを打つと補完が効くので、上記の様に1文字も打って無い状態でtabキーを打つと「おぃおぃ169個も候補あるけどほんとに全部表示するのか?」と聞かれます。

上記がsbt0.10.1でのpluginを入れないデフォルトの状態なわけですが、例えば今回の appengine-sbt の plugin を入れると こんな感じで 19 個増えて188個になってます。

このように sbt 自体の key を追加できるようになっているようです。


これ以上の使い方とか自分も今勉強中なのであれなんですが、あとKeyを階層的というかplugin毎に名前空間に属するような感じで作っておく(?) *5ことができるらしく、" appengine: "まで打ってtabを打つと以下のようになります

それぞれのコマンドの具体的な使い方は自分も把握してないんですが、githubにおいたサンプルにあるように、最低限
「/src/main/webapp/WEB-INF」の下に、appengine-web.xmlと、web.xmlを置いて、sbtのコンソール上で"appengine:deploy"というコマンドを打つとデプロイできました。

ちなみに、このappengine-sbt pluginはもともとyasushi さんが 0.7 系用で作ったもの を eed3si9n さん*6が 0.10系用に porting したものです。*7


ところで、もとのyasushiさんのものには、JRebelのオプションがある みたいですが、0.10系の eed3si9n さんのものには、このblog書いた時点(2011年8月7日) ではREADMEに「actually, JRebel support is not ported yet」と書いてあります (´・ω・`)


誰かこれやってたりしないんですかね?気が向いて時間があれば自分がforkしてやってみたい気もしますが。sbtのpluginを書くことにより色々便利に使えるし、plugin自体がScalaコードなのでScalaの勉強にもsbtの勉強にもなるので、みんな( べつにこの件に限らず )sbtのplugin書かないか?(・ω・´)


とGAEのこととpluginのことと色々書いてごちゃごちゃになってしまいましたが、今日はこの辺で(´・ω・`)

*1: twitterのkeyなどを含んだファイルが除いてあるので、そのままだとコンパイルできませんが

*2:google codeの自分が管理してるプロジェクトと紐付けて、簡単にimportしてプロジェクトつくれる

*3: 0.7系のときのもあったらしいが、ほとんど使ってないので詳しいことは知らぬ(´・ω・`)

*4: なんとなく、plugin のほうはbasic で、 project 自体は full になっているが、大した意味はない。basicとfullのどっちがいいのか?とか使い分けとかまだちゃんと理解してない。とりあえずサブプロジェクトとか複雑なことやりたいときはfullにするらしいが。このくらいのものならば別にどっちでもいいとおもう

*5: この言い方がただしいのかどうかが微妙・・・(´・ω・`)

*6: このサイト の作者の人で、 CollectionAPIやActorのドキュメント訳してくれたり 非公式 sbt 0.10 ガイド や、モナドはメタファーではない などとても有用な記事を訳してくれたりしてる方です

*7: twitter上でこんな会話が https://twitter.com/#!/yasushia/status/99356690574606336 https://twitter.com/#!/eed3si9n/status/99360218500173824 https://twitter.com/#!/yasushia/status/99360868919291904 https://twitter.com/#!/yasushia/status/99361027988275200