Siden

LambdaとUndertowで
軽量フレームワーク

自己紹介

  • 悪くないモンスターの太一です。
  • java-jaからきますた
  • さにあらず
  • ryushi@twitter
  • taichi@GitHub
  • taichi#1881 @ Diablo3
  • Dragon Age: Inquisition

Javaの鉱脈

書いてます

12/23発売の最新号では
DBマイグレーションについて書きました

感想聞かせて下さい

その為に今日来た

Sidenとは

使い方


import ninja.siden.App;

public class Main {
    public static void main(String[] args) {
        App app = new App();
        app.get("/hello", (req, res) -> "Hello world");
        app.listen();
    }
}

何故作ったか?

SparkJavaに激怒したから

  • Apache Sparkと名前被り
  • static importはeclipseと相性が悪い
  • 今更Jetty依存はダサい
  • 拡張性低すぎワロタ
  • spark.SparkBase#initがクソコード過ぎる
  • そこら中にある同期コードがクソすぎる
  • レスポンスのデカいStringがメモリに乗る

Java8を深く理解するため

  • GenericsとLambdaの組み合わせ方は?
  • LambdaをStructural Subtypingとして使うと拡張性が豊かになる
  • LabmdaでfluentなビルダAPIをどう設計する?
  • interfaceのdefault実装やstaticメソッドはどう使う?
  • Optionalの有効な使い方は?
  • CompletableFutureはスーパー簡単!

最先端の砂場が欲しい

  • expressモドキでアプリを書き捨てする
  • Undertowの非同期I/Oを使い倒す
  • Undertowはコードが綺麗なので読んでて楽しい
  • React.jsのSSRサポート

WebSocketを使うサンプル


import ninja.siden.App;

public class UseWebsocket {
    public static void main(String[] args) {
        App app = new App();
        app.get("/", (q, s) -> new java.io.File("assets/chat.html"));
        app.websocket("/ws").onText(
            (con, txt) -> con.peers().forEach(c -> c.send(txt)));
        app.listen(8181);
    }
}

Javaなのに超短いコードでWebSocket出来るのはSidenだけ!

Sidenの今後

  • square/dagger連携
  • Doma連携
  • メトリクス機能(Netflix/servo連携)

ご清聴ありがとうございました