Comments
Transcript
Jin Kimura Webアプリケーション・フレームワーク オープンソース時代の
IBM Japan, Ltd. オープンソース時代のWebアプリケーション・フレームワーク ~Web application componentsの歩みと関連技術の変遷~ Solutions&Assets, GBS, IBM Japan Associate ITA Jin Kimura 2009/7/27 © Copyright IBM Japan, Ltd. 2009 All rights reserved. IBM Japan, Ltd. *設計者の発言 : http://watanabek.cocolog-nifty.com/blog/ アプリケーション・フレームワークとは? アプリケーション・フレームワークとは – アプリケーションを「効率よく」開発してもらうための仕組み。主にアプリケーションを 取り囲む形のライブラリーを指すことが多い。 (コンサルタントがよく使う「フレームワーク」とは異なる) – 開発者はクラスを実装し、フレームワークがそれを呼ぶ。 (Hollywood Principle - “Don’t call us, we’ll call you - if we need to.”) – フレームワークは様々な技術要素を隠蔽する。 (「フレームワークはオブジェクト指向を隠蔽する」と言われることも*) Web application componentsの場合 – 「効率よく」を次の基本コンセプトにより実現 基本コンセプト アプリケーションを制御する部分を再利用する アプリケーションを制御する部分を再利用する ツールにより品質の確保/開発対象の削減を図る ツールにより品質の確保/開発対象の削減を図る PSU_temp_0522 2 © 2009 IBM Corporation IBM Japan, Ltd. Web application componentsの歴史 2000年にJava言語用MVCフレームワークとして誕生 – DAO生成ツールやJavaバッチ・フレームワークの取り込み – Struts / Spring Framework / JSFなどとの連携 – フルスタックなフレームワークとして2009年に至る MVC Model2 フルスタック化 DI/AOP 関連技術 EoD Web2.0 2000 2001 2002 2003 JMS 追加機能 Web application components PSU_temp_0522 3 MVC ログ DB SMTP V1.0 2004 2005 2006 2007 DI / AOP 国際化 流量制限 PDF Struts拡張 V4.0 コード監査 DAO生成 Javaバッチ 2008 Javaバッチ Webサービス Spring拡張 Ajax / REST マスターメンテ生成 V5.0 2009 FormWave連携 V6.0 JSF拡張 V7.0 © 2009 IBM Corporation IBM Japan, Ltd. Base / Express 共通 (参考) 全体像 Base のみ Express のみ 2009年現在のランタイム構成と開発対象 EJB (RMI-IIOP) or direct call Bootstrap WS コント ロー ラー エグゼ キュー ター 設定ファイル BL PDF IL JTA 流量制限 設定 ファイル サービス管理 Shell WSファ サード ジョブ・クライアント TWS 管理コマ ンド WSモジュール Form WSハンドラー 定義ファイル Application Server TWS連携 Web Service (SOAP-HTTP) サービス管理 流量制限 ログ出力 Component Plug-in Architecture 設定ファイル JSP マッピング 入力チェック ロール・チェック ユーザー管理 遷移履歴管理 画面割り振り マルチセッション リクエスト解析 モジュール 窓口サーブレット Web Server Browser 例外処理 PL DB JMS ログ出力 Component Plug-in Architecture 定義ファイル SMTP 設定ファイル PL Application Server Browser JVM/Application Server Web管理 コンソール リポジトリー EJB EJBクライ アント PSU_temp_0522 JVM/Application Server 4 DBMS © 2009 IBM Corporation IBM Japan, Ltd. 前期 フレームワークの夜明け 2000 2001 2002 2003 JMS MVC ログ DB SMTP V1.0 2004 2005 2006 2007 DI / AOP 国際化 流量制限 PDF Struts拡張 V4.0 コード監査 DAO生成 2008 Javaバッチ Webサービス Spring拡張 Ajax / REST マスターメンテ生成 V5.0 2009 FormWave連携 V6.0 JSF拡張 V7.0 PSU_temp_0522 5 © 2009 IBM Corporation IBM Japan, Ltd. Web application componentsの誕生 日本のとあるプロジェクトにて次の課題に遭遇 –Servlet APIの機能不足 • アプリケーションを効率よく開発する には、データ入出力制御、処理の振り 分けなどの仕組みがさらに必要。 –JavaServer Pagesの保守性の悪さ • 画面変更の度に業務ロジックの書き 直しが発生しないよう、JSP上に業務ロ ジックを記述させない仕組みが必要。 –構造化設計スキルの活用 • IPO (Input-Process-Output)仕様に 基づく開発スタイルに慣れた開発者が、 JavaによるWebアプリケーションを開 発できるような仕組みが必要。 View Controller IDによる画面データの 取得・更新・削除 遷移元 HTML 遷移先 HTML Front Controller HTTPセッション JSP Form (画面データ) Model I 入力データ (java.util.Map) P Reaction (処理の入口) 任意の オブジェクト O 出力データ (java.util.Map) MVC MVC Model2フレームワーク「Web Model2フレームワーク「Web application application components」の誕生 components」の誕生 (2000/3/31) (2000/3/31) PSU_temp_0522 (参考) Strutsも同時期に誕生(2001/6/15) 6 © 2009 IBM Corporation IBM Japan, Ltd. Eclipse Eclipse SIサービス向けフレームワークならではの課題と工夫1 (1/2) フレームワークだけでは開発生産性は向上しない – フレームワークはアーキテクチャーやメソドロジーに直結。フ レームワークに沿うようそれらを調整したほうが適用による効果 が増す。 研修サービス 「フレームワーク+サービス」として提供 「フレームワーク+サービス」として提供 • プログラミング・ガイド/設計ガイドの整備 • フレームワークの利用演習を含む研修を提供 • 開発メンバーによる個別サポート実施 導入サービス 個別サポート アプリケーション制御部分だけでは品質の確保 や開発対象の削減は実現しない – アプリケーション固有部分のコード量は制御部分よ りも多い。アプリケーション固有部分をいかに品質 よく/効率よく開発するかが生産性向上の鍵。 アプリケーション固有部分 コード生成による コード生成による コード解析による コード解析による 開発対象削減 品質チェック 開発対象削減 品質チェック JSP Formクラス (画面クラス) Reaction (画面処理クラス) Webサービス・ モジュール DAOクラス (DBアクセス) ジョブ・クラス (バッチ処理クラス) ビジネス・ロジック 各種開発支援ツールを提供 各種開発支援ツールを提供 PSU_temp_0522 7 • Form生成ツール • DAO生成ツール • マスター・メンテナンス・アプリケーション生成 ツール • Javaコード解析ツール アプリケーション制御部分 フレームワーク再利用による開発対象削減 フレームワーク再利用による開発対象削減 © 2009 IBM Corporation IBM Japan, Ltd. * http://www.priorartdatabase.com/IPCOM/000160588/ SIサービス向けフレームワークならではの課題と工夫1 (2/2) 基幹業務システムにはアプリケーションのき め細かい制御が必要 – 同時ログオンや連続したHTTPリクエスト処理の 整合性維持など、様々な状況のための制御機 能が実際のシステムには求められる。 ウィンドウ1 商品明細A 商品明細A ウィンドウ2 商品一覧 商品一覧 ポップアップ 商品明細B 商品明細B ウィンドウ3 きめ細かい制御機能の提供 きめ細かい制御機能の提供 商品明細C 商品明細C • マルチセッション管理機能 • 遷移履歴管理機能 • 動的パラメーター照会機能*など ウィンドウ1 ウィンドウ2 ウィンドウ3 HTTPセッション 開発チーム起点のアイディアでは限りがある – フレームワーク開発チームだけでは、前述のよ うなきめ細かい制御要件を網羅することは難し い。また、それらの機能を展開チームで毎回設 計するのは勿体ない。 利用サイクル Project A 提供サイクル Components アセット・ベース・サービスの展開 アセット・ベース・サービスの展開 • 開発チームによる展開ノウハウの収集 • 展開チームによるノウハウの再利用と改善 要求 展開チーム 開発チーム PSU_temp_0522 8 © 2009 IBM Corporation IBM Japan, Ltd. 中期 フレームワーク戦国時代 2000 2001 2002 2003 JMS MVC ログ DB SMTP V1.0 2004 2005 2006 2007 DI / AOP 国際化 流量制限 PDF Struts拡張 V4.0 コード監査 DAO生成 2008 Javaバッチ Webサービス Spring拡張 Ajax / REST マスターメンテ生成 V5.0 2009 FormWave連携 V6.0 JSF拡張 V7.0 PSU_temp_0522 9 © 2009 IBM Corporation IBM Japan, Ltd. Struts Struts Strutsの台頭と機能のコンポーネント化 基盤部品の再利用 (Interceptor/LifecycleListenerを実装) 様々なMVCフレームワーク実装の登場 生成 PDF メール送信 SMTP アクセス JMS アクセス DB ログ出力 流量制限 ロール・ チェック J2EE ユーザー管理 10 プラットフォーム マルチセッション管理 PSU_temp_0522 遷移履歴管理 – DI/AOPのエッセンスを利用した基盤機能部品化の 仕組み。プラットフォーム毎にCPA Adapterを提供 することによって、基盤機能を異なるプラットフォー ム上で再利用することができる。 – ConfigurationLoader:部品化の対象を基盤機能 に絞ったDIコンテナー – Interceptor:Front Controllerの処理でAOPに近い ことを実現するためのインターフェース(Filterに近 い) – LifecycleListener:初期化/終了処理(JSR-250の @PostConstructと@PreDestroyに近い) サービス・スケジュール管理 Component Plug-in Architectureの誕生 業務アプリケーション Component Plug-in Architecture (CPA) – Apache Struts上でWeb application components が提供する機能が使いたい – Web application componentsの内部コードの重複 を削減したい(リファクタリング) 機能のコンポーネント化 機能のコンポーネント化 CPA Adapter for Base Framework Base Framework ■リクエスト・マッピング ■例外処理の仕組み ■入力データ・チェック ■入出力管理 ■メッセージ・カタログ ■多言語対応 ■モジュール分割 ■リクエスト解析 ■ファイル・ダウンロード ■ページング ■サブページ ■動的属性指定 Struts JavaServer Faces JAXJAX-WS © 2009 IBM Corporation IBM Japan, Ltd. * Java言語で静的SQLを使用するための標準仕様 O/Rマッピング技術の活用 JDBCだけでは満たせない要求 DAO XML メソッド(SQL) – 既存システムのSQLを再利用したい メソッド(SQL) – 実行前にSQLの品質保証をしたい – DBアクセス・ロジックを共通化したい SQLを利用したO/Rマッピング技術 SQLを利用したO/Rマッピング技術 DAO生成ツールの誕生 – DDL / SQLからDTO / DAOのソースコードを生成 するEclipse Plug-inツール。SQLを積極的に活用 することで、SQLのチューニングやSQLの発行タ イミングを明示的に制御することができる。 – ツールにより、コード生成時の実装タイプ選択 (JDBC / SQLJ*)、SQLのEXPLAIN(DB2/Oracle)、 複数開発者によるDAOメソッド編集などが可能。 編集 DDL ----------- 入力 EXPLAIN DAO 生成ツール SQL ----------- 生成 DTO DAO JDBC SQLJ PSU_temp_0522 11 © 2009 IBM Corporation IBM Japan, Ltd. Spring Spring Framework Framework フレームワークのフルスタック化 クライアント層 ビジネス・ロジック開発スタイルの変化 – 画面分析駆動からドメイン(ビジネス)分析駆動へ – J2EE 5層モデル・アーキテクチャーの普及 DI DI (Dependency (Dependency Injection)技術の活用 Injection)技術の活用 Spring Frameworkとの連携 – POJOによるビジネス・ロジックの実装、モックによ る単体テスト、宣言的トランザクションが可能と なった。 Form 生成 ビジネス層 XXX +xxx() YYY +yyy() ドメイン・モデル 実装 Business Spring • MVCフレームワークによる画面ロジック • ドメイン分析によるビジネス・ロジック • DAO生成ツールによるDBアクセス・ロジック Form生成 Form生成 ツールで生成 ツールで生成 Frame work – Component-Scan機能(V2.5から)と国内外の知 名度を重視し、連携するDI実装としてSpring Frameworkを採用。これにより、次の3つのロジッ クを疎に結合。 プレゼンテーション層 インテグレーション層 DAO生成 DAO生成 ツールで生成 ツールで生成 DAO 生成 リソース層 PSU_temp_0522 12 © 2009 IBM Corporation IBM Japan, Ltd. Maven Maven Checkstyle Checkstyle FindBugs FindBugs SIサービス向けフレームワークならではの課題と工夫2 (1/2) • 新プラットフォームと既存アプリケーションを仲 介するためのAdapterを常に提供 • 移行ガイドも整備 Adapterによる 互換性維持 アプリケーション オフショア開発の増加 – 人手によるインスペクションではメリットが薄れる Adapter Adapter Javaコード解析ツールとルールの再利用 Javaコード解析ツールとルールの再利用 PSU_temp_0522 13 • 実績のあるルールをFindBugs / CheckStyleへ 移植 • オフショア納品物の検収に活用 フレームワーク フレームワークNew! 開発者 イ ン ショ ク ペ ンス フィ ード バ Javaコード 解析ツール 検収 – 品質基準を満たす必要十分なルールが欲しい 自動生成 自動生成 (Form (Form//DAO) DAO) 手動作成 手動作成 コード再生成による互換性維持 コード再生成による互換性維持 • 内部で新たなAPIを利用するFormクラス / DAO クラスを再生成 • 新規機能追加に伴う互換性維持に対する制約 を緩和 再生成による 互換性維持 バージョンup ック 責任者 ト Adapterの提供による互換性維持 Adapterの提供による互換性維持 フレームワーク フレームワーク ー – 機能拡張や新機能追加も同時に求められる。 自動生成 自動生成 (Form (Form//DAO) DAO) 手動作成 手動作成 ポ – APIの維持はもちろん、ミドルウェアの仕様変更の 吸収を求められることも。アプリケーションとの距離 が近い分、期待(義務)も大きい。 アプリケーション レ 求められる高い後方互換性 管理者 © 2009 IBM Corporation IBM Japan, Ltd. * http://www-06.ibm.com/jp/provision/no59/article5.html SIサービス向けフレームワークならではの課題と工夫2 (2/2) オープンソース・ソフトウェアの成熟と普及* – 有用なオープンソース・ソフトウェア(OSS)はSI サービスでも積極的に活用したい 方向付け と選定 システム OSS – 活用によって生じる(潜在する)リスクは回避したい OSS – OSSの自律的な進化を認めつつ、対象システム の(将来)構想と一貫するものを使いたい 選定されたOSSとの連携 選定されたOSSとの連携 • ライセンス形態に基づくリスク分析と標準検査 プロセス • 前提動作環境を含んだオープン性の考慮 • 成熟度 / 普及度 / 情報発信の質・頻度の考慮 事前検証された組み合わせの提供 事前検証された組み合わせの提供 • 商用ソフトウェアとの組み合わせを含む、事前 検証によるリスク回避と検証コストの削減 • 組み合わせ実績の蓄積と改善 開発者 OSS 検証済みの 構成の提供 開発支援ツール サービス Spring 使用方法の 提示・規定 Commons Maven Checkstyle FindBugs JMeter OSS利用の標準化を支援 OSS利用の標準化を支援 • 開発支援ツールや仕様書テンプレートによる 品質の統制と生産性の向上 PSU_temp_0522 14 Struts Commons © 2009 IBM Corporation IBM Japan, Ltd. 後期 先進するフレームワーク 2000 2001 2002 2003 JMS MVC ログ DB SMTP V1.0 2004 2005 2006 2007 DI / AOP 国際化 流量制限 PDF Struts拡張 V4.0 コード監査 DAO生成 2008 Javaバッチ Webサービス Spring拡張 Ajax / REST マスターメンテ生成 V5.0 2009 FormWave連携 V6.0 JSF拡張 V7.0 PSU_temp_0522 15 © 2009 IBM Corporation IBM Japan, Ltd. JMeter JMeter Java言語とバッチ処理 Javaバッチ処理に対する期待の高まり – 開発言語を統一したい – オンラインJavaシステムと部品を共用したい – 既存Java資産を有効活用したい 16 ジョ ョブ ブ・ ・ クラ ライ イア アン ント ト ジ ク PSU_temp_0522 IBM Tivoli Workload Scheduler Shell Webサービス EJB EJB • • • • WSファ WSファ サード サード Browser – 次のチャネルからロジックの呼び出しが可能。 管理コマン 管理コマン ドド WS – Javaによるバッチ実行管理の基盤機能と バッチ処理プログラムの実行制御用APIを提 供。開発者はロジック開発に集中することが できる。 TWS連携 TWS連携 Shell Javaバッチ・フレームワークの誕生 TWS フレームワーク化による開発支援 フレームワーク化による開発支援 設定 ファイル Bootstrap Bootstrap コント コント ロー ロー ラー ラー エグゼ エグゼ キュー キュー ター ター Web管理 Web管理 コンソール コンソール Logic Logic JVM/Application Server リポジトリー EJBクライ EJBクライ アント アント JVM/Application Server DBMS © 2009 IBM Corporation IBM Japan, Ltd. Webサービスでの基盤機能再利用 サービス・プロバイダー Webサービスの普及と課題 – 高負荷を回避して安定したサービス を提供したい – サービスを稼動させた状態で部分的 に保守したい JAX-WSランタイム Webサービス Adapter 流量制限 Web サービス ハンドラー Adapter Adapter サービス・スケジュール管理 Webサービスでの基盤機能再利用 Webサービスでの基盤機能再利用 Webサービス・ハンドラーの誕生 – 次のシステム基盤機能を再利用する ことが可能 • サービス・スケジュール管理機能 • 流量制限機能 サービス リクエスター 流量制限 サービス・スケジュール管理 – CPA(前述)の思想を受け継いだシス テム基盤機能の実行環境を提供。 Webアプリケーションとして実績のあ る部品を再利用することが可能に。 SOAP/HTTP JMSアクセス Service Logic SMTPアクセス PDF作成 ログ出力 Webサービス・ハンドラー Webサービス・ハンドラー (CPA Adapter) JAXJAX-WS PSU_temp_0522 17 © 2009 IBM Corporation IBM Japan, Ltd. *オプション提供 Dojo Dojo Toolkit Toolkit リッチ・クライアント技術への対応 ユーザーの不満 – ブラウザー(HTML)の制約によって思い通り に配置できない入力項目 サジェストリスト 入力チェック – キーボードのショートカットが使えない(マウス 中心の)画面操作 – 端末やVBに比べて頻繁な画面遷移 リッチ・クライアント技術の活用 リッチ・クライアント技術の活用 マスク入力 カレンダー カンマ区切り挿入 リッチ・クライアント技術の採用 – 下記のリッチ・クライアント技術の採用により 課題を解決。 • Appletとの連携インターフェース提供 • 入力支援JavaScriptライブラリーの提供* • Ajaxライブラリー(Dojo Toolkitなど)との連 携インターフェース提供 スプレッドシート – 各技術が提供している機能は画面の装飾よ りも入力の支援が中心。ユーザーの業務効 率向上に貢献。 PSU_temp_0522 18 © 2009 IBM Corporation IBM Japan, Ltd. Ease of Development (EoD)の時代 複雑化するフレームワークの導入・設定 – フレームワークの高機能化に伴う設定ファイ ルの肥大化 – 決まりきったアプリケーションはもっと簡単に 作りたい 設定の簡略化とアプリケーションの定型化 設定の簡略化とアプリケーションの定型化 Ease of Developmentを目指して – Spring Framework V2.5のcomponent-scan とannotationの活用による設定の簡略化。 – 典型的な開発フォルダー構成を生成する機 能(Scaffold)は現在開発中 アプリケーション生成ツールの提供 – DDLやデータ定義からマスター・メンテンナン ス・アプリケーションを生成するツールを提供 – DDLの読み込み部はDAO生成ツールの内部 機能を再利用 ・・・ <bean id="xxx" class="XXX"> <property name="yyy" ref="yyy"/> </bean> <bean id="yyy" class="YYY"/> ・・・ @Service public class XXX { 簡略化 @Autowired public void setYYY(YYY y) { ・・・ @Component public class YYY { ・・・ } public class XXX { ・・・ } public class YYY { ・・・ } DDL ----------- データ定義 入力 マスター・メンテナンス 生成ツール X 生成 マスター・メンテナンス マスター・メンテナンス フレームワーク フレームワーク PSU_temp_0522 19 © 2009 IBM Corporation IBM Japan, Ltd. JavaServer Facesでの基盤機能再利用 流量制限 ロール・ チェック J2EE ユーザー管理 – Java EE V1.5より、Enterprise Javaの世界 におけるMVCフレームワークの標準に – これまで求められてきたきめ細かい制御機能 はやはり必要 JavaServer JavaServer Faces上での部品再利用 Faces上での部品再利用 マルチセッション管理 サービス・スケジュール管理 JavaServer Faces (JSF)の普及 PSU_temp_0522 20 JMSアクセス Session Bean SMTPアクセス Managed Bean PDF作成 ログ出力 CPA Adapter for JSF CPA Adapter for JSFの誕生 – JSF上でシステム基盤機能を利用するための 実行環境を提供。Base Framework / Struts のWebアプリケーションとして実績のある部 品を再利用することが可能に。 ManagedBeanの呼び出し前後で、流量制限 などのシステム基盤機能を実行。 – JSFおよびJava EE 5のDI機能が利用可能と なったことにより、EJB (SessionBean)がより 使いやすくなった。 – JSF 1.2 (Java EE 5)では依然XMLによる ManagedBeanの宣言が必要。Annotationに よる宣言が可能なJSF 2.0が待望される。 injection JavaServer Faces RestoreView ApplyRequests ProcessValidations RenderResponse InvokeApplication UpdateModelValue ・・・ <managed-bean> <managed-beanname>xxx</managedbean-name> <managed-beanclass>XXX</managedbean-class> <managed-beanscope>session</managed -bean-scope> </managed-bean> ・・・ @ManagedBean(name=“xxx”) 簡略化 @SessionScoped public class XXX { ・・・ } © 2009 IBM Corporation IBM Japan, Ltd. まとめ Web application componentsは多くの技術的課題に遭遇し、システム開発 に必要な部品とツールを提供してきました。 StrutsやSpring Frameworkなど、有力なオープンソース・ソフトウェアの台 頭やJava SE / Java EEをはじめとする標準技術の進化の中でも、それらの 部品やツールは様々な形で再利用され続けています。これはソフトウェアのコ ンポーネント化と再利用が、長期に渡って価値を提供し続ける重要なポイント であることを示唆しています。 今後も技術的課題の解決と再利用を推進し、よりSmartなソフトウェア開発を 実現していきます。 PSU_temp_0522 21 © 2009 IBM Corporation