1時に寝て7時に起きた。休みだとやっぱりだらだらしてしまうな。
bolt for java on quarkus
昨日の続き。スクラッチから quarkus のアプリケーションの設定を gradle で行う。quarkus の上で slack apps としてのコマンドとイベントの振る舞いだけ確認した。
私は新規に開発する java アプリケーションは gradle を使うようにしている。これは java のよくないところだろうけれど、言語コミュニティが提供するパッケージマネージャやビルドツールがないから複数のツールが乱立している。maven から gradle に緩やかに移行していくのかな?と私は考えていたけれど、昔からあるライブラリのビルドツールを変更するのは労力に見合うメリットがないのか、maven も依然としてずっと使われ続けていくのかもしれない。maven と gradle の両対応という保守コストは、この先しばらく java コミュニティが抱えていく保守コストと言えるのかもしれない。quarkus はさらに独自の Quarkus CLI というビルドツールを提供している。そのため、ビルドのための設定だけで quarkus cli, maven, gradle の3つの方法があり、ドキュメントにもそれぞれの設定方法が書いてある。これを保守する方も使う方もややこしくて大変だなぁという印象を受けた。
BUILDING QUARKUS APPS WITH GRADLE をみながら次の maven cli で作った gradle プロジェクトのテンプレートをみながら build.gradle の設定をした。
$ mvn io.quarkus.platform:quarkus-maven-plugin:2.12.3.Final:create \
-DprojectGroupId=my-groupId \
-DprojectArtifactId=my-artifactId \
-Dextensions="resteasy-reactive,resteasy-reactive-jackson" \
-DbuildTool=gradle
あと私は設定ファイルを yaml で管理したいので次の拡張も追加した。gradle タスクでも定義されていて次のように実行する。
./gradlew addExtension --extensions="quarkus-config-yaml"
この cli がやっていることは基本的に dependencies に次の1行を追加するだけ。
dependencies {
implementation 'io.quarkus:quarkus-config-yaml'
...
}
設定ファイルを yaml から読み込めるようになると初期設定は次のようになる。
$ vi app/src/main/resources/application.yaml
quarkus:
http:
port: 3000
log:
level: INFO
category:
"com.slack.api":
level: DEBUG
"tutorial.bolt.sample":
level: DEBUG
package:
type: uber-jar
開発サーバーは次のようにして起動する。
quarkusDev enables hot deployment with background compilation, which means that when you modify your Java files or your resource files and refresh your browser these changes will automatically take effect. This works too for resource files like the configuration property file. The act of refreshing the browser triggers a scan of the workspace, and if any changes are detected the Java files are compiled, and the application is redeployed, then your request is serviced by the redeployed application. If there are any issues with compilation or deployment an error page will let you know.
https://quarkus.io/guides/gradle-tooling#dev-mode
hot deployment 機能のおかげでソースや設定ファイルを変更すると自動的に反映される。他の言語なら普通の機能かもしれないけど、java でもそういう仕組みが普通になったんだなと思って感心した。変化に付いていけない開発者のような気持ちになった。