新CEOの就任以後、JavaなどのOSSに積極関与するマイクロソフト
寺田佳央氏は「皆さんのマイクロソフトに対するイメージを変えたい」と述べ、セッションを開始した。2014年2月にサティア・ナデラ氏が三代目CEOに就任して以来、同社はオープンソース化とクロスプラットフォーム化戦略を推進している。Java、PHP、Rubyなどのオープンソースコミュニティに対して積極期にコミットしている。例えば、OpenJDKプロジェクトではJava VMに対するパフォーマンス向上のためにソースコードレベルで修正を行い貢献するほか、さまざまな開発者向けドキュメントの公開も行っている。
この方針転換がなければ、寺田氏が本年7月にマイクロソフトに入社することはなかっただろう。氏はサン・マイクロシステムズと同社を吸収合併したオラクルで約9年、Javaを中心に手がけてきたという経歴を持つ。「入社後に受けた新入社員研修には、オープンソースに積極的に取り組む、というプログラムがありました。これが今のマイクロソフトの文化なのです」(寺田氏)。
これらマイクロソフトの変化を象徴しているのが、2014年3月に同社提供のクラウド・プラットフォームの名称がWindows AzureからMicrosoft Azureへと変更されたことだ。現在のAzureは、OSから構成管理、データベース、ミドルウェアなどのすべてのレイヤーで、オープンソースのテクノロジーを自由に使うことができる。
寺田氏が長く取り組んできたJavaでいえば、統合開発環境のEclipse、NetBeans、アプリケーションサーバのTomcat、GlassFish、WebLogic、WebフレームワークのJava EE、Springなど、商用を含めて通常Webアプリケーション開発で使われているものがすべて利用可能だ。
JavaでWebアプリケーションを開発するといっても、その目的はさまざまだ。寺田氏は、目的のカテゴリー別にAzure上のサービスを置き換えて見せた。
- PaaS:迅速なサービス展開
- Docker:DevOps/Microservices
- IaaS:基幹システムなどミッションクリティカル
この中で寺田氏が「安心して皆さんにお勧めできる」と語ったのがDockerとIaaSだ。PaaSは簡単に展開できるメリットはある一方、少し柔軟性に欠ける部分がある。その部分で、よりやりやすくできるのがDocker、IaaSということになる。
IaaSでは、ハイパーバイザー上で、作りたい環境を簡単に構築できる。ウィザード形式で環境、リージョン、マシンなどを選択していけば、すぐに環境が立ち上がる。
開発生産性を高めるJavaとコンテナ型サービスDockerの組み合わせ
Dockerは、2014年10月に発表されたDocker社との提携により、AzureにおいてLinuxのコンテナとして提供が開始された。本セッション参加者への会場アンケートでは、本番環境で使っている人はまだ少ないようだ。マイクロソフトはDockerに強くコミットしており、次期Windows Serverで採用するとしている。
DockerはJava界からも注目されている。寺田氏が世界最大のJavaイベントJavaOne 2015のセッションを検索したところ約400中25がヒットした。また世界で約100人いるJavaチャンピオンの一人Adam Bien氏は「JavaとDockerを組み合わせると非常に開発生産性が高い」と自身のブログに書いている。同じくJavaチャンピオンであるMarkus Eisele氏は「組み合わせにより、非常に素晴らしいサービスをいち早く提供できるようになる」と記述している。
寺田氏は「Dockerが提供され、注目されている背景には、開発環境の統一が困難という事情がある」と語る。例えば、JDK、Tomcat、MySQLを使う場合、バージョンの組み合わせは無数にある。それはテスト環境、本番環境でも起こっている。
この問題解決のために行われてきたのは、管理台帳に記載しての管理化や、仮想マシンイメージの共有だ。しかし、管理台帳を利用した場合、記載内容に従い人間が直接操作をするためミスが発生する可能性がある。また台帳に対する更新漏れによって、台帳の記載内容と実際の環境で設定が異なる事態も発生する。仮想マシンで共有した場合、1つのイメージを渡すのに数十ギガ必要かもしれない。さらには、仮想マシンに対して施した変更に対する追従が困難だ。こうした問題を解決するのが、アメリカのDocker社が開発・提供するコンテナ管理ソフトウェアDockerだ。
コンテナ型サービスは、仮想マシンに対して以下の利点をもっている。
- サイズが小さい
- オーバヘッドが低い
- 移植性が高い
- 開発・運用の効率改善
そこから"Immutable Infrastructure"、"Microservices Architecture"、"DevOps"といった言葉と共にDockerが使われる場面が多くあるという。
Dockerではミドルウェア、Webアプリケーションのデプロイ方法などのシステム構築を全部コード、スクリプトで書く。以後、システムの構成変更は、コードに対して実施する。
Dockerコンテナの構造だが、まずホストOS(現在はLinux)があり、その上にDockerのエンジンをインストールする。その環境で、スクリプトで作成したコンテナをどんどん動かしていく。
Azureでは、Dockerのエンジンを動作させるために、いくつかの方法を提供している。例えば、Dockerコンテナを稼働させるために最適化した、CoreOS(軽量Linux)というものを組み込んでいる。CoreOSは、Azureのポータルから選択すれば、エンジンがインストールされた形でサービスが立ち上がる。
Dockerを使うにはDockerfileを作る。ADD、COPY、FROMなどのコマンドに対して引数を書き、環境構成を作る。一回そのテキストファイルを作ると、それを元に同じコンテナを作っていくことができる。
また、例えばJDKやGlassFishなどの新バージョンが出たときは、そのURLを書き換えてやれば差分だけ取ってきてくれる。同様にWebアプリケーションのデプロイで、アプリケーションの部分が変わった場合、warファイルだけを取ってきてサービスを提供できるようになる。
ここで寺田氏はデモを披露した。AzureポータルのMarketplaceに選択肢があり、そこでCoreOSを選び、必要な構成、設定情報などを記入する。リソースグループを設定し、リージョンとして東京、東日本を選択し、OKボタンを押す。寺田氏は「選択するインスタンス・タイプは結構重要で、システム構築する(後述:docker build)際の時間の差や、サービスのパフォーマンスに影響するので、必要に応じて選んでほしい」と語った。続けてDockerfileを作れば、準備はOKだ。
Dockerfileからのイメージ作成は、docker buildというコマンドの実行で行う。コンテナの起動はdocker runを使い、自分が作成したイメージファイルを指定すれば、自動的に立ち上がる。
基本的に、設定ファイルを作り、コマンドを2個叩けばいいだけだ。これで環境が統一しやすくなる。
Azure上にはJavaで利用可能なサービスが多数用意されている
Docker以外にも、AzureのSDK提供により、いろいろなサービスをJavaから制御できるようになっている。すべてOSSのJavaプロジェクト管理ツールMavenによるもので、POMファイルにちょっとした設定をすれば、普通に開発ができる。
このAzureSDKの中で、扱いやすいとして寺田氏のオススメはブログサービスで、デモも披露された。またAzure上でPaaSとして提供されているSQLサーバをJavaから普通に扱うことができることも強調された。
続けて寺田氏が紹介したのが、Visual Studio Onlineだ。これは開発ツールではなくチームで開発する際に必要な機能がまとめられたもので、SaaSとして提供されている。これにより、今まで面倒だった大規模なチーム開発におけるツール構成が、より簡単になる。
最後に寺田氏は、「Azureを試して使い勝手が悪いと感じたことがあれば、フィードバックしてほしい」と呼びかけた。「今のマイクロソフトのすごさは、フィードバック対応力だと思っています。ちょっとしたことでもいい。フィードバックが次の時代のAzureをよくしていきます」と語り、セッションを閉じた。
Microsoft Azureに対するフィードバック先はコチラ。