ビジネス環境の急速な変化に対応するためにサーバレスやクラウドネイティブといった技術へのニーズが高まっており、これまでエンタープライズシステムを支えてきたJavaにも変革の時期が訪れている。そうした中、Java開発者はどのようにしてこの変革に対応していけばよいのか。

9月18日、このテーマについて、エンタープライズ分野におけるJavaの第一人者である米マイクロソフトの寺田佳央氏とレッドハットの伊藤智博氏が対談を行ったので、その模様をお届けしよう。モデレーターはレッドハットの須江信洋氏が務めた。

  • レッドハットとマイクロソフトのJavaエキスパートによる対談

    レッドハットとマイクロソフトのJavaエキスパートによる対談

日本におけるクラウドネイティブの現状

この数年の間に、ビジネス要求の変化に対応する形でさまざまな技術や方法論が登場してきた。そこで、今、注目すべき技術について聞かれると、両氏はそろって「サーバレスとコンテナ、今風に言えばクラウドネイティブ」と答えた。

寺田氏は「Kubernetesなどの特定のツールにこだわらず、ベースとなるコンテナ技術について押さえておくことが重要」と続けた。伊藤氏は「技術を導入するだけでは十分ではなく、プロセスや文化も整えていかなければ、クラウドネイティブな技術を有効に生かすのは難しい」と語った。いずれも、上辺だけを取り繕うのではなく、本質を見極めた上で導入することが大切だという指摘だ。

国内におけるクラウドネイティブな技術の導入状況については、「いち早くやっていきたいという会社と、旧来の仕組みを守り続けたい会社で二極化しているのではないか」と寺田氏は言う。前者は、今までの手法では実現できないようなことにチャレンジして、いかに改善していくかということに積極的に取り組んでいる。一方で後者は、現状で十分な資産を持っているが故に危機感を感じにくく、クラウドネイティブの必要性を理解しにくいのではないかという。

その一方で伊藤氏は、「(二極化という事実はありつつも)最近では、Web系だけでなくエンタープライズ系のシステムでもクラウドネイティブな技術が使われ始めており、大手企業からの注目度も高まってきている」と説明した。企業や業種によって導入への意欲に差はあるものの、クラウドネイティブへの需要が高まっていることは間違いなさそうだ。

トラディショナルな企業でクラウドネイティブの採用が進まない一番のボトルネックは何かという質問に対して、寺田氏は「過去の資産が一番のボトルネック。既存のサービスをマイグレーションするのは相当に大変なこと」と答えた。ただし、「過去の資産を無理に移行する必要はなく、一部の機能を切り出してクラウドネイティブ化するなど、部分的に移行していくアプローチを取るのがいい」と、伊藤氏が補足した。

Javaが採用されるための要素技術はすでにある

それでは、上記のような現状に対し、Javaはどのような立ち位置にあるのだろうか。モデレータの須江氏が提示したデータでは、サーバレス・コンピューティング・サービスのAWS Lambdaにおいて、Javaの人気はPythonやNode.jsに大きく遅れを取っていることがはっきりと示されている。

  • サーバレスの現状 Python/Node.jsが圧倒的に人気

    サーバレスの現状。Python/Node.jsが圧倒的に人気

クラウドネイティブの分野でJavaの採用が進まない理由は何だろうか。伊藤氏は次の2つの要因があるのではないかと分析している。

  • クラウドは、当初Web系の企業が率先して導入したという経緯がある
  • Javaはエンタープライズのニーズに注力して成長してきた歴史があるため、Web系とは必ずしも要件が一致せず、Web系の技術者の間ではJavaに対する印象が良くない

だからといって、Javaがクラウドネイティブに適していないというわけではない。「Javaが採用されるための要素技術はすでに整っている」と伊藤氏は説明する。

例えば、コンテナ型アプリケーションの主な課題として起動時間の短縮やメモリ消費量の削減があり、これは従来Javaが苦手としてきた部分でもある。しかし最近では、事前コンパイル(AOT: Ahead-of-Timeコンパイル)などの技術が発達し、即実行可能がネイティブイメージを生成することで起動時間やメモリ消費量の課題は解消しつつある。

そのほか、Java Flight Recorderをはじめとする運用監視ツールや、豊富なフレームワークなど、エンタープライズ分野で培ってきた実績はクラウドネイティブになっても十分に活用できるものだという。この点については、寺田氏も「Javaには25年間積み重ねてきた豊富な資産がある。エンタープライズ向けに培われてきた資産やエコシステムをサーバレス分野でも生かさない手はない。ネイティブイメージを作ることで、起動速度や実行速度、使用メモリなどは大幅に改善できるため、サーバレスに必要な要件も満たすことができる」と強調した。

クラウドネイティブJavaを実践するには?

それでは、現実にクラウドネイティブJavaを実践する上では、どのようなポイントを押さえておけばよいのだろうか。

寺田氏によれば、実装に近い部分では小さいアプリケーションを組み合わせてシステムを構築するという考え方が向いているため、ドメイン駆動設計(DDD: Domain Driven Design)やサービスメッシュ、マイクロサービスのデザインパターンなどの考え方が役に立つという。また、必ずしもすべての領域でマイクロサービスやKubernetesが合うということではないため、どんな場面で何が当てはまるのかを判断し、選択肢の幅を持てるようになることが大切だと語った。

伊藤氏は、「ビジネスとフレームワークを切り離して、設計や実装ができるようになることも重要。ビジネス要件に合ったフレームワークを選択できる能力や、運用監視や性能などの非機能要件をデザインできるアーキテクトとしての能力を身につけたほうがいい」とアドバイスする。その上で、クラウドネイティブに求められるようなビジネス要件を簡単に実現できるフレームワークとして、レッドハットがサポートしている「Quarkus」を挙げた。

QuarkusはKubernetesネイティブなJavaフレームワークであり、GraalVMのネイティブコンパイル技術を利用することで起動が速くメモリフットプリントの小さいJavaアプリケーション・バイナリを作成し、Kubernetes上のコンテナに素早く展開することができる。既存のJavaフレームワークやライブラリをそのまま使えるため、これまでの知識を生かすことができるという強みもある。また、監視や性能などの非機能要件の機能にも対応できるという。

企業とエンジニアが切磋琢磨してハッピーになろう

最後に寺田氏は、「新たなことに取り組んで自分の技術力を上げていくことにより、エンジニアにハッピーになってほしい。企業には優秀なエンジニアが集まるような環境を作っていってほしい。優秀なエンジニアをたくさん抱えた企業が強くなっているという事実が確かにある。企業とエンジニアの双方が切磋琢磨して、お互いがハッピーになる環境を作っていってほしい」と呼びかけた。

また、寺田氏はエンジニアに対し、「コミュニティに参加するなど、積極的に自分の環境の外にいる人たちと接することが大事。目の前の問題だけでなく、もっと外にも目を向けて、自分の状況を認識したり新しい発見をしたりしてもらいたい」とも語っている

一方、伊藤氏は「お客さまからビジネス要件を聞いて、それに合わせて最適なフレームワークを使うことで、結果として問題が起こりにくくなり、すべての人がハッピーになれる。要件とフレームワークがマッチしていないことによって不幸になっているケースをよく見てきた。そのような不幸が減らせれば、エンジニアがコミュニティに参加するなどの余裕も出てくると思う」と語った。