2024年4月23日火曜日

Red Hat Buld of Apache Camel 4 向け開発ツール(VSCode Extension Pack for Apache Camel by Red Hat)

Red Hat Fuse 6.x の頃から開発ツールと言えば、 Eclipse plugin向けに提供されていた fuse tooling  時代が長く続きました。GUI camel ルート エディターを使い、blueprint.xmlを作成された方も多いかと思います。



時代は流れ、アップストリームの Apache Camel もメジャーバージョンが 2.x から 3.x -> 4.x とアップデートされ、Camel 2.x を内部で使用する Red Hat Fuse 7.x も 2024年6月30日をもって End of Life となります。  Red Hat Fuse 用開発ツールとして提供された fuse tooling のサポートも終了しております。今後は、Red Hat Build of Apache Camel 4.x が後継製品としてサポートされます。

今回の記事では、今後主力製品としてサポートされる Red Hat Build of Apache Camel 4.x 向け開発ツールをご紹介します。ツールの概要と簡単な使い方、最後にフィードバック方法について順に記載します。

まずはツール名について。オフィシャルドキュメントにも記載がありますが、VSCode Extension Pack を使った開発を推奨しております。名前は「Extension Pack for Apache Camel by Red Hat」です。

(camel コミュニティーではコーディングの入力補完が可能な IntelliJ IDEA向け camel plugin が提供されていますが、製品としてご案内しておりません。)

「Extension Pack for Apache Camel by Red Hat」には、Camel for Spring Boot、Camel for Quarkus、Camel-K の開発を補助する複数ツールが同梱されています。

その中でも、Camel に特化した注目すべきツールは2つ。

JBang を使った camel ベースの開発は以前、赤帽ブログでも紹介されました。camel-jbang は、JBangをベースに camelの動作確認やデバッグなどをスクリプト感覚で体験できる CLIツールです。積極的に開発が進んでおり、camel ルート の実行/管理/デバッグや camel ライブラリーのバージョン指定、maven projectの生成などなど、豊富な機能が提供されています。
製品ドキュメントでは、「camel CLI」として機能紹介がされています。

この使い勝手の良いコマンドラインツールと並び積極的に開発が進んでいるのが、 GUI camel ルート エディターの kaoto です。
現時点(2024年4月)では Technology Preview の扱いですが、GUI camel ルート エディターの本命として注目されています。

GUI camel ルート エディターがどういった使われ方をしているか、以前社内営業/SA/コンサルタント/TAM/サポートチーム から現場の声をヒアリングしまとめた事があります。
国内ユーザーで圧倒的に評価されていたのが、camel ルートの画像出力機能です。システム設計資料に camel ルートの画像を使う事で、直感的にわかりやすい資料が効率的に作成できるとのことです。kaoto の正式サポート開始を待ちわびる声も多く、一足先にこのブログでご案内することにしました。
それでは、早速使ってみましょう。

インストール方法

まずは、 camel-jbang のインストールです。Jbang をインストールした後に jbang コマンドで camel CLI app をインストールする流れです。こちらの詳細手順に沿ってご対応ください。(数分もかからない作業です。)
VSCode 環境が無い方は、こちらから入手可能です。
「Extension Pack for Apache Camel by Red Hat」のインストールは、こちらの手順に沿ってご対応ください。Java 17 以上が必要になりますので、ご留意ください。

Hello Worldの作成

それでは、実験用にディレクトリーを用意します。vs code terminal もしくは OS terminal で sample ディレクトリーを作成します。

]$ mkdir sample
]$ cd sample/

camel-jbang により、サンプル camel ルートを自動生成します。

sample]$ camel init hello.yaml
sample]$ cat hello.yaml 
# camel-k: language=yaml

# Write your routes here, for example:
- from:
    uri: "timer:yaml"
    parameters:
      period: "1000"
    steps:
      - setBody:
          simple: "Hello Camel from ${routeId}"
      - log: "${body}"

