Javaにおけるモジュラリティ元年

3,795 views

Published on

QConTokyo2010でお話させていただいた資料です。写真を多用しているため、分からない部分はお気軽にメッセージをください。

Published in: Technology
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,795
On SlideShare
0
From Embeds
0
Number of Embeds
726
Actions
Shares
0
Downloads
20
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

Javaにおけるモジュラリティ元年

  1. 1. Java における モジュラリティ元年 近藤寛喜 株式会社チェンジビジョン 開発部 1 QCon Tokyo 2010
  2. 2. 謝辞 • 参加を認めてくれた平鍋さん始め • Change Visionのみんな • 講演させてくださったInfoQ Japanの皆様 • 事前にレビューしてくださった • 原田さん、安井さん、河村さん、 • 雄介さん、北條さん • ありがとうございました! 2 QCon Tokyo 2010
  3. 3. 自己紹介
  4. 4. アジェンダ • モジュラリティの重要性 • Project Jigsaw と OSGi • モジュール設計の勘どころ 4 QCon Tokyo 2010
  5. 5. アジェンダ • モジュラリティの重要性 • Project Jigsaw と OSGi • モジュール設計の勘どころ 5 QCon Tokyo 2010
  6. 6. InfoQ でも記事多数 !! • Neil Bartlett氏 – Introduction of OSGi – Neil Bartlett on OSGi(インタビュー) • Alex Bletwitt氏 – Modular Javaシリーズ – Bundle.updateシリーズ 6 QCon Tokyo 2010
  7. 7. 日本では・・・ 未だ 情報少ない 7 QCon Tokyo 2010
  8. 8. なぜモジュール化が 重要になってきたか? 8 QCon Tokyo 2010
  9. 9. ソフトウェアは 複雑 http://www.flickr.com/photos/15928286@N07/2168229708/
  10. 10. Q :自動車の場合? http://www.flickr.com/photos/cytech/4386280055/
  11. 11. A:1 億 LOC http://www.flickr.com/photos/cytech/4386280055/
  12. 12. 1990 1200億 (原文)http://users.jyu.fi/~koskinen/smcosts.htm 12 http://www.flickr.com/photos/royalport/416330036/ QCon Tokyo 2010
  13. 13. 2000 2500億 (原文)http://users.jyu.fi/~koskinen/smcosts.htm 13 http://www.flickr.com/photos/listener42/3665881441/ QCon Tokyo 2010
  14. 14. 7年毎に2倍 (原文)http://users.jyu.fi/~koskinen/smcosts.htm 14 QCon Tokyo 2010
  15. 15. 毎年11%↑ 15 QCon Tokyo 2010
  16. 16. 2010 5000億 http://www.flickr.com/photos/thelastminute/4371562997/ 16 QCon Tokyo 2010
  17. 17. 2017 1兆 http://www.flickr.com/photos/15928286@N07/2168229708/ 17 QCon Tokyo 2010
  18. 18. 大変
  19. 19. 規模の拡大から 来る複雑性を軽 減する仕組みが 必要
  20. 20. 構造化指向も オブジェクト指向も 複雑性を軽減させる仕組み http://www.flickr.com/photos/procsilas/39287750 9/
  21. 21. 見通しよく 整理する http://www.flickr.com/photos/cheltenham/410034118 8/
  22. 22. システムの中に いくつかの境界を作り、 分ける → モジュール化 22 QCon Tokyo 2010
  23. 23. モジュラリティとは、 モジュールを使って システムを構成すること 23 QCon Tokyo 2010
  24. 24. モジュール化のレイヤ システム SOA APP ??? マイクロ 24 OS QCon Tokyo 2010 カーネル
  25. 25. モジュール化の利点 (1) 情報隠蔽の促進 http://www.flickr.com/photos/8011986@N02/2681415971/
  26. 26. モジュール化の利点 (2) 依存関係の整理 http://www.flickr.com/photos/oddwick/1765661986/
  27. 27. モジュール化の利点 (3) 再利用を促進 http://www.flickr.com/photos/comedynose/4012525634/
  28. 28. 再利用の二つの軸 機能軸 ( 機能 : ライブラリ等 ) 時間軸 ( 使いつづける ) 28 QCon Tokyo 2010
  29. 29. モジュール化の利点のまとめ • 情報隠蔽の促進 • →実装を公開しないでもよい • 依存関係を定義 • →システムの動作に必須のものが分かる • 再利用を促進 • →実装量を削減と継続利用の促進 29 QCon Tokyo 2010
  30. 30. Java だったら・・・ http://www.flickr.com/photos/morberg/3146874095/
  31. 31. JAR で運用 http://www.flickr.com/photos/alexkerhead/3123914969/
  32. 32. Q.JARだけで モジュールシステムを構成 できないの? 32 QCon Tokyo 2010
  33. 33. A.JARだけでは モジュールシステムとし て運用するのは厳しい 33 QCon Tokyo 2010
  34. 34. Java のクラスロードモデル 依存 拡張 ブート クラスローダ クラスローダ JAR アプリケーションクラスローダ A B C G D E F 34 QCon Tokyo 2010
  35. 35. 中身を展開 http://www.flickr.com/photos/shareski/3481154470/
  36. 36. ごちゃ ごちゃ http://www.flickr.com/photos/joiseyshowaa/2402764792/
  37. 37. Visibility と Accessibility 参照性とアクセス可能性 参照 タイプ= interface+ 可能 class 参照可能とは、あるタイプが他のタイプを参照できるか? JARがVMに読み込まれた状態 37 QCon Tokyo 2010
  38. 38. Visibility と Accessibility 参照性とアクセス可能性 参照 利用 アクセス   タイプ= interface+ 可能 可能 可能 class アクセス可能とは、モジュールの公開範囲を指す。 38 QCon Tokyo 2010
  39. 39. アクセス可能範囲で整理 http://www.flickr.com/photos/joiseyshowaa/2402764792/
  40. 40. モジュール化の欠点 • 開発コスト – 意識しない時の3倍 • 独立性の担保 • 依存関係の整理 • 規模が小さい時は×     →例:設計したら1モジュール 使うべき場所を 見誤らないように 宮本武蔵・五輪書より 40 武器や流派にこだわるな QCon Tokyo 2010
  41. 41. 既存システムの モジュール化 http://www.flickr.com/photos/tanaka_juuyoh/429440983 1/
  42. 42. 難しい http://www.flickr.com/photos/tanaka_juuyoh/4294409831/
  43. 43. モジュール化は 早い時期から検討を http://www.flickr.com/photos/alaina_marie/4377282773 /
  44. 44. アジェンダ • モジュラリティの重要性 • Project Jigsaw と OSGi • モジュール設計の勘どころ 44 QCon Tokyo 2010
  45. 45. Project Jigsaw を一言で • 次世代Java標準の • モジュールシステム 45 QCon Tokyo 2010
  46. 46. OSGi を一言で言うと モジュールシステムの デファクトスタンダード 46 QCon Tokyo 2010
  47. 47. OSGi vs Project Jigsaw http://www.flickr.com/photos/laurelfan/46009085/
  48. 48. 協力 http://www.flickr.com/photos/aidan_jones/1234618279/
  49. 49. EclipseCon 2010 にて Project JigsawとOSGiの相互運用 →OSGiのモジュールがJigsawでも使える Oracleの Steve Harris氏とJeet Kaul 氏 49 QCon Tokyo 2010
  50. 50. Project Jigsaw 50 QCon Tokyo 2010
  51. 51. Project Jigsaw とは 問題:Javaプロセスの起動が遅い →起動時間・メモリフットプリントの改善したい • JDKクラスライブラリをモジュール化 • Java SEもモジュールで分割 – 起動時に必要なモジュール構成で • Java7の目玉の一つ! 51 QCon Tokyo 2010
  52. 52. Visibility と Accessibility 参照性とアクセス性 参照 利用 アクセス   タイプ= interface+ 可能 可能 可能 class アクセス可能とは、モジュールが公開しているか? 識別子public/protected/default/privateにmodule追加 publicとmoduleはmodule外への公開/非公開の区分 52 QCon Tokyo 2010
  53. 53. メタデータに必要なもの • 名前 • 依存関係 – 必要なもの – 公開範囲 • バージョン 53 QCon Tokyo 2010
  54. 54. Java 言語拡張 メタデータ module M1 @ 1.0 { • requires M2 @ 2.0, M3 @ 3.0; • provides M4 @ 4.0, M5 @ 5.0; • permits M6; • class com.foo.bar; • } module-info.java JSR294 54 QCon Tokyo 2010
  55. 55. 複雑に絡みあう JDK 55 http://www.flickr.com/photos/adc/411821495/ QCon Tokyo 2010
  56. 56. 大変
  57. 57. Pr oject Jigsaw 絶賛開発中 http://www.flickr.com/photos/tanaka_juuyoh/429440983 1/
  58. 58. OSGi 58 QCon Tokyo 2010
  59. 59. OSGi とは • Open Service Gateway initiativeの略 • 直訳「オープンなサービスゲートウェイの推進」 • OSGi Allianceで標準化 • Dynamic Module Systems for Java • Javaのための動的なモジュールシステム 59 QCon Tokyo 2010
  60. 60. 増える利用例 60 QCon Tokyo 2010
  61. 61. astah* の事例 • 既存機能のカスタマイズや拡張 • モジュールによるプラグインシステム 61 QCon Tokyo 2010
  62. 62. Linked in の事例 • 約2ヶ月かけて自社サービスをモジュール化 複数バージョンのモジュールを利用 62 http://www.springsource.com/files/uploads/datasheets/Linkedin-Case-Study.pdf QCon Tokyo 2010
  63. 63. OSGi の 3 大要素 モジュールシステム サービス連携 動的 ( Dynamic ) http://www.flickr.com/photos/yourdon/29217341 52/
  64. 64. OSGi の 3 大要素 モジュールシステム サービス連携 動的 (Dynamic) http://www.flickr.com/photos/yourdon/29217341 52/
  65. 65. OSGiを使って モジュールシステムを構築すると、 クラスローダの関係はこうなります。 65 QCon Tokyo 2010
  66. 66. OSGi のクラスロードモデル System G A B C JAR+メタデータ • Bundle(バンドル) D E F 66 QCon Tokyo 2010
  67. 67. クラスローダにより区分け http://www.flickr.com/photos/joiseyshowaa/240276479 2/
  68. 68. バージョンの異なる JAR への依存 • java -cp a.jar;b.jar;c.jar;a_v2.jar • (通常フラットなクラスパスの場合) app Ext Boot a b c a2 68 先に見つけた JAR で解決 QCon Tokyo 2010
  69. 69. バージョンの異なる Bundle への依存 • OSGi環境下の場合 System app Ext Boot a a2 b c 宣言された Bundle で解決 69 QCon Tokyo 2010
  70. 70. Bundle = JAR + メタデータ 70 QCon Tokyo 2010
  71. 71. JARとして 使える 71 http://www.flickr.com/photos/suewaters/2011571473/ QCon Tokyo 2010
  72. 72. 欠点 • 独自のクラスロード構造 – ContextClassLoaderを頼ったライブラリの 利用が困難 • 対処法: • →クラスローダの入れ替え System G • →ライブラリ側で順次対応 A B C • →OSGi実装での拡張 D E F 72 QCon Tokyo 2010
  73. 73. メタデータに必要なもの • 名前 • 依存関係 – 必要なもの – 公開範囲 • バージョン 73 QCon Tokyo 2010
  74. 74. OSGi のメタデータの書き方 META-INF/MANIFEST.MFに記述  シンボル名:Bundle-SymbolicName  バージョン:Bundle-Version  依存関係   必要なパッケージ:Import-Package   公開パッケージ:Export-Package • ローカルクラスパス:Bundle-ClassPath 74 QCon Tokyo 2010
  75. 75. Visibility と Accessibility 参照性とアクセス性 参照 利用 アクセス   タイプ= interface+ 可能 可能 可能 class アクセス可能とは、モジュールが公開しているか? MANIFEST.MFでアクセス可能範囲を宣言 75 QCon Tokyo 2010
  76. 76. OSGi の 3 大要素 モジュールシステム サービス連携 動的 (Dynamic) http://www.flickr.com/photos/yourdon/2921734152/
  77. 77. Declarative Service • Consumer(要求側)とProvider(供給側) • Consumerは、必要なIFを宣言 • Providerは供給できるIFと、実装を宣言 POJO  77 QCon Tokyo 2010
  78. 78. DI コンテナ→ OSGi コンテナ サービスはDIパターンが非常に有効 →テスト容易性の向上 インタフェースと実装を明確に分離 http://www.flickr.com/photos/danielspils/58586596/ 78 QCon Tokyo 2010
  79. 79. Whiteboard-model 79 QCon Tokyo 2010
  80. 80. Extender パターン • Declarative Seriviceには内部互換性 80 QCon Tokyo 2010
  81. 81. Declarative Service 実装 • Equinox DS • Felix DS • iPOJO • Google Guice peaberry • Blueprint Service系 – Eclipse Gemini(Spring DM) – Apache Aries 81 QCon Tokyo 2010
  82. 82. OSGi の 3 大要素 モジュールシステム サービス連携 動的 (Dynamic) http://www.flickr.com/photos/yourdon/2921734152/
  83. 83. Dynamic VM稼働中にBundleの構成を変更 →install,update,uninstall,start,stop,refresh 実行中のBundleの状態が見える http://www.flickr.com/photos/clearlyambiguous/165316414/ 83 QCon Tokyo 2010
  84. 84. OSGi の実装 http://www.flickr.com/photos/yourdon/29217341 52/
  85. 85. OSGi の実装 • オープンソースプロジェクトが4種類 スタンスが異なる 85 QCon Tokyo 2010
  86. 86. Equinox • よみ:いくいのっくす • 開発元:Eclipse Foundation • Eclipseの基盤 OSGi Core Spec R4.2 の参照実装 • 実践主義(仕様へフィードバック) • アプリケーションの基盤向け 86 QCon Tokyo 2010
  87. 87. Equinox の特徴 • Eclipse-BuddyPolicy – 境界を制御する宣言 – 例:スクリプト言語、log4j • Bundle-ActivationPolicy – Bundleが必要になるまでロードせず。 – →起動時間の改善 87 QCon Tokyo 2010
  88. 88. Eclipse-BuddyPolicy System Script Engine A B C JAR+メタデータ E • Bundle(バンドル) D F Model 88 QCon Tokyo 2010
  89. 89. Felix • よみ:ふぇりっくす • 開発元:Apache Foundation OSGi Service Spec R4を実装 • 仕様への互換性を重視 • 既存アプリケーションへの組み込みを視野 89 QCon Tokyo 2010
  90. 90. Felix の特徴 • 既存のアプリとFelix内のBundleで連携 90 QCon Tokyo 2010
  91. 91. knopflerfish • よみ:ノプラフィッシュ • 開発元:makewave • OSGi R3を実装済み R4を実装中 商用サポートあり 91 QCon Tokyo 2010
  92. 92. Concierge OSGi • よみ:コンシェルジュ • 開発元:Sourceforge.netのプロジェクト • OSGi R3を実装 • 組込向けに特化 – ファイルフットプリント等 92 QCon Tokyo 2010
  93. 93. Pax Runner • Equinox,Felix,knopflerfish,Conciergeの • 切り替えをサポート 93 QCon Tokyo 2010
  94. 94. OSGi の導入効果 http://www.flickr.com/photos/yourdon/2921734152/
  95. 95. OSGiはすべてのメンバーでのソリュー ション作成を強力に支援。 その力のいくらかはシステムエンジニ アリングを越えて拡大し、ソーシャルエ ンジニアリングに及んでいます。 Equinoxのリード開発者 Jeff McAffer氏の言葉 95 QCon Tokyo 2010
  96. 96. ソーシャルエンジニアリングとは チーム開発が変わっていく事 プラットフォームチーム アプリ開発チーム • 開発チーム毎にBundleを担当 • プロセスや実装を独自に改善 http://www.flickr.com/photos/jragon/299011871/ 96 QCon Tokyo 2010
  97. 97. ソーシャルエンジニアリングとは チーム開発が変わっていく事 プラットフォームチーム アプリ開発チーム • プラットフォームチームの提供IFで • アプリケーションを開発 http://www.flickr.com/photos/jragon/299011871/ 97 QCon Tokyo 2010
  98. 98. ソーシャルエンジニアリングとは チーム開発が変わっていく事 プラットフォームチーム アプリ開発チーム • アプリチームは提供IFを拡張して 開発を進める事もできる http://www.flickr.com/photos/jragon/299011871/ 98 QCon Tokyo 2010
  99. 99. ソーシャルエンジニアリングとは チーム開発が変わっていく事 プラットフォームチーム アプリ開発チーム • 提供IFの拡張はプラットフォームに フィードバック http://www.flickr.com/photos/jragon/299011871/ 99 QCon Tokyo 2010
  100. 100. インテグレーションの手違いを 撲滅 PFチーム アプリAチーム アプリBチーム インテグレーション環境 集めたバイナリの間違いを実行時に確認できる。 http://www.flickr.com/photos/jragon/299011871/ 100 QCon Tokyo 2010
  101. 101. Polyglot( 多言語 )OSGi System G A B C JVM上の言語も モジュール対応 JRuby Scala Groovy 進行中 101 QCon Tokyo 2010
  102. 102. Bundle のテスト http://www.flickr.com/photos/yourdon/29217341 52/
  103. 103. 単体テストと統合テスト System G A B C JAR+メタデータ • Bundle(バンドル) D E F 103 QCon Tokyo 2010
  104. 104. Mock Service の注入 Mock Serviceをコンテナに注入 動作の大まかな確認 Mockito (http://mockito.org/) http://www.flickr.com/photos/takuma104/43113749 104 34/ QCon Tokyo 2010
  105. 105. Pax Exam • 統合テスト用のツール • Bundleの構成やOSGiコンテナの変更 105 QCon Tokyo 2010
  106. 106. アジェンダ • モジュラリティの重要性 • Project Jigsaw と OSGi • モジュール設計の勘どころ 106 QCon Tokyo 2010
  107. 107. 良い垣根は良い隣人を育む by Jef f McAf fer http://www.flickr.com/photos/tambako/3451214734/
  108. 108. 依存関係を小さく http://www.flickr.com/photos/tambako/3451214734/
  109. 109. まとめ: 複雑なシステム →小さく・独 立・組み合わせ 110 QCon Tokyo 2010
  110. 110. 参考文献 111 QCon Tokyo 2010
  111. 111. 何か質問は ございますか? 112 QCon Tokyo 2010
  112. 112. 質問は Kompiro@ gmail.com 113 まで QCon Tokyo 2010

×