マイクロサービスなWebサーバを実現するHelidonを実務で使っていく!
こんにちは。日本オラクル(株)でエンジニアをやっておりますtakemuraと申します。今回はHelidonをテーマとして何回か技術的で実用的な?記事を書いてみたいと思います。Helidonについては、2017年ごろからちょくちょくお客様の所で実装する機会ありまして、紆余曲折・試行錯誤の果てに結構詳しくなりました。現在も某製造業様のコアシステムの一部に組み込まれて稼働中です
この記事について
Helidonについては、他の解説記事もたくさん出ていて基本的なこと(環境構築や、アプリのデプロイ、RESTの書き方など)はそちらの記事にお任せしようと思います。この度の記事では、Helidonを実務で使った経験をベースに、基本的な機能はわかったんだけど、実際こういう時どうすればいいの?的なのを書けたらと思っています。
Helidonって?
とは言ってもHelidonに関して完全に何も書かず、その実用的な使い方を書き始めると唐突な感じになってしまいそうですので、Helidonの紹介をちらっと書きます。
Helidonとは一言で言うとJavaのフレームワークライブラリです。「マイクロサービスを記述するためのクラウドネイティブで、オープンソースなJavaフレームワーク」と
公式Web(https://helidon.io)で謳っている通りです。
ちなみにアイコンは以下の画像の、鳥の折り紙のような感じのものになっています

「helidon(へりどん)」は、ギリシャ語でツバメの事だそうで、ツバメのように高速に開発・実行できるものをイメージしたそうです
ちなみに、本家ギリシャ語の正しい発音では「ヘリドー」(χελιδόνι)になるそうですよ。ギリシャ文字難っ
基本は、Helidonが自前で内臓している高速Webサーバ(Helidon4.xからはJavaのVirtual Threadが使用できるようになりさらに高速化)上で、様々なRESTサービスをクライアントに提供することが可能です。まあ、サンプルをちらっと見るとどんな風に書くのかがわかるというお決まりな感じですね。
お手軽に試してみたい人向けには、starterキットあります(SprintBootのstarterみたいなやつです)
まず、以下のURLにアクセスしましょう
https://helidon.io/starter/
すると、Helidonアプリを作るためのウィザードのようなものがブラウザに表示されます。まずはHelidon SEかHelidon MPを選びます。
お手軽に試したい場合はより簡単なコードになるHelidon MPが良いでしょう。

そしてウィザードに従って、DBにアクセスするWebアプリなのかとかを選択していきます。
次、次とやっていくとプロジェクト情報を入れる項目があるのですが、ここもお手軽にやる場合は何も変えなくてもよいです
最後に一番下にある「Download」ボタンを押すと、ブラウザからダウンロードが始まります。アプリ一式がzipになっているものがダウンロードされて来ます。
これを見てみると以下の感じのファイル構造になっています。ソースや、各種設定が全部入ってきている感じですね。
kubernetes用の設定一式も入ってますので、zipを解凍→app.yamlのあるフォルダへ移動してから下記コマンドでデプロイできます
kubectl create -f app.yaml
または、kubernetes環境を用意するのが面倒、または、使いたくないということであれば以下コマンドにてスタンドアロンで稼働するものを作れます。
pom.xmlのあるフォルダまで移動してから以下コマンドを実行します
※このコマンドを実行する前にJava23を入れて、/binをPATHに入れておいてください。Java17とか古いのだとビルドに失敗します。まとmavenもなるべく新しいのを入れた方が良いでしょう。
mvn package
すると、コンパイルとJARパッケージまでやってくれるので以下コマンドでHelidonサーバを起動します(myproject.jarは、自分が作ったプロジェクト名.jarになっています)
java -jar target/myproject.jar
あとは、curlコマンドや、GETコマンドならブラウザで稼働テストできます

どんなURLでテストすればよいかは、ソースコード(<プロジェクト名フォルダ>/src/main/java/<パッケージ名>/XXXXXResource.javaというファイルのコメント部分に書いてあります
ちなみに、port番号の設定は、\src\main\resources\META-INF\microprofile-config.propertiesの以下設定で制御しています。
server.port=8080
server.host=0.0.0.0
他のポートがよろしければここを編集してからmvn packageすればそのポートで起動します。
今回は結局ありがちなさわりになってしまいましたが、続けて次回実用的な話を書いて行きたいと思います。