camel init コマンドは、拡張子(java/xml/yaml)を識別してそれぞれの camel DSL でサンプル camel ルートを生成します。 例えば、camel init camel.java と実行すると、Java DSL を使った camel ルートが自動生成されます。
現時点で kaoto は yaml DSL にのみ対応していますので、今回は hello.yaml を生成しました。

話が脱線しますが、もし既存の資産を kaoto で表示されたい場合、camel transfrom コマンドで yaml DSL へ自動変換可能です。

sample]$ camel init demo.java
sample]$ cat demo.java
// camel-k: language=java

import org.apache.camel.builder.RouteBuilder;

public class demo extends RouteBuilder {

    @Override
    public void configure() throws Exception {

        // Write your routes here, for example:
        from("timer:java?period={{time:1000}}")
            .setBody()
                .simple("Hello Camel from ${routeId}")
            .log("${body}");
    }
}
sample]$ camel transform route --format=yaml ./demo.java > demo.yaml
sample]$ cat demo.yaml 
- route:
    from:
      uri: "timer:java?period={{time:1000}}"
      steps:
        - setBody:
            simple:
              expression: "Hello Camel from ${routeId}"
        - log:
            message: "${body}"

kaoto 上で変換できる機能をリクエストしていますが、当面は  camel CLIにてご対応ください。

それでは、camelコマンドで生成した hello.yaml をkaotoで開きます。
VScode の Fileメニューから、"Open Folder" をクリックし、先ほど作成した sample ディレクトリーを開きます。Exploer に hello.yaml が表示されていますので、
右クリック -> Open With Kaoto Graphical Editor for Camel を選択します。画面に GUIエディターが表示されましたでしょうか。


拡張子が、 *.camel.yaml の場合、ファイルのクリックで GUI camel  ルートエディターが自動で使われます。
*.yaml の場合、テキストエディターがデフォルトで使われます。
普段どのエディターを頻繁に使われるかにより、拡張子を camel.yaml にするか、.yaml にするかご判断いただければと思います。
また、バグが報告されており、執筆時は直接ファイルをオープンした場合、camel-jbang の挙動が不安定になります。一旦、ディレクトリーを開いてからファイルを選択してください。

fuse tooling と同様、camel component アイコンをクリックすると設定編集画面が表示されますので、直感的にコーディングができます。


ルート画像下にあるアイコンを使い、ルートの縦表示/横表示を選んだり、ズームイン/アウトなどコントロール可能です。一番右の 「Open Catalog」は、camel component のカタログが表示されます。キーワードによるフィルタリングもあり、fuse tooling より閲覧性が大幅に向上しています。


camel ルートへコンポーネントを追加する場合、既存のコンポーネントのドット柄をクリックし、「Append」を選択します。 camel componentカタログが表示されるので、追加コンポーネントをクリックするとルートに追加されます。




もちろん、画面上のメニューから、camel ルートの画像出力が可能です。


Technology Preview ですので、使っていると細かいバグや不足している機能があるかと思います。ぜひ、kaotoコミュニティーや、弊社を通してフィードバックをお願いします。(具体的な方法はこのブログの最後にご案内します。)


Hello World の実行

hello.yaml が開いている状況で、画面右上にある "Run Camel Application with JBang" をクリックしてください。


VSCode Terminalで camel routeが実行されるはずです。


fuse tooling を使っていたユーザーには、「Run As  Local CamelContext」が馴染み深いかと思いますが、Quarkus や SpringBoot を使わず、camel-jbang を使い camel ルートの動作確認を簡単に試したい状況に有用です。

GUIメニューから camel ルートを実行しましたが、ターミナルで camel run コマンドを実行しても同様の結果が得られます。camel run コマンドには豊富なオプションが用意されています。例えば、--camel-version オプションで camelライブラリーのバージョンを指定可能です。実際にご利用予定のバージョンや、マイグレーション作業の際にアップデート後のバージョンを指定する事で、簡単な動作検証が可能です。

sample]$ camel run --camel-version=4.0.0 hello.yaml 
[jbang] Resolving dependencies...
[jbang]    org.apache.camel:camel-bom:4.0.0@pom
[jbang]    org.apache.camel:camel-jbang-core:4.0.0
[jbang]    org.apache.camel.kamelets:camel-kamelets:4.5.0
[jbang] Dependencies resolved
2024-04-23 10:48:47.468  INFO 41831 --- [           main] org.apache.camel.main.MainSupport   : Apache Camel (JBang) 4.0.0 is starting
2024-04-23 10:48:47.662  INFO 41831 --- [           main] org.apache.camel.main.MainSupport   : Using Java 17.0.9 with PID 41831. Started by hfuruich in /home/hfuruich/sample
2024-04-23 10:48:50.043  INFO 41831 --- [           main] .download.MavenDependencyDownloader : Downloaded: org.apache.camel:camel-rest:4.0.0 (took: 2s93ms) from: central@https://repo1.maven.org/maven2
2024-04-23 10:48:50.197  INFO 41831 --- [           main] mel.cli.connector.LocalCliConnector : Camel CLI enabled (local)
2024-04-23 10:48:50.303  INFO 41831 --- [           main] el.impl.engine.AbstractCamelContext : Apache Camel 4.0.0 (hello) is starting
2024-04-23 10:48:50.471  INFO 41831 --- [           main] el.impl.engine.AbstractCamelContext : Routes startup (started:1)
2024-04-23 10:48:50.471  INFO 41831 --- [           main] el.impl.engine.AbstractCamelContext :     Started route-3663 (timer://yaml)
2024-04-23 10:48:50.471  INFO 41831 --- [           main] el.impl.engine.AbstractCamelContext : Apache Camel 4.0.0 (hello) started in 167ms (build:0ms init:0ms start:167ms)
2024-04-23 10:48:51.486  INFO 41831 --- [ - timer://yaml] hello.yaml:10                       : Hello Camel from route-3663
2024-04-23 10:48:52.455  INFO 41831 --- [ - timer://yaml] hello.yaml:10                       : Hello Camel from route-3663
2024-04-23 10:48:53.455  INFO 41831 --- [ - timer://yaml] hello.yaml:10                       : Hello Camel from route-3663

Hello World の Debug

fuse tooling で提供されていた camel ルートレイヤーのデバッグ機能は、VSCodeでもご利用いただけます。
hello.yaml をテキストエディーター開き、任意の行番号をクリックすることでブレイクポイントをセットします。


画面右上にあるメニュー 「Run Camel Application with JBang and Debug」をクリックすると、先ほどと同様に camel route の実行が始まりますが、すぐに停止し、デバッグ情報が出力されます。

その他

camel-jbang には豊富な機能があります。例えば、今回作成した hello.yaml を実行する Quarkus アプリケーション用 maven プロジェクトを自動生成できます。
sample]$ camel export --runtime=quarkus --gav=com.foo:acme:1.0-SNAPSHOT
Generating fresh run data
Exporting as Quarkus project to: .
sample]$ tree
.
├── hello.yaml
├── mvnw
├── mvnw.cmd
├── pom.xml
└── src
    └── main
        ├── docker
        │   ├── Dockerfile.jvm
        │   ├── Dockerfile.legacy-jar
        │   ├── Dockerfile.native
        │   └── Dockerfile.native-micro
        ├── java
        │   └── com
        │       └── foo
        │           └── acme
        └── resources
            ├── application.properties
            ├── camel
            │   └── hello.yaml
            └── kamelets
sample]$ mvn clean package
sample]$ java -jar target/quarkus-app/quarkus-run.jar 
__  ____  __  _____   ___  __ ____  ______ 
 --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ 
 -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \   
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/   
2024-04-23 11:55:27,494 INFO  [org.apa.cam.qua.cor.CamelBootstrapRecorder] (main) Bootstrap runtime: org.apache.camel.quarkus.main.CamelMainRuntime
2024-04-23 11:55:27,499 INFO  [org.apa.cam.mai.MainSupport] (main) Apache Camel (Main) 4.4.0 is starting
2024-04-23 11:55:27,564 INFO  [org.apa.cam.mai.BaseMainSupport] (main) Auto-configuration summary
2024-04-23 11:55:27,564 INFO  [org.apa.cam.mai.BaseMainSupport] (main)     [MicroProfilePropertiesSource] camel.main.routesIncludePattern=camel/hello.yaml
2024-04-23 11:55:27,647 INFO  [org.apa.cam.imp.eng.AbstractCamelContext] (main) Apache Camel 4.4.0 (camel-1) is starting
2024-04-23 11:55:27,655 INFO  [org.apa.cam.imp.eng.AbstractCamelContext] (main) Routes startup (started:1)
2024-04-23 11:55:27,656 INFO  [org.apa.cam.imp.eng.AbstractCamelContext] (main)     Started route-3663 (timer://yaml)
2024-04-23 11:55:27,656 INFO  [org.apa.cam.imp.eng.AbstractCamelContext] (main) Apache Camel 4.4.0 (camel-1) started in 8ms (build:0ms init:0ms start:8ms)
2024-04-23 11:55:27,744 INFO  [io.quarkus] (main) acme 1.0-SNAPSHOT on JVM (powered by Quarkus 3.8.2) started in 0.831s. Listening on: http://0.0.0.0:8080
2024-04-23 11:55:27,744 INFO  [io.quarkus] (main) Profile prod activated. 
2024-04-23 11:55:27,744 INFO  [io.quarkus] (main) Installed features: [camel-attachments, camel-core, camel-microprofile-health, camel-platform-http, cdi, smallrye-context-propagation, smallrye-health, vertx]
2024-04-23 11:55:28,669 INFO  [hel.yaml:10] (Camel (camel-1) thread #1 - timer://yaml) Hello Camel from route-3663
2024-04-23 11:55:29,656 INFO  [hel.yaml:10] (Camel (camel-1) thread #1 - timer://yaml) Hello Camel from route-3663

活発に開発が進んでいる camel-jbang の最新機能については、コミュニティードキュメントをご確認ください。
また、VSCode 上で F1キーをエンターし、表示された入力フィールドに camel と入力してください。実行可能なコマンドの一覧が表示されますので、コマンドを覚える必要がありません。




kaoto にはチュートリアルが用意されておりますので、そちらも合わせてご活用ください。

フィードバックについて

最後にご協力のお願いです。
実際に使われるユーザーのフィードバックがあることで、コミュニティーはより活性化します。ぜひ、動作不具合や機能リクエストについて、コミュニティーへインプットしていただくようご検討ください。特に kaoto は technology preview 中であり、広くユーザー皆さんの声を求めています。 
直接チケットを通してレポートしていただく事も可能です。
こちらでディスカッションしていただく事も可能です。
https://github.com/orgs/KaotoIO/discussions

Red Hat Fuse/Red Hat Integration/Red Hat Application Foundation 用サブスクリプションをご購入されたお客様は、サポートケースを通してコメントしていただくことも可能です。
例えば、
  • このバグをレポートして欲しい
  • この機能を追加検討して欲しい
  • 既存のバグチケットを実現するよう後押しして欲しい
といった内容を歓迎しております。
例えば、Technology Preview期間中、こんなチケットが作成され、検討が進められています。
"Create a menu to generate a document about camel route"
その他、グローバルで後押しのある機能として、GUIのデータマッピング機能があります。
https://issues.redhat.com/browse/KTO-433

ぜひ気になる点や応援したいチケットなどあれば、サポートケースなどを通してコミュニティーへ皆さんの声を届けていただければ幸いです。
今後ともよろしくお願い致します。