Java EEにおけるDevOpsに適した開発・実行環境を提供
田中孝清氏は「ビジネスのスピード変化に伴い、情報システムの軸足は『記録中心』から『つながり中心』に移りつつある」と語る。つながり重視の世界では、一般ユーザーに使ってもらうシステムは、非常に頻繁に毎日のように更新され、統合が行われる。
さらに「モノのインターネット」という考え方がある。従来のPCブラウザ経由だけでなく、多種多様のデバイスからの情報収集が可能になっていることも、開発に対して様々な高速化を求める背景となっている。
ところがJava EEに限らず、最近のアプリケーション開発、運用では「環境の複雑性への対応」「マニュアル作業削減」「運用担当者の作業負荷軽減」という課題がある。
これらの課題について田中氏は「対処法はツールによる自動化の導入」と語る。しかし、特にベンダー系のJavaアプリケーションサーバーを使っている企業では、なかなか導入が進んでいない。実際、挙手で行われた会場アンケート調査では、まずApache Antを使ったことがある人は大体6割。Mavenは3割。Jenkinsは3割強。IBM UrbanCode Deployはごく少数だった。
導入が進んでいない第1の理由として、田中氏は「Java EEのアプリケーションサーバーが、必ずしもDevOpsに適したものになっていない」ことを挙げる。
まず従来のJava EEサーバーは信頼性と高性能を追求した結果、導入が大がかりになり、管理にも多くの手間がかかるのは避けられない。
一方、ツールを使って自動化したい場合、なるべく少ないフットプリント、ファイルの展開による導入、特別のツールを使わないフラットファイルによる構成、短い起動時間などが求められる。
それらの条件を満たしたものとして、オープンソースのTomcatやJettyという実行環境が多用されている。ただ、Tomcatなどでは、本番で実行するにあたって、色々と足りない機能があることが難点。
そうした課題に対応するため、IBMでは一昨年「Libertyプロファイル」というまったく新しいランタイムを出している。Java EE実行環境(コンテナ)は、従来のWebSphere Application Server(WAS) Fullプロファイル版と同じ実装が使われている。
Libertyプロファイルの第1の特長はまず軽量であり、起動が早いことだ。Javaヒープに関しても、従来の200~300MBから、TradeLiteでも60MB程度で稼働する。コアの部分の起動でも、50MB程度のファイルをダウンロードして展開するだけで使用できるし、展開した状態でも100MB程度。そのため身軽に転送などができる。
機能も十分で、Java EE 6のWeb Profile標準に準拠したアプリを完全にサポート。Web Profile以外のJava EE 6仕様もJMS、JAX-RS、JAX-WSをサポートしている。
田中氏が特に面白い特長として紹介したのが、「API・サーバー機能をFeatureという形でバラバラに利用可能」ということだ。ユーザーが必要なFeatureだけを自由に組み合わせ、使うことができ、Featureの依存関係も自動的に解決される。
また新しいFeatureを順次提供する「Liberty Repository」というWebサイトがあり、ここからダウンロードして追加できるようになっている。Java EE 7を構成するような仕様も順次公開予定だ。
また新バージョンのFeatureは「置き換え」ではなく「追加」になる。たとえばservlet-3.1を追加してもservlet-3.0は引き続き使用可能だ。「なるべくお客様のアプリケーションのマイグレーションを不要にするような形にしている」(田中氏)。
続く特長は「開発ツールと運用ツールとの統合」になる。IBMではEclipse向けに統合ツール、WAS Liberty Profile Developer Toolsを無償提供している。これによりWAS固有の構成ファイルの編集、テストサーバーへのアプリケーション自動デプロイ、アプリケーションのデバッグ、ステップ実行などが可能になる。
続いて「簡単な構成と動的な変更」という特徴がある。Libertyプロファイルの構成ファイルは、server.xmlという単一ファイルになっている。基本的にすべての設定項目がデフォルトの値を持っており、変更する場合にのみ記述する。手で編集することができるし、バージョン管理システムでの履歴管理も容易となっている。
この構成ファイルの変更を「今までのようにGUIでやりたい」というニーズにも対応するため、EclipseのDeveloper Toolsでは、GUIでserver.xmlを編集する機能も提供している。
さらに「Unzipによる導入とデプロイ」という特徴がある。Libertyプロファイルは、開発環境、Eclipse上でのLibertyプロファイルと構成ファイル、アプリケーションを丸ごとZipファイルとしてパッケージすることが可能だ。構成パッケージングしたZipは、他の環境に持っていって展開することで、アプリケーションサーバーがプログラムを実行する環境がすべて出来上がる。
さらに使用するFeatureだけをパッケージすることで、さらに小さな導入イメージを作成することができる。
OSS、IBMの自動化ツールとの連携をサポート
最後の特長として「自動化ツールとの連携」が挙げられた。
IBMでは、各種CI・Buildツールとの連携機能をGitHub上で公開している。
自動化ツールとして思いつくものとして、たとえばApache Mavenがある。Java用プロジェクト管理ツールとして、よく使われているものだ。統一したビルドプロセスが提供され、ファイルに構成を行うことにより、様々なアプリの属性というものをしっかり処理しやすい形でビルドすることを可能にしている。
プラグインによって、様々な柔軟な拡張が可能になっており、Libertyプロファイルを操作するためのものがIBM自身により提供されている。
Mavenで利用できるLibertyプロファイルのGoalとして、サーバーの作成・始動・停止以外にも、アプリケーションのデプロイ・アンインストール、サーバーのパッケージングなどがある。Mavenにはビルド・ライフサイクルという考え方があり、そこに組み込む。
それからJenkinsがある。Javaで書かれたオープンソースのCIツールで非常に人気が高く、特にインターネット系の企業ではよく使われている。ソフトウェアプロジェクトのビルドとテストを複数のシナリオという形で書くことができる。ユーザーからの操作、特定のディレクトリへのファイルの配置、特定のプロセスの終了などを感知し、それらをトリガーとして処理を実行できる。また、複数サーバーでの分散ビルドやテストも実行可能だ。
こちらもプラグイン拡張ができるようになっており、WASのプラグインも提供されている。バージョン管理システム(VCS)やビルドツールとの連携が容易で、プラグインを使用すると処理を自動化できる。コーディングやスクリプトは不要だ。処理の完了もモニターしてくれる。
ただ、会社の事情やプロジェクトの条件により、OSSを使用するのが難しい場合もある。たとえばベンダーのサポートがきちんとあるような製品が求められるケースだ。
「その場合はもちろん、RationalなどIBMの数多くの製品を使い、DevOpsを実現していただけます」(田中氏)。たとえばUrbanCodeはJenkinsと同様、様々な処理をシナリオに沿った形で実行していくことが可能だ。シナリオはGUI画面上でのドラッグ&ドロップにより、ビジュアルに定義できる。
またBluemixというIBMの次世代のクラウドプラットフォームは、オープンソースのPaaSツールである「Cloud Foundry」をベースとして構成されている。ユーザー自身で様々なビルドパックを作ることにより、アプリ実行環境を可搬性を持って実装できるようになっている。
Bluemixではアプリケーションを実行するためJava、JavaScript、Rubyのランタイムを提供しているのだが、JavaのランタイムはLibertyプロファイルで実行される。ローカルの環境上のEclipseにBluemixのツールを入れると、ローカルで実行するのと同じような感覚で、LibertyプロファイルのアプリケーションをBluemixに上げ、チェックすることができる。
BluemixではCloud Foundryのツールがそのまま利用できるので、開発したアプリケーションをBluemixや、あるいはユーザーのVMware上の仮想環境へ自動的にデプロイすることもできるようになっている。
以上の様々なツールとの連携で、テストを、社内のオンプレミスの環境だけでなく、クラウド上で動的に行うことが可能になる。
最後に田中氏は「自動化に関しては検討段階というお客様がまだまだ多いかと思いますが、現在、各種OSSやベンダー製品が充実してきています。開発・テストと運用の自動化に、改めてチャレンジする最適のタイミングです」と語り、セッションを終了した。