自分用メモ:Micronautを初めて触ってみた

公式ドキュメントを読みながら、特に深く考えずにちょこちょこ触ってみたのをメモ。

公式ドキュメント:https://docs.micronaut.io/latest/guide/index.html

## 準備

SDKMANでインストールして

❯ sdk current micronaut

Using micronaut version 1.0.4

なんとなくSpock使えるなら使っとこかくらいでプロジェクトを生成した。オプションが色々つけられるっぽい。

❯ mn create-app hello-world --features spock 

たぶん、Spock使うようにしたからかなと思うんだけど、IDEAとの連携がうまくいかなくて、とりあえずGradleのコマンドを直接叩く感じで使っといた。

## ざっくり流し読み

で、ドキュメントを流し読みながら、コントローラーを書いたり

@Controller("/hello") 
public class HelloController {
    @Get(produces = MediaType.TEXT_PLAIN) 
    public String index() {
        return "Hello World"; 
    }
}

テストを書いたり

class HelloControllerSpec extends Specification {

  @Shared
  @AutoCleanup
  EmbeddedServer embeddedServer =
      ApplicationContext.run(EmbeddedServer)

  @Shared
  @AutoCleanup
  HttpClient client = HttpClient.create(embeddedServer.URL)

  void "test hello world response"() {
    expect:
    client.toBlocking()
        .retrieve(HttpRequest.GET('/hello')) == "Hello World"
  }
}

HTTP Clientも簡単に作れるよってので、ふーんSingleってRxかぁと思いながら(よくわかってない

@Client("/hello") 
public interface HelloClient {
    @Get 
    Single<String> hello(); 
}

それを使ったテストを追加してみて

  @Shared
  HelloClient client2 = embeddedServer
      .applicationContext
      .getBean(HelloClient)

  void "test hello world response2"() {
    expect:
    client2.hello().blockingGet() == "Hello World"
  }

JARにかためて動かしてみた。

❯ java -jar build/libs/hello-world-0.1-all.jar
00:03:59.035 [main] INFO  io.micronaut.runtime.Micronaut - Startup completed in 1209ms. Server Running: http://localhost:8080

IoCとかConfigurationのところをざーっと読んで、SpringBootそのままだなと思った。

ひととおりの機能が揃ってるんだなぁって思いながら、Thymeleafもサポートしてるっぽいので作ってみて

f:id:bufferings:20190212001243p:plain:w200

Cloud Native Featuresのところは僕はk8s使うと思うからあんまり気にしなくて良さそうだし、サーバーレスは今のところ興味ない。

Jaeger連携もあったので、良くわからないままとりあえず実行だけしといた。

f:id:bufferings:20190212001929p:plain:w300

## ざーっと見た感想

  • DBとつないでAPIとしてデータを返してみたい
  • テンプレートエンジンも使ってみたい
  • Kafkaとの連携でイベント処理をしてみたい
  • メトリクス周りどんな感じなんだろうな?
  • GraalVMのnative image作成で遊んでみたい

そんなところかなー。面白そう。