公式ドキュメントを読みながら、特に深く考えずにちょこちょこ触ってみたのをメモ。
公式ドキュメント: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もサポートしてるっぽいので作ってみて
Cloud Native Featuresのところは僕はk8s使うと思うからあんまり気にしなくて良さそうだし、サーバーレスは今のところ興味ない。
Jaeger連携もあったので、良くわからないままとりあえず実行だけしといた。
## ざーっと見た感想
- DBとつないでAPIとしてデータを返してみたい
- テンプレートエンジンも使ってみたい
- Kafkaとの連携でイベント処理をしてみたい
- メトリクス周りどんな感じなんだろうな?
- GraalVMのnative image作成で遊んでみたい
そんなところかなー。面白そう。