組込みJettyとsinatraで作るお手軽Web環境

作業用スクリプトの管理ツールみたいなのをサクッと作りたかったんだけどRubypythonで普通に作るとgemとかの依存ライブラリの管理が面倒。
その点は依存ライブラリをwarに固めてJVMさえあればどこでも動くJavaは本当にすごいと思う。

というわけで、JRubyを使ってwarに固めてどこでもお手軽に使えるWebアプリの作り方を調べたのでまとめときます。
え、Javaで書けば良いって? だって面倒じゃん。

まずはJRubyを入れるところから。Linux環境ならrvmが楽ですね。

$ rvm install jruby-head $ rvm use jruby-head 

次にwarblerbundlerをインストール.

$ gem install warbler bundler

では、アプリを書きましょう. 1から作っても良いけど、こちらに出来たものあるのでそれ使います。

$git clone git://github.com/koduki/sinatra_quickstart.git

各種設定ファイルはこんな感じ.

$cat config/warble.rb 
# Disable Rake-environment-task framework detection by uncommenting/setting to false
# Warbler.framework_detection = false

# Warbler web application assembly configuration file
Warbler::Config.new do |config|
  config.dirs = %w(app config tmp)
  config.includes = FileList["init.rb"]
  config.gems += ["sinatra"]
  config.gems -= ["rails"]
  config.gem_dependencies = true
end
$ cat Gemfile 
source "http://rubygems.org"

gem "sinatra"
gem "sequel"

group :development do
  gem "warbler"
end
$ cat Rakefile 
require 'rubygems'
require 'warbler'

Warbler::Task.new

config/warbleがwarを作るときの設定ファイル. あとwarを作るときはGemfileの設定を依存ライブラリとして自動で組み込むようのでbundler以外でライブラリを管理しない方が楽そう。

warの作成はrakeコマンドで。

$ rake war

これでglassfishやらtomcatやらに乗せれば完了なのだけど、それも面倒なのでjenkinsみたいにスタンドアローンでwarを起動出きるようにjettyを組み込みます。

standalone-warという超便利なgradleが公開してあるのでこちらを使います。Groovyとかgradleとかはどこのご家庭にもあると思いますのでインストールは省略.

$ git clone https://github.com/xlson/standalone-war.git
$ cd standalone-war/standaloneify
$ echo "outWar=build/webapp-standalone.war" > gradle.properties
$ gradle -PinWar=ruby/deploy_test/deploy_test.war    

これでwebapp-standalone.warというjettyを組み込まれたwarが出来ます。超すごい!

実行する時はこんな感じ

$ java -jar build/webapp-standalone.war

これで、どこでもお手軽に動かせるWebアプリの完成ー。
必要なライブラリを足してもwarにまとまってるから取り回しが楽なのが魅力ですね。JavaEEはほんとその辺良く考えられてるよなぁ。

では、Happy Hacking!