KEMBAR78
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.- | PDF
© 2013 IBM Corporation
JJUG  CCC  2015  Fall
タイムマシン採⽤用:
明⽇日のエンタープライズJavaの世界を予想する  
-‐‑‒Java  EE7/クラウド/Docker/etc.-‐‑‒
#ccc_ab4
#ccc_ab4
タイムマシン経営
•  「海外で成功したビジネスモデルは
  数年年遅れで必ず⽇日本にもやってくる」
–  90年年代に孫正義⽒氏が提唱した⼿手法
•    ⽶米国などで成功したビジネスモデルを
  国内でいち早く取り⼊入れることにより
  ⼤大きな成功を収めた
#ccc_ab4
リスクの最⼩小化
を優先  
ミッション・クリティカルな
アプリケーションの管理理、運⽤用
マラソンランナー
q  サービスレベル重視
q  ウォーターフォール開発
q  ⻑⾧長期に渡るシステム構築
イノベーションのスピード
を優先
成⻑⾧長機会のための
探索索、開発、デプロイ
スプリンター
q  スピード開発重視
q  試⾏行行錯誤、継続的デプロイ
q  早期のシステム構築/改修
Web系企業 SI系企業
⼆二つの⽂文化に分かれる⽇日本のIT企業
#ccc_ab4
しかし,異異なる技術が使われるわけではない
§ 新しい技術は,
最初にWeb系の企業で採⽤用が進む
– 試⾏行行錯誤による技術適⽤用
– トラブルの発⽣生と解析,対応
– リリース後の効果確認
§ 数年年たち,
⼗十分な実績が確認された技術がSI系の企業でも採⽤用される
– ベストプラクティスの確⽴立立
– 問題判別のノウハウの蓄積
– 適⽤用前のROIの確認
4
#ccc_ab4
例例えば,ソースコードの履履歴管理理
§ かつてのSI系企業は
– 共有ディスクでソースファイルを管理理
– 変更更前のコードはコメントで残す
– 変更更内容は台帳で管理理
§ 現在は,SI系企業でも
VCS(バージョンコントロールシステム)を使⽤用
– 変更更は「コミット」で管理理
5
#ccc_ab4
タイムマシン採⽤用
§ Web系企業の動向を⾒見見れば
エンタープライズの将来がわかる
– 全ての新技術がSI系企業で
普及するわけではない
– 成功が確認された
技術が採⽤用される
6
#ccc_ab4
いま、まさに採⽤用が進んでいる技術
モバイル
クラウド
ビッグデータ
#ccc_ab4
これから採⽤用されることが確実な技術
§ アプリケーションのモダン化
– HTML5アプリケーション
– マイクロサービスアーキテクチャー
§ Java  EE  7  /  Java  SE  8
§ システム構築の⾃自動化
– Docker
– CHEF
8
#ccc_ab4
9
アプリケーションのモダン化
#ccc_ab4
HTML5環境の新しいアプリケーションスタイル
§ クライアントMVC・サーバーの機能はAPIとして利利⽤用
10
Web Browser
Application Server
Application
HTTP
Request
HTML/JS
Controller Session
Data
View
Business
LogicModel
DomainDomain
Web Browser
Application Server
Application
View
HTML/JS
Controller
Data
Store
Model
Model
DomainDomain
RESTful or
WebSocket
JSON
Business Logic
従来のWebアプリケーション Single Page Application (SPA)
#ccc_ab4
HTML5アプリ・クライアントMVCのメリット
ユーザー・エクスペリエンスの向上
「使いやすいWebアプリケーションが作れる」
§ 従来のフォームベースのWebアプリケーション,
ページ遷移を前提としたアプリケーションは,
決してユーザーにとって使いやすいものではない
§ HTML5アプリケーションは,
多くの「ブラウザ上で動くRichクライアント」が模索索され
試⾏行行錯誤が繰り返された末の最終結論論
11
#ccc_ab4
マイクロサービス・アーキテクチャー
§ 単⼀一の(モノリシックな)アプリとして実装するのではなく,
複数のサービス・APIの統合として実装する
– 変更更の影響範囲を極⼩小化
– 機能の再利利⽤用を促進
12
http://martinfowler.com/articles/microservices.html
#ccc_ab4
なぜサービスへの分離離が必要なのか
§ かつては
「部品化・サービス化・API化による再利利⽤用」
といっても絵に描いた餅状態だったが...
§ これからは
エンタープライズの世界でも必須の考え⽅方になる
13
なぜなら・・・
#ccc_ab4
ブラウザ・クライアント環境の急激な変遷
§ MS  IE  6  →  7/8/9/10/11/MS  Edge  ...
§ iOS  4/5/6/7/8/9  ...
§ Firefox/Chrome/Safari/Android...
14
#ccc_ab4
ブラウザ上のJavaScriptの群雄割拠
15
#ccc_ab4
Webアプリケーションの短寿命化
§ ⼀一度度作成したアプリケーションを
何年年も使い続けることは不不可能になった
§ 年年に数回の更更新では変化に追いつけなくなった
↓しかし
§ 企業の基幹系システムをそんな頻度度で更更新はできない
↓どうするか
§ フロントエンド/クライアントUIは使い捨てにする
§ バックエンドを⻑⾧長期間つかっていく
16
#ccc_ab4
マイクロサービスも普及期に
§ 事例例やノウハウもたまってきました
17
http://www.atmarkit.co.jp/ait/articles/1507/17/news019.html
#ccc_ab4
18
Java  EE  7  /  Java  SE  8
#ccc_ab4
Java  Enterprise  Edition  7  (Java  EE  7)
19
あれから
2年年半がたちました
#ccc_ab4
JavaOne  2015
20
#ccc_ab4
WAS  Libertyプロファイルは
V8.5.5.6で
Java  EE  7  Full  Platform対応
21
#ccc_ab4
22
WASの新しいランタイム:Libertyプロファイル
WAS V8.5.5 Liberty & WDT
Java EE 7準拠
Java EE 7のFull Platform標準に
準拠したアプリを完全サポート
最新のJava SE 8もサポート
Unzipによる導⼊入とデプロイ
パッケージをした
サーバー  + アプリ  + 構成情報を
Unzipでデプロイ可能
簡単な構成と動的変更更
最低限必要な構成ファイルは
server.xmlひとつだけ
デフォルトベースで簡単構成
構成変更更は再起動なしに反映
軽量量ランタイム
メモリー使⽤用量量が⼩小さい: 60MB程度度〜~
ディスク使⽤用量量も100MB以下
起動が速い
起動時間: 5秒程度度
統合ツール(WDT)
⾼高機能なEclipse⽤用の連携ツールを無償で提供
Eclipseから簡単に使⽤用可能
⾃自動化ツールとの連携
多くのOSSツールに
無償でプラグインを提供
#ccc_ab4
軽量量・⾼高速なランタイム
§ 軽量量
– 数⼗十メガバイトのメモリ消費/100メガバイト弱のディスク消費
– コンテナや仮想環境への集約が容易易に
§ ⾼高速起動・動的変更更
– 数秒以内でサーバーが起動
– サーバーの構成変更更や
アプリケーションの変更更も
即座に反映
§ モジュール構造のランタイム
– 提供機能をFeatureとして
モジュール化
– 必要なFeatureだけを選択して
導⼊入・起動
<featureManager>
        <feature>jsp-‐‑‒2.3</feature>
        <feature>jdbc-‐‑‒4.1</feature>
        <feature>jaxrs-‐‑‒2.0</feature>
        <feature>sessionDatabase-‐‑‒1.0</feature>
        <feature>ssl-‐‑‒1.0</feature>
</featureManager>
構成ファイル  server.xml
ServletJSPJDBCSSL
JAX-‐‑‒RS
sessionDatabase
依存関係も
⾃自動的に解決
JSON
#ccc_ab4
Java EE 7の三つのゴール
§ HTML5環境への対応
§ 開発⽣生産性の向上
§ エンタープライズ・ニーズへの対応
24
⼤大幅な機能拡張
#ccc_ab4
フレームワークの世代交代
§ Struts  1.x
– 2013年年  EoL(End  of  Life)の発表
– 2014年年  脆弱性発⾒見見による混乱(CVE-‐‑‒2014-‐‑‒0114)
§ Seaser2
– 主要開発者のプロジェクト離離脱により新機能追加の停⽌止
– Ajax/HTML5連携やRESTful  Webサービス対応の不不備
– 2016年年でのサポート終了了宣⾔言
25
#ccc_ab4
2000年年代前半のWebアプリケーション
§ まだまだ未完成で⼒力力不不⾜足のJ2EE仕様
→多くの「アンチJ2EE技術」の登場
§ コンテナ上にフレームワークを追加し
その上にアプリケーションを構築することが主流流に
– Open  Sourceフレームワーク
– ベンダー製フレームワーク
– 独⾃自フレームワーク
26
#ccc_ab4
2015年年のWebアプリケーション事情
§ Java EE提供の各種仕様の機能増強・完成度度の向上
「標準仕様で⼗十分」
– CDI 1.x :依存性注⼊入
•  HibernateやSeaser2の提供していた機能をとりこみ
– JSF 2.x :Webアプリケーション・フレームワーク
– JPA 2.x :O/Rマッピング
•  いずれもVersion 1.xから⼤大幅な機能強化
27
→ Java EEへの回帰
#ccc_ab4
JSF
JSP / EL
Java  EE  7の標準的なアプリケーション構成
JAX-RS
WebSocket
CDI                    .
EJB / JTA
JPA Database
•  画⾯面デザイン
-‐‑‒  JSF  /  JSP  /  EL
•  外部連携
-‐‑‒  JAX-‐‑‒RS  /  WebSocket
•  依存性注⼊入・ビジネスロジック
-‐‑‒  CDI  /  EJB  /  JTA
•  DB連携・ORマッピング
-‐‑‒  JPA
#ccc_ab4
Java  EE  7を採⽤用する価値
「標準」である強み
§ 多くのベンダーによるサポート
– 特定のベンダーにロックインされることなく使⽤用できる
§ ⻑⾧長期にわたるサポート
– 寿命の⻑⾧長いバックエンドにも安⼼心して採⽤用できる
利利⽤用する「フレームワーク」には,
利利⽤用する「アプリケーションサーバー」より
   はるかに強くロックインされる
29
#ccc_ab4
Libertyプロファイルの「ゼロ・マイグレーション」
§ 新しい仕様のバージョンに対応するフィーチャーが
追加されても,従来のバージョンも提供されます
– 例例)  現在はServlet  3.1フィーチャーが提供されていますが,
Servlet  3.0フィーチャーも引き続き利利⽤用できます
§ アプリケーションで新仕様が必要なければ
従来のフィーチャーをそのまま利利⽤用可能
– ただし,
対応するJDKのバージョンは変更更される可能性があります
servlet-‐‑‒3.0
servlet-‐‑‒3.1
servlet-‐‑‒3.0 servlet-‐‑‒3.1
新バージョン
新バージョン
⼀一般的なアプリケーションサーバー WAS  Libertyプロファイル
#ccc_ab4
Java  SE  8:Project  Lambda
31
§   Lambda式
§   型推論論
§   Method  Reference
§   Default  Method
§   Stream  API
( 引数 ) -> { 処理理 }
オブジェクトとして「変数に代⼊入」したり
「メソッドの引数にわたす」ことができる「コード⽚片」
#ccc_ab4
Lambda式とStreamによるループの内部化
§ 外部イテレータ
– コンテナから順次,要素を取り出して処理理を記述する
§ 内部イテレータ
– 処理理をコンテナにわたして,コンテナが要素ごとに実⾏行行する
32
List<Person> list = ... ;
List<String> ret = new ArrayList<String>();
for (Person p : list) {
if (p.getGroupId().equals(group)) {
String name = p.getName();
ret.add(name);
}
}
return ret;
return list.stream()
.filter(p -> p.getGroupId().equals(group))
.map(p -> p.getName())
.collect(Collectors.toList());
filter
map
collect
#ccc_ab4
エンタープライズといえばロギング
§ ありがちなコード
§ これがLambda式でこうなる
33
if (log.isLoggable(Level.FINE)) {
log.fine("Value = " + getVeryLargeString());
}
log.fine(() -> "Value = " + getVeryLargeString());
メリット:
⾼高速化・コードの簡素化
#ccc_ab4
34
既存コードのJava  8への移⾏行行の負荷はそれなり
過去⼆二回(1.1→1.2および1.4→5.0)に匹敵する
あるいは,それ以上のインパクトのある⼤大変⾰革
§ じつはユーザーコードの変更更は,それほど⼤大変ではない
§ アプリケーションが使⽤用しているライブラリの
Java  SE  8対応がかなり⼤大変になるケースがしばしば
§ 詳細はCD-‐‑‒2  清⼤大輔さん(株式会社ビズリーチ)のセッション資料料を!
Java⾔言語仕様
1st Edition
JDK 1.0 1.1
Java⾔言語仕様
2nd Edition
J2SE 1.2 1.3
Java⾔言語仕様
3rd (SE 7) Edition
J2SE 5.0 Java SE 61.4 7
Java⾔言語仕様  Java SE 8 Edition Java SE 8
#ccc_ab4
最初は新規アプリケーションで
§ 可能であれば「最初のJava  SE  8アプリケーション」は
新規に開発する案件で採⽤用
§ ⼗十分なスキルが蓄積されたあとで
既存のアプリケーションのマイグレーションを
§ 移⾏行行後は,メンテナンスなどで⼤大きなメリットがあります
35
#ccc_ab4
36
システム構築の⾃自動化
#ccc_ab4
基盤技術者は「ソフトウェア開発者」になる
§ クラウドの時代にはInfrastructure  as  Codeや
Immutable  Infrastructureの考え⽅方が必要
§ 実⾏行行環境に問題が⾒見見つかった場合:
– 従来は:実⾏行行環境を直接変更更する
– これからは:環境を構築する「コード」を修正し,環境を再構築
37
⼿手作業による
再現性のない作業
(の繰り返し)
コード実⾏行行による
均質な作業と実⾏行行結果
⼤大量量のドキュメント
・作業⼿手順書の整備
短時間で
確実なアウトプット
#ccc_ab4
構築⾃自動化の必要性
§ クラウドではサーバー環境も
– 必要なときに素早く作成
– 負荷に応じて数を⾃自由に増減
– 不不要になったら環境を削除
§ 構築の頻度度はあがり
かけられる時間は減少する
38
#ccc_ab4
Infrastructure  as  Codeの効果
§ 構築時間の短縮
§ ⼿手動設定によるミスの防⽌止・属⼈人性の排除
§ 構成のバージョン管理理
39
#ccc_ab4
コンテナ技術:Dockerの普及
§ OSも含んだ「仮想マシン」ですら負荷が⾼高い
– サイズの⼤大きな仮想ディスクイメージ
– OSの起動・停⽌止時間
– メモリリソースの消費
§ 「仮想マシン」から「コンテナ」へ
– アプリケーションを実⾏行行するのに
必要なリソースだけをイメージに格納
– OS内に隔離離された領領域を作成
– 短時間に配備・起動が可能
§ Linuxをベースとしたコンテナ技術Dockerが
デファクトスタンダードになりつつある
40
#ccc_ab4
WAS  LibertyはDockerイメージも提供
§ Dockerで稼働するWebSphere  Application  Server  
Liberty  プロファイル,  フルプロファイルもサポート対象
§ 開発⽤用途で利利⽤用可能なWAS  Liberty  イメージは
Docker  Hubからpullして使⽤用
– Java  EE  7対応の最新版  WAS  V8.5.5  Liberty  ドライバーを提供
– Liberty  Core,  Base,  NDの商⽤用ライセンスを使⽤用し,  
Docker  Hubにあるイメージをアップグレード可能
https://registry.hub.docker.com/_̲/websphere-‐‑‒liberty/
#ccc_ab4
各種OSSツールとの連携
各種CI・Buildツールとの
連携機能をGitHubで公開
https://github.com/wasdev
#ccc_ab4
WAS  Libertyの無償利利⽤用
⼀一つの企業につき2GバイトのJavaヒープメモリに限定し,テストおよび本
番でのLibertyプロファイルを無償で使⽤用が可能(サポートはなし)になる
オプションを提供
ü  ⼩小規模な開発を無償ではじめて,
必要に応じて拡張
ü  現在の無償の開発者オプションに加え
実際の本番環境での利利⽤用を確認できる
ü  パフォーマンスや機能拡張に優れた
WAS  Liberty  Base  エディションの全機
能を利利⽤用可能
ü  オンプレミスとパブリッククラウドの
開発オプションを柔軟に選択可能
Libertyプロファイル無償提供の意義 無償オプションの利利⽤用⽤用法
§  WASdev.netから開発者版をダウンロード
提供されるライセンスファイルを適⽤用
§  WASdev上の⽂文章やForumを利利⽤用して
問題の解決が可能
#ccc_ab4
44
One  more  thing...
#ccc_ab4
エンタープライズにも来るかもしれない技術
§ サーバーサイドJavaScript
45
サーバーブラウザ
APIクライアント
モバイル
var  http  =  require("http");
http.createServer(function(request,  response)  {
    response.writeHead(200,  {"Content-‐‑‒Type":  "text/plain"});
    response.write("Hello  World");
    response.end();
}).listen(8888);
#ccc_ab4
Node.js
§ サーバーサイドJavaScriptの
デファクトスタンダードの地位を確⽴立立
– 2009年年に開発、2012年年ぐらいから普及
– クライアント側でのJavaScriptの重要性が増すにしたがい台頭
§ 評価された理理由
– Google製V8エンジンによるJavaScriptの⾼高速実⾏行行
– シングルスレッドのイベント・ループ,ノンブロッキングI/O
– Node.js⽤用のモジュールが、エコシステムにより⼤大量量に存在
既存のものを組み合わせるだけでそれなりの物ができてしまう
46
#ccc_ab4
実は、IBMもNode.jsを提供してます
§  IBM  SDK  for  Node.js  V1.2
§  OSSのNode.js  version  0.12.7ベース(2015/7/9リリース)
–  現在の最新のNode.jsは5.0.0  (2015/10/29リリース)
§  Intelアーキテクチャーに深く依存したV8エンジンを改良良し
IBM  POWER  /  zアーキテクチャーに適合
–  AIX  /  Linux  on  Power  Systems  版
–  Linux  on  z  Systems  版
§  RAS(Reliability,  Availability,  
and  Serviceability)機能を追加
§  Linux  x86  /  Windows  /  Mac  OS  X  版も提供
§  有償でサポートを提供
#ccc_ab4
2015年年9⽉月
IBMはStrongLoop社を買収しました
§ Node.js  向けの
エンタープライズ
ソリューションを
有償/OSSで
提供する企業
48
StrongLoop  Arc
Data  Connectors
Mobile  SDKs
Enterprise  Connectors
Process  Manager
Monitoring  &  Tracing
LoopBack:  API  Server
Express  Framework
Enterprise  Support
API  Gateway  (beta)
Open  Source
Commercial
License  Model
Node.jsの
Webアプリ・
フレームワークの
デファクト
MEAN(MongoDB,  Express,  AngularJS,  Node.js)
#ccc_ab4
49
最後に
#ccc_ab4
みなさんの⼒力力が必要です
§ 新しい技術が,
あなたの会社でいつ採⽤用されるかを決定する
もっとも⼤大きな要因は「現場の⽅方たちの声」です。
§ ⼗十分に検証された新技術の導⼊入は,
利利⽤用者・開発者・経営者のみなにメリットをもたらします
§ 変わることを楽しみましょう!
50

タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-