CLOVER🍀

That was when it all began.

QuakusのExtension Codestartの配置場所について

これは、なにをしたくて書いたもの?

Quarkusを使っていると、選択したExtensionに応じて初期コードが配置されます。たとえば、以下のような表示ですね。

[INFO]
applying codestarts...
[INFO] 📚  java
🔨  maven
📦  quarkus
📝  config-properties
🔧  dockerfiles
🔧  maven-wrapper
🚀  resteasy-reactive-codestart

選択した言語やビルドツール、Extensionに応じて内容が変わるのですが、これはどこから来ているのだろう?というのが気になりまして。

ちょっと情報を追ってみました。正確に言うと、どこかのエントリーの中に軽く含まれていると思うのですが、完全にオマケ扱いで
探すのが面倒になったので今回あらためて書こうかなと…。

今回は、Quarkus 2.7.1.Final時点の情報で見ています。

Extension codestart

調べてみると、このあたりにありそうですね。

https://github.com/quarkusio/quarkus/tree/2.7.1.Final/independent-projects/tools/base-codestarts

https://github.com/quarkusio/quarkus/tree/2.7.1.Final/independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/extension-codestarts

たとえば、RESTEasy Reactiveだとこちら。

https://github.com/quarkusio/quarkus/tree/2.7.1.Final/independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/extension-codestarts/resteasy-reactive-codestart

こういう設定が初期コードの雛形の元のようですね。

https://github.com/quarkusio/quarkus/blob/2.7.1.Final/independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/extension-codestarts/resteasy-reactive-codestart/codestart.yml

name: resteasy-reactive-codestart
ref: resteasy-reactive
type: code
tags: extension-codestart
metadata:
  title: RESTEasy Reactive
  description: Easily start your Reactive RESTful Web Services
  related-guide-section: https://quarkus.io/guides/getting-started-reactive#reactive-jax-rs-resources
language:
  base:
    data:
      resource:
        class-name: ReactiveGreetingResource
        path: "/hello"
        response: "Hello RESTEasy Reactive"
    dependencies:
      - io.quarkus:quarkus-resteasy-reactive
    test-dependencies:
      - io.rest-assured:rest-assured

https://github.com/quarkusio/quarkus/blob/main/independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/extension-codestarts/resteasy-reactive-codestart/java/src/main/java/org/acme/%7Bresource.class-name%7D.tpl.qute.java

一方で、このあたりも該当しそうです。

https://github.com/quarkusio/quarkus/tree/2.7.1.Final/devtools/project-core-extension-codestarts

https://github.com/quarkusio/quarkus/tree/2.7.1.Final/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/extension-codestarts

WebSocket等はこちらにあります。

https://github.com/quarkusio/quarkus/tree/2.7.1.Final/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/extension-codestarts/websockets-codestart

このあたりについて、ドキュメントがありました。

Quarkus - Extension codestart

https://github.com/quarkusio/quarkus/blob/2.7.1.Final/docs/src/main/asciidoc/extension-codestart.adoc

この仕組みは、Extension Codestartと呼ぶみたいですね。QuarkusのExtensionのコード生成システムだそうです。

"Extension Codestarts" is the name we gave to our Quarkus extension quickstart code generation system.

なお、このページ自体はここからはたどれなさそうですが…。

Quarkus - Guides - Latest

動作の説明はこちらに。

Extension Codestart / How it works

Quarkus自身が提供するExtension Codestartの配置場所についても書かれていました。

Extension Codestart / Where are the Quarkus Extension Codestarts located

Quarkusが提供するExtensionに関しては、こちらに配置されることになっています。

https://github.com/quarkusio/quarkus/tree/2.7.1.Final/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/extension-codestarts

In Quarkus core repo, the extension codestarts are all in the same module.

Extensionのうち、RESTEasy、RESTEasy Reactive、そしてSpring Web向けのものに関しては、以下に配置されています。

https://github.com/quarkusio/quarkus/tree/2.7.1.Final/independent-projects/tools/base-codestarts/src/main/resources/codestarts/quarkus/extension-codestarts

RESTEasy, RESTEasy Reactive and Spring Web extension codestarts are part of the base codestarts.

これで、Extension Codestartの配置先が2つあった意味がわかりましたね。

その他のExtension向けのものは、通常はRuntime ModuleにCodestartは含める形になるようです。

For other extensions, the codestart will typically be located in the runtime module (with special instruction in the pom.xml to generate a separate codestart artifact).

自分でExtension Codestartを書くこともできるようですが、今回はパス。

Extension Codestart / Writing an Extension Codestart

コード生成を駆動するコードは、こちらのようですね。

https://github.com/quarkusio/quarkus/tree/2.7.1.Final/independent-projects/tools/codestarts