統合のためのCamelファースト アプローチ
ユニコーンやチュパカブラといった生き物は地球上に実在しないかもしれませんが、ラクダという生き物が実在することに疑う余地はありません。そして、ミッドレンジ オープンソース界の権威、Jesse Gorzinski氏によれば、IBM i のショップが統合の課題に対して取るべきアプローチは、「まずはラクダをつなぐ(camel-first)」アプローチだということです。
ここでラクダ(camel)というのは、もちろん、2つ以上のシステムをつなぐことを目的に設計された、Javaベースの統合フレームワーク、Apache Camelのことです。先日の OCEAN TechCon21カンファレンスで、 IBMのIBM i オープンソース担当ビジネス開発マネージャーのGorzinski氏は、Camelについて熱意たっぷりに概観するプレゼンテーションを行うとともに、IBM i 環境で管理者や開発者がCamelをどのように役立てることができるかについて、いつくか事例を紹介してくれました。
「Apache Camelは、本当にどのようなもの同士でも、非常に簡単に結びつけることができます」とGorzinski氏は、「 Integrate IBM i with Anything using Apache Camel(Apache Camelを使用してIBM iとあらゆるものを統合する)」と題するOCEANでのセッションで述べています。「どのようなアクティブな統合アクティビティを行っている場合でも、また、数多くのテクノロジーを束ね合わせようとしている場合でも、Camelは実に役立ちます。」
大まかに言えば、Camelはメッセージ指向ミドルウェアであり、一時期、ITの世界で人気を博したエンタープライズ サービス バス(ESB)とよく似ています。Camelは、メッセージおよびデータが、いつ、どのように送信されるかをユーザーがある程度制御できるようにする、ルール ベースのルーティング エンジンを使用します。
「Camelは、メッセージという単位で物事を定義できるようにし、それらのメッセージに向けて入出力を行う、このような統合レイヤーです」とGorzinski氏は説明しています。「Camelでは、このようなプロセッサーまたはエンドポイントという概念があります。Camelは、メッセージを受け取り、処理を行ってから、そのメッセージを他のどこかへ送るだけです。」
Camelを使用することによって、IBM i のショップは、オープンソース コミュニティによってすでに完了されている多くの統合作業の成果物を利用することができます。その1つに、jt400での統合があります。jt400は、データベース、CL、およびQSYSOPR待ち行列のようなメッセージ ログといった、様々なIBM i テクノロジーとの接続性をCamelに提供します。また、jt400には、Apache Kafka、IoTデバイス、およびその他のデバイス向けにすでに構築済みの数々のコネクタも含まれています。
Camelのコア コンセプトの1つに、「ルート」という概念があります。ルートは、データ フローの開始ポイントと終了ポイントを定義します。ルートが(1つ以上のエンド ポイントで)定義されると、それはCamelによって自動実行できるようになります。
Camelで使用できるエンドポイントのリストは膨大だとGorzinski氏は述べています。「それらすべてを画面に収めることができないほどです」と彼は述べます。「FTPサイトとの対話処理やIRCチャットを行うためにあるコンポーネントもあります。 MongoDBとのやり取り、TwitterやSlackとのやり取り、およびSFTPのためにあるコンポーネントもあります。データベース照会を行ったり、コマンドを実行したり、 Amazon AWS のようなものとの対話処理を行ったりするためのコンポーネントもあります」 また、ブロックチェーン、EDI、Watsonなど、ありとあらゆるものがCamelには備わっています。
「それらのコンポーネントが行えることの1つに、IBM i との対話があります。これは、jt400と呼ばれるコンポーネントがあるからです」とGorzinski氏は述べます。「そして、IBM i またはその前身で何かしらJavaプログラミングを行ったことのある方なら、jt400というのが、JavaコードからIBM i との対話を可能にする、IBM Toolbox for Javaの名前の1つ(いくつかある名前の1つ)であることはご存じかと思います。」
「今日、私がお話したことをすべて忘れても、このことだけは覚えておいてください」とGorzinski氏は続けます。「一番重要なのは、それらのコンポーネントのうちのどのコンポーネントも、Apache Camelが備えているコンポーネントのうちの他のどのコンポーネントとも統合することができるということです。IBM i のケースで言えば、IBM i を、そのためのコンポーネントがあるものなら、他のどのようなものとも統合できるようになっているということです。」
Camelで簡単に行えるようになるのは、コードを実際に書く必要がないからです。事実、Gorzinski氏は、Camelを統合のための「ローコード」ソリューションと呼んでいます。コードを書きたければ、書くこともできます。コードを書くための最も一般的な2つの方法は、Java用のドメイン固有言語と、SpringおよびSpring Bootです。しかし、Camelで何かを行おうとするときに、書く必要があるコードの量は、かなり少なく済みます。
「たとえば、メッセージを送信するのに30行もコードを書く必要はありません」とGorzinski氏は述べます。 2020年の『 IT Jungle 』のインタビューで、彼はCamelを、統合ツールの「スイス アーミー ナイフ(万能ナイフ)」と呼んでいます。「Apache Camelでは、これらの統合ポイントは、データ待ち行列、メッセージ待ち行列、さらには直接的なプログラム呼び出しと対話できるようにするjt400を通じて用意されるため、RPGプログラムまたはCLプログラムをApache Camelで直接呼び出すこともできます。」
Gorzinski氏は、45分間のセッションで、Camelのコアとなるコンセプトについて、いくつかを取り上げています。ルートは、開始ポイントおよび終了ポイントによって定義され、それらの開始ポイントおよび終了ポイントは、URI(uniform resource indicators)を使用して定義されます。URIは、URL(uniform resource locator)と同様に、あるリソース(たとえば、SMTPサーバーまたはQSYSOPR待ち行列など)への経路情報を提供します。
Camelにおけるもうひとつのコア コンセプトは、エンタープライズ統合パターン(EIP)という概念です。「これらは、どのようなエンタープライズ統合アクティビティでも至るところに見られる、ただのパターンに過ぎません」とGorzinski氏は述べます。「そのため、それらは、コーディング パターンや問題に取り組む方法のタイプを、このような統合パターンまたはエンタープライズ統合パターンの概念へ形式化するだけです。」
Camelの世界には、いくつかのポピュラーなEIPがあり、Gorzinski氏はそれらのいくつかについても取り上げています。まず、1つのタイプのEIPは、コンテンツベースのルーターです。これは、たとえば、新規オーダーが待ち行列に届いたときに、新規オーダーをどの部署に送信したらよいかなど、基本的には、イベントによってトリガーされたときに生じるイベントのフローを定義します。もうひとつのタイプのEIPは、コンテンツ エンリッチャーです。これは、英語からスペイン語への言語の翻訳など、付加的な情報をメッセージに追加します。
Gorzinski氏は、IBM i プロフェッショナルがCamelをどのように利用することができるかについて、実例をいくつか紹介しています。たとえば、Power Systemサーバーのディスク容量が一定の数値を超えるたびに、IBM i 管理者がメールを受け取れるようにしたいとします。管理者は、URIおよびEIPを使用して、ディスク容量の制限を超えたときにメールを生成して送信するためのCamelルートを定義することができます。
「そして、デフォルト システム メッセージとは異なり、このメッセージは、ディスクがどの程度までフルに近付いているかを知らせてくれます」とGorzinski氏は付け加えます。「91%フルと99%フルとでは、大きな違いがあるケースもあるかもしれないからです。」
Camelを使用する方法には、複雑さを多少緩和してくれるIDEなど、何かを介してCamelを使用する使い方もあります。ただし、初心者の場合は、Camelが背後で行っていることについて少なくとも基本的に理解するまでは、そうしたIDEを使用するのは避けるようにとGorzinski氏は推奨しています。
Gorzinski氏がCamelとともに使用することを推奨した2つのツールに、MavenとChameleonがあります。Mavenは、主にJava用に使用されるビルド自動化ツールであり、一方、Chameleonは最近リリースされたツールで、ユーザーのコンポーネント選択プロセスの一部を自動化して、スケルトン プロジェクトを構築します。そのため、ユーザーが行う必要があるのは、定義するルートの後にロジックをつなぐことだけだと彼は述べています。
「Camelで行うことができることには、実に多くのことがあります」とGorzinskiは述べます。「概して、誰かが何らかの統合タイプ アクティビティに取り組んで、オープンソースに移行しているという話を耳にすると、すぐさま、実に良い考え方だと思えてきます。オープンソースでは、たくさんのテクノロジー向けに、これらのようなコネクタがすべて用意されているからです。」
「しかし、時には私も、Camelファースト アプローチと私が呼んでいるアプローチを取りたくなることがあります。そして、これはCamelでできるだろうかと自問するのです」と彼は続けます。「そして、答えがイエスであるなら、まずはCamelで行ってみます。ほんの数行だけかもしれませんし、3行、5行、2行のApache Camelコードとルート定義で完了してしまうかもしれないからです。」