MicroProfileの仕様体系 - Umbrella仕様とStandalone仕様

| 3 min read
Author: toshio-ogiwara toshio-ogiwaraの画像

MicroProfileはご存じのとおり、Jakarta EEをベースにマイクロサービスアーキテクチャで必要となるAPIや機能の提供を目的とした仕様ですが、この仕様には大きく2つの区分けがあります。

1つはUmbrella仕様と呼ばれるMicroProfileのコアプラットフォームに相当する仕様と、もう一つはStandalone仕様と呼ばれるオプショナルな仕様になります。(Umbrellaと名前が付いているのは恐らくMicroProfileのUmbrella(傘)の下の仕様という意味だと思われます)

執筆時における最新のMicroProfile 6.0のUmbrella仕様(左側の点線四角枠)とStandalone仕様は次のようになっています[1]

overview
引用元: MicroProfile 6.0 - 22nd Dec, 2022 | Eclipse Foundation

今回はこのMicroProfileの仕様体系について説明します。

連載の紹介

豆蔵デベロッパーサイトではMicroProfileをテーマに「逆張りのMicroProfile ~ Helidonで始めるマイクロサービスへの一歩 ~」を連載しています。他の記事も是非どうぞ!

Umbrella仕様(コアプラットフォーム仕様)

#

MicroProfileはJakarta EEのようにマイクロサービスアーキテクチャで必要なる複数の仕様をセットとしてまとめたものですが、この中でも中核となる仕様がUmbrella仕様となります。

「セット」といっていることからも分かるとおり、Umbrella仕様はMicroProfile ConfigやMicroProfile OpenAPIなどといった個々のMicroProfile仕様を集約した仕様となり、その個々の仕様はコンポーネント仕様と呼ばれます。

このコンポーネント仕様を使ってUmbrella仕様を説明すると「Umbrella仕様はその仕様に含めるコンポーネント仕様とバージョンを定めたもの」となります。これは「JakartaEE 10のCoreProfileにはJakarta Contexts and Dependency Injection (CDI) 4.0やJakarta RESTful Web Services (JAX-RS) 3.1が含まれる」といったJakarta EEの仕様体系と同じ考えになっています。

また、MicroProfileはMicroProfile 4.0やMicroProfile 5.0などとバージョンを付けて呼ばれますが、この実体はUmbrella仕様とそのバージョンを指しているものとなります。

これら仕様体系の説明とは別にリリースプロセスの観点からUmbrella仕様を補足するとUmbrella仕様とそのコンポーネント仕様には次のことが規定されています。

  • MicroProfile準拠の実装となるには、ベンダーはUmbrella仕様に含まれるすべての仕様を実装する必要がある
  • Umbrella仕様がリリースされるとき、そこに含まれるすべてのコンポーネント仕様は相互運用可能でなければならない
  • コンポーネント仕様は、破壊的変更を含むメジャー バージョンをいつでもリリースでき、包括的な仕様と調整する必要はない

Jakarta EEでは仕様間の取り決めや調整ごとがガチガチに決められているのに対し、MicroProfileのそれはかなり緩い印象を受けます。このことからもMicroProfileが俊敏性のある標準化を目指していることがうかがえます。

Umbrella仕様の説明は以上となります。長々と説明しましたがUmbrella仕様は一言でいうと単に「MicroProfileの必須仕様」ということだけです。

Standalone仕様

#

MicroProfileの仕様が出来た当初はUmbrella仕様やStandalone仕様といった区分けはなく、すべてが今でいうUmbrella仕様に位置づけられていましたが、次のような背景からStandalone仕様がMicroProfile 3.3から設けられました。

  • ベンダーはすべてのUmbrella仕様を実装しなければならい
  • コアプラットフォームであるUmbrella仕様が大きくなりすぎて新しいMicroProfile仕様(コンポーネント仕様)を追加しづらい

このような背景から出来たのがStandalone仕様です。Standalone仕様に位置づけられたコンポーネント仕様はUmbrella仕様には含まれないため、ベンダーは必須で実装が求められるといったUmbrella仕様に対する縛りが発生しません。このため、それまでになかった新しい技術に対する仕様を取り入れるといったことが行いやすくなりました。

実際、現時点でStandalone仕様に位置づけられているものは冒頭の図にあるとおりで比較的新しめの技術に関するものとなっています。ここではその中からマイクロサービスならではの特徴的な仕様を3つほど簡単に紹介します。

  • MicroProfile Long-Running Actions (LRA)
    • 分散トランザクションのオーケストレーション方式によるSagaパターン実装に関する仕様
  • MicroProfile GraphQL
    • アノテーションベースによるGraphQLスキーマの生成とエンドポイントの公開や実行に関する仕様
  • MicroProfile Reactive Messaging
    • Apache Kafkaに代表されるリアクティブストリームを使用したメッセージ送受信に関する標準API仕様

Standalone仕様はいつまでもStandaloneでいるハズもないと思われるため、最終的にはUmbrella仕様かJakarta EE仕様に取り込まれるのではないかと思われます。

Standalone仕様の説明は以上となります。Standalone仕様も長々と説明しましたが、ここまでの話しから分かるとおり、これも一言でいうと単に「MicroProfileのオプション仕様」ということだけです。

さいごに

#

逆張りのMicroProfileの連載ではUmbrella仕様の全8仕様中心に説明してきましたが、今後はStandalone仕様の説明も追加していこうと思います。


参照資料


  1. 逆張りのMicroProfileの連載は実装にHelidonを使っているため、説明はHelidonが準拠するMicroProfile 5.0をベースにしています。 ↩︎

豆蔵デベロッパーサイト - 先週のアクセスランキング
  1. 基本から理解するJWTとJWT認証の仕組み (2022-12-08)
  2. Docker+Wasm で WASM をコンテナとして実行する (2023-01-25)
  3. 自然言語処理初心者が「GPT2-japanese」で遊んでみた (2022-07-08)
  4. 直感が理性に大反抗!「モンティ・ホール問題」 (2022-07-04)
  5. Nuxt3入門(第4回) - Nuxtのルーティングを理解する (2022-10-09)
  6. AWS認定資格を12個すべて取得したので勉強したことなどをまとめます (2022-12-12)
  7. Jest再入門 - 関数・モジュールモック編 (2022-07-03)
  8. ORマッパーのTypeORMをTypeScriptで使う (2022-07-27)
  9. Nuxt3入門(第8回) - Nuxt3のuseStateでコンポーネント間で状態を共有する (2022-10-28)
  10. Nuxt3入門(第1回) - Nuxtがサポートするレンダリングモードを理解する (2022-09-25)