[Java]sinatraみたいなフレームワーク「spark」

2013.09.13

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

sinatraみたいなフレームワーク

sinatraとは、Rubyの軽量WEBフレームワークです。
小規模なアプリケーションに特化しており、直感的に記述できて人気らしいです。
今回紹介するsparkは、そんなsinatraにインスパイアされて開発されたフレームワークみたいです。

セットアップも簡単なので、試してみましょう。

環境構築方法

今回使用した動作環境は以下のとおりです。

  • OS : MacOS X 10.7.5
  • Apache Maven : 3.0.3
  • Java : 1.7.0_17

sparkを試してみる

では、プロジェクトを作成してsparkを動かしてみましょう。
まずはmavenを使ってプロジェクトのひな形を作成します。

% mvn archetype:create -DgroupId=com.example -DartifactId=sample

生成されたpom.xmlを次の用に修正します。sparkライブラリの依存関係を追加しましょう。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.example</groupId>
  <artifactId>sample</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>sample</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    
    <!-- sparkライブラリ追加ここから -->
    <dependency>
      <groupId>com.sparkjava</groupId>
      <artifactId>spark-core</artifactId>
      <version>1.1</version>
    </dependency>
    <!-- sparkライブラリ追加ここまで -->

  </dependencies>
</project>

installコマンドを使い、sparkをインストールしておきましょう。

% cd path/your/sparkProject
% mvn install

下記コマンドを実行してEclipseプロジェクト化した後、Eclipseにimportします。

% mvn eclipse:eclipse
//Eclipseでimportをする

Eclipseで、生成されたApp.javaを編集しましょう。
sparkでは次のようにmainメソッドに記述すれば、組み込みのjettyで動かすことができます。

//srcs/spark/sample/src/main/java/com/example/App.java
package com.example;

import static spark.Spark.*;
import spark.*;

public class App {
   public static void main(String[] args) {
      get(new Route("/hello") {
         @Override
         public Object handle(Request request, Response response) {
            return "Hello World!";
         }
      });
   }
}

ここでは、/helloにGETリクエストがきたら、「Hello World!」という文字列を返しています。
見ただけでどんな処理をしているか、すぐにわかりますね。
また、get関数以外にはpost/put/delete等の関数があり、main関数に続けて記述することで、複数のルート情報を追加できます。

では、アプリを実行してみましょう。通常のJavaアプリを実行するときと同じく、Appクラスを実行します。

//実行時のコンソール
== Spark has ignited ...
>> Listening on 0.0.0.0:4567

アプリが起動したら、ブラウザでアクセスしてみましょう。デフォルトでは4567番ポートで起動します。
http://localhost:4567/helloにアクセスすると、画面に文字列が表示されます。

まとめ

たしかに、直感的でわかりやすいですね。
もちろんフィルタやビューテンプレート等、ある程度の機能はそろっているので、確認してみてください。

参考サイトなど