2月13日(土)に開催された、Java Doでしょう #04に参加しました。
最近、お仕事でJavaを使う機会が減ったのもあり、Java勉強会はとても久しぶり。
この日は、来札した日本マイクロソフト株式会社の寺田佳央さんのお話を楽しみに参加しました。

寺田さんのお話

Sun Microsystems時代から、Javaエバンジェリストとしてご活躍の寺田さん。
2015年に、Oracleから日本マイクロソフト株式会社へ転職されました。
Microsoft社のこと、Asureのこと、Dockerを使用してJavaをAzure上で動作させるデモ、と盛りだくさんの内容でした。

今、Microsoftがおもしろい

Satya Nadella(サティア・ナデラ) 元クラウド担当副社長が現在のCEOに就任してから、Microsoftの文化は大きく変わってきているそうです。
「Microsoft ♡ Linux」を大きく掲げ、技術的にLinuxに歩み寄った、Linuxと一緒に新しいものを生み出していこうという流れが強くなったとのこと。それによって、会社全体の空気も、人の流れも変わっていったそうです。

Appleとも手を組んでよいものを作っていこうという取り組みもある。

「今のMicrosoftだから、自分は “Javaエバンジェリスト” として働くことができる」という寺田さん。
今まで自分の中にあったMSのイメージと随分違ってきているんだな・・・というのを
実際に働いている人から聞くことができました。

また、寺田さんは
「もし、Microsoft製品で気になったことがあればぜひフィードバックしてほしい。今の体制であれば受け入れる形ができてきている。今のMicrosoftは、次の時代のMicrosoftを良くするために動いている。」
ともお話しされていました。
早速、この日の懇親会会場への移動のバスの中で、気になった点をいろいろお伝え出来ました。
(コマンドプロンプトの文字コードの扱いづらさとか、コマンドプロンプトのコマンド履歴の扱いづらさとか、環境変数の扱いづらさとか。)

進化し続けるAzure

現在、Azureはすごい速度で進化している段階。1年に5-600の新しい機能が生まれているとのこと。
Azureでオープンなプラットフォームを扱えるようになってきている。

例えばJavaに関連するところだと以下は全てAzureとの連携ができている。

  • IDE:
    NetBeans,eclipse,IntellJ
  • 仮想OS:
    MS OS, Linux, docker
  • アプリケーションサーバー:
    glassfish, tomcat, WildFly, jetty など
  • Webフレームワーク:
    JavaEE spring play grails

“WildFly” 名前とロゴがかっこいい..と思って調べたら元々JBossだったのか!と驚き。

Azure上の開発だけでなく、

  • Java VMのパフォーマンス改善
  • Java SE 7 & 8 に対するパッチ提供

などで、Java contributerとして貢献しているそうです。

Java on Azure Starting Point

Azure上でJavaを使う方法として主な選択肢は4つ。

  1. IaaS
    自分でプラットフォームを作っていく(必要なものをダウンロードしていく)
  2. Cloud Service PaaS
    OSレイヤーまでのPaaS, アプリケーションサーバーは自分でメンテナンスする
  3. Web Apps PaaS
    アプリケーションサーバーまでのPaaS(tomcat or jetty)
  4. Container
    Dockerを使った環境構築

最初は公式ガイド(https://azure.microsoft.com/ja-jp/develop/java/)を参照すると良いとのこと。

Dockerがどういう場面で便利なのか

今回、自分にとって一番ためになった知識は「Dockerの効用」を実感できたことでした。
巷でとても人気になっている技術だというのもわかるし、ざっくりと「コンテナ技術」という新しい概念があるということもわかっていた。だけど「じゃあそれが今自分にどう役に立つのか?技術的探究心を満たす他に、便利な場面があるのか?」というところがいまいちわかっていなかったのです。
今回寺田さんの説明を聞いてはじめて「しっくりくる」という感覚を得ることができました。

メリットは大きく二つ

  • 移植性が高い – 一度イメージを作ればどこでも動かすことができる
  • 仮想化のオーバーヘッドがすごく小さくなる、直接OSのカーネルにアクセスできるので効率が良い

とくに「仮想化のオーバーヘッドがすごく小さくなる」点、図解していただき、なるほど!と。

アプリケーションをデプロイするときに、すでに稼働しているサーバーの中にアプリケーションを置くだけじゃなくて、毎回仮想OSを丸ごと立ち上げる感じになるのね。その運用を丸ごと自動化することで、ライブラリの依存関係や仮想化のオーバーヘッド問題を解決していくのか。なんか上手く言えないのですが、はじめて自分の身近なもので具体的なイメージができました。

実際にDockerコンテナを使うと便利なシーン

  • ローカル環境でのアプリ開発& テスト
    バージョン・運用の統一
  • 開発チームのコラボ
  • 継続的インテグレーション CI
    DevOps,リリースサイクルの改善

運用で、DevOpsを考えたときリリースサイクルの早さはとても重要になるので自動デプロイはどんどん推進するべきとのこと。
今回はDockerを使用してコミットから自動デプロイまでの流れをデモしていただきました。
寺田さんのブログにも詳しい説明があります。

次のような流れになります。ここまで自動化できるのか。

  1. ソースをコミット
  2. Visual Studio Team Services (VSTS) のgitリポジトリにpush
  3. pushされたことをAzure上のJenkinsに通知
  4. Jenkinsがビルド・テスト
  5. GreenだったらDockerイメージを作成しDockerHubへpush
  6. Docker Tutumがpushを検知
  7. Tutum経由で、Azure仮想マシン作成→Dockerサーバ構築→Dockerコンテナ起動

Docker Hubへのpushを検知しActionを規定できるDocker Tutumはめちゃくちゃべんり、とのこと。
一度、自動化の流れを作ってしまえばかなり作業が楽になるが、最初に自動化の流れを作るまでの設定などはけっこう大変、とのことでした。寺田さんのおかげで日本語のノウハウのアウトプットが増えていっている、ありがたい。

今は、主に開発環境やCIで主に使用されている技術を、今後、本番環境で適用させるためには、可用性、信頼性を高めていく必要があるとのこと。スケールなどは簡単にできる技術もあるので面白そうでした。

ただ1つ気になったのは、Azure上でコンテナを増やすというのは、OSが増えることになるのだけどAzure上の課金単位はどうなっているのか?どのくらいお金がかかっていくのだろう…と。ここも寺田さんに聞いてみたところ「コンテナになることによってかかるお金が増えるわけではない」とのことでした。
コンテナベースになるOSがコンポーネントになる、からかな。

まだ理解できていない部分が多いけれどDockerを身近に感じられてよかった。

LTや懇親会

LTは学生さんや新社会人が多くフレッシュでした。groovyを知ったときの感動はわかる気がした。
懇親会では、自分の仕事の話をしたり、学生さんの話を聞いたりと、いろいろな人がいて、とても楽しかったです。

また、参加したいです。
ありがとうございました。