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

113
QCon Tokyo 2010 1 近藤寛喜 株式会社チェンジビジョン 開発部 Java Java における における モジュラリティ元年 モジュラリティ元年

Upload: hiroki-kondo

Post on 28-May-2015

3.175 views

Category:

Technology


1 download

DESCRIPTION

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

TRANSCRIPT

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

QCon Tokyo 2010 1

近藤寛喜株式会社チェンジビジョン開発部

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

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

QCon Tokyo 2010 2

謝辞謝辞

• 参加を認めてくれた平鍋さん始め参加を認めてくれた平鍋さん始め• Change VisionChange Visionのみんなのみんな• 講演させてくださった講演させてくださったInfoQ JapanInfoQ Japanの皆様の皆様• 事前にレビューしてくださった事前にレビューしてくださった• 原田さん、安井さん、河村さん、原田さん、安井さん、河村さん、• 雄介さん、北條さん雄介さん、北條さん• ありがとうございました!ありがとうございました!

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

自己紹介

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

QCon Tokyo 2010 4

アジェンダアジェンダ

• モジュラリティの重要性モジュラリティの重要性• Project Jigsaw Project Jigsaw と と OSGiOSGi• モジュール設計の勘どころモジュール設計の勘どころ

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

QCon Tokyo 2010 5

アジェンダアジェンダ

• モジュラリティの重要性モジュラリティの重要性• Project Jigsaw Project Jigsaw と と OSGiOSGi• モジュール設計の勘どころモジュール設計の勘どころ

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

QCon Tokyo 2010 6

InfoQInfoQでも記事多数でも記事多数 !!!!

• Neil BartlettNeil Bartlett氏氏– Introduction of OSGiIntroduction of OSGi– Neil Bartlett on OSGi(Neil Bartlett on OSGi(インタビューインタビュー))

• Alex BletwittAlex Bletwitt氏氏– Modular JavaModular Javaシリーズシリーズ– Bundle.updateBundle.updateシリーズシリーズ

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

QCon Tokyo 2010 7

日本では・・・日本では・・・

未だ未だ情報少ない情報少ない

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

QCon Tokyo 2010 8

なぜモジュール化がなぜモジュール化が重要になってきたか?重要になってきたか?

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

ソフトウェアはソフトウェアは複雑複雑

http://www.flickr.com/photos/15928286@N07/2168229708/

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

http://www.flickr.com/photos/cytech/4386280055/

QQ:自動車の場合?:自動車の場合?

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

A:1A:1億億LOCLOC

http://www.flickr.com/photos/cytech/4386280055/

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

QCon Tokyo 2010 12

19901990

12001200億億((原文原文))http://users.jyu.fi/~koskinen/smcosts.htmhttp://users.jyu.fi/~koskinen/smcosts.htm

http://www.flickr.com/photos/royalport/416330036/

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

QCon Tokyo 2010 13

20002000

25002500億億((原文原文))http://users.jyu.fi/~koskinen/smcosts.htmhttp://users.jyu.fi/~koskinen/smcosts.htm

http://www.flickr.com/photos/listener42/3665881441/

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

QCon Tokyo 2010 14

7年毎に2倍((原文原文))http://users.jyu.fi/~koskinen/smcosts.htmhttp://users.jyu.fi/~koskinen/smcosts.htm

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

QCon Tokyo 2010 15

毎年11%↑

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

QCon Tokyo 2010 16

20102010

50005000億億

http://www.flickr.com/photos/thelastminute/4371562997/

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

QCon Tokyo 2010 17

20172017

11兆兆

http://www.flickr.com/photos/15928286@N07/2168229708/

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

大変大変

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

規模の拡大から来る複雑性を軽減する仕組みが必要

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

構造化指向も構造化指向もオブジェクト指向もオブジェクト指向も

複雑性を軽減させる仕組み複雑性を軽減させる仕組み

http://www.flickr.com/photos/procsilas/392877509/

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

見通しよく見通しよく整理する整理する

http://www.flickr.com/photos/cheltenham/4100341188/

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

QCon Tokyo 2010 22

システムの中にシステムの中にいくつかの境界を作り、いくつかの境界を作り、

分ける分ける→→モジュール化モジュール化

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

QCon Tokyo 2010 23

モジュラリティとは、モジュラリティとは、モジュールを使ってモジュールを使って

システムを構成することシステムを構成すること

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

QCon Tokyo 2010 24

モジュール化のレイヤモジュール化のレイヤ

OS

システム

APP

SOA

マイクロカーネル

???

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

モジュール化の利点モジュール化の利点 (1)(1)情報隠蔽の促進情報隠蔽の促進

http://www.flickr.com/photos/8011986@N02/2681415971/

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

モジュール化の利点モジュール化の利点 (2)(2)依存関係の整理依存関係の整理

http://www.flickr.com/photos/oddwick/1765661986/

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

モジュール化の利点モジュール化の利点 (3)(3)再利用を促進再利用を促進

http://www.flickr.com/photos/comedynose/4012525634/

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

QCon Tokyo 2010 28

再利用の二つの軸再利用の二つの軸

時間軸時間軸((使いつづける使いつづける ))

機能軸機能軸((機能機能 ::ライブラリ等ライブラリ等 ))

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

QCon Tokyo 2010 29

モジュール化の利点のまとめモジュール化の利点のまとめ

• 情報隠蔽の促進情報隠蔽の促進• →→実装を公開しないでもよい実装を公開しないでもよい• 依存関係を定義依存関係を定義• →→システムの動作に必須のものが分かるシステムの動作に必須のものが分かる• 再利用を促進再利用を促進• →→実装量を削減と継続利用の促進実装量を削減と継続利用の促進

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

JavaJavaだったら・・・だったら・・・http://www.flickr.com/photos/morberg/3146874095/

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

JARJARで運用で運用http://www.flickr.com/photos/alexkerhead/3123914969/

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

QCon Tokyo 2010 32

Q.Q.JARJARだけでだけでモジュールシステムを構成モジュールシステムを構成

できないの?できないの?

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

QCon Tokyo 2010 33

A.A.JARJARだけでだけでははモジュールシステムとしモジュールシステムとして運用するのは厳しいて運用するのは厳しい

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

QCon Tokyo 2010 34

JavaJavaのクラスロードモデルのクラスロードモデルブート

クラスローダ

A B C

D E F

G

拡張クラスローダ

アプリケーションクラスローダ

JAR

依存

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

中身を展開中身を展開http://www.flickr.com/photos/shareski/3481154470/

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

ごちゃごちゃ ごちゃ ごちゃ

http://www.flickr.com/photos/joiseyshowaa/2402764792/

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

QCon Tokyo 2010 37

VisibilityVisibilityととAccessibilityAccessibility参照性とアクセス可能性参照性とアクセス可能性

参照可能

参照可能とは、あるタイプが他のタイプを参照できるか?JARがVMに読み込まれた状態

タイプ=interface+class

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

QCon Tokyo 2010 38

VisibilityVisibilityととAccessibilityAccessibility参照性とアクセス可能性参照性とアクセス可能性

 利用可能

参照可能

アクセス可能とは、モジュールの公開範囲を指す。

タイプ=interface+class

アクセス可能

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

アクセス可能範囲で整理アクセス可能範囲で整理http://www.flickr.com/photos/joiseyshowaa/2402764792/

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

QCon Tokyo 2010 40

モジュール化の欠点モジュール化の欠点

• 開発コスト開発コスト– 意識しない時の意識しない時の33倍倍

• 独立性の担保独立性の担保• 依存関係の整理依存関係の整理

• 規模が小さい時は規模が小さい時は××    →例    →例::設計したら設計したら11モジュールモジュール

宮本武蔵・五輪書より武器や流派にこだわるな

使うべき場所を見誤らないように

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

既存システムの既存システムのモジュール化モジュール化

http://www.flickr.com/photos/tanaka_juuyoh/4294409831/

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

難しい難しいhttp://www.flickr.com/photos/tanaka_juuyoh/4294409831/

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

モジュール化はモジュール化は早い時期から検討を早い時期から検討を

http://www.flickr.com/photos/alaina_marie/4377282773/

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

QCon Tokyo 2010 44

アジェンダアジェンダ

• モジュラリティの重要性モジュラリティの重要性• Project Jigsaw Project Jigsaw と と OSGiOSGi• モジュール設計の勘どころモジュール設計の勘どころ

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

QCon Tokyo 2010 45

Project JigsawProject Jigsawを一言でを一言で

• 次世代次世代JavaJava標準の標準の• モジュールシステムモジュールシステム

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

QCon Tokyo 2010 46

OSGiOSGiを一言で言うとを一言で言うと

モジュールシステムのモジュールシステムのデファクトスタンダードデファクトスタンダード

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

OSGi vsOSGi vsProject JigsawProject Jigsaw

http://www.flickr.com/photos/laurelfan/46009085/

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

協力協力http://www.flickr.com/photos/aidan_jones/1234618279/

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

QCon Tokyo 2010 49

EclipseCon 2010EclipseCon 2010にてにて

Project JigsawProject JigsawととOSGiOSGiの相互運用の相互運用→→OSGiOSGiのモジュールがのモジュールがJigsawJigsawでも使えるでも使えるOracleOracleの の Steve HarrisSteve Harris氏と氏とJeet Kaul Jeet Kaul 氏氏

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

QCon Tokyo 2010 50

Project JigsawProject Jigsaw

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

QCon Tokyo 2010 51

Project JigsawProject Jigsawとはとは

問題問題:Java:Javaプロセスの起動が遅いプロセスの起動が遅い→→起動時間・メモリフットプリントの改善したい起動時間・メモリフットプリントの改善したい

• JDKJDKクラスライブラリをモジュール化クラスライブラリをモジュール化• Java SEJava SEもモジュールで分割もモジュールで分割

– 起動時に必要なモジュール構成で起動時に必要なモジュール構成で

• Java7Java7の目玉の一つ!の目玉の一つ!

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

QCon Tokyo 2010 52

VisibilityVisibilityととAccessibilityAccessibility参照性とアクセス性参照性とアクセス性

 利用可能

参照可能

アクセス可能とは、モジュールが公開しているか?識別子public/protected/default/privateにmodule追加publicとmoduleはmodule外への公開/非公開の区分

タイプ=interface+class

アクセス可能

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

QCon Tokyo 2010 53

メタデータに必要なものメタデータに必要なもの

• 名前名前• 依存関係依存関係

– 必要なもの必要なもの– 公開範囲公開範囲

• バージョンバージョン

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

QCon Tokyo 2010 54

JavaJava言語拡張言語拡張メタデータメタデータ

modulemodule M1 @ 1.0 { M1 @ 1.0 {• requires M2 @ 2.0, M3 @ 3.0;requires M2 @ 2.0, M3 @ 3.0;• provides M4 @ 4.0, M5 @ 5.0;provides M4 @ 4.0, M5 @ 5.0;• permits M6;permits M6;• class com.foo.bar;class com.foo.bar;• }}

module-info.java JSR294module-info.java JSR294

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

QCon Tokyo 2010 55

複雑に絡みあう複雑に絡みあうJDKJDK

http://www.flickr.com/photos/adc/411821495/

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

大変大変

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

Project JigsawProject Jigsaw絶賛開発中絶賛開発中

http://www.flickr.com/photos/tanaka_juuyoh/4294409831/

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

QCon Tokyo 2010 58

OSGiOSGi

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

QCon Tokyo 2010 59

OSGiOSGiとはとは

• Open Service Gateway initiativeOpen Service Gateway initiativeの略の略• 直訳「オープンなサービスゲートウェイの推進」直訳「オープンなサービスゲートウェイの推進」

• OSGi AllianceOSGi Allianceで標準化で標準化

• Dynamic Dynamic Module SystemsModule Systems for Java for Java

• JavaJavaのための動的なのための動的なモジュールシステムモジュールシステム

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

QCon Tokyo 2010 60

増える利用例増える利用例

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

QCon Tokyo 2010 61

astah*astah*の事例の事例

• 既存機能のカスタマイズや拡張既存機能のカスタマイズや拡張• モジュールによるプラグインシステムモジュールによるプラグインシステム

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

QCon Tokyo 2010 62

Linked inLinked inの事例の事例

• 約約22ヶ月かけて自社サービスをモジュール化ヶ月かけて自社サービスをモジュール化複数バージョンのモジュールを利用複数バージョンのモジュールを利用

http://www.springsource.com/files/uploads/datasheets/Linkedin-Case-Study.pdfhttp://www.springsource.com/files/uploads/datasheets/Linkedin-Case-Study.pdf

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

OSGiOSGiのの33大要素大要素モジュールシステムモジュールシステムサービス連携サービス連携動的動的 ((DynamicDynamic))

http://www.flickr.com/photos/yourdon/2921734152/

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

OSGiOSGiのの33大要素大要素モジュールシステムモジュールシステムサービス連携サービス連携動的動的 (Dynamic)(Dynamic)

http://www.flickr.com/photos/yourdon/2921734152/

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

QCon Tokyo 2010 65

OSGiOSGiを使ってを使って

モジュールシステムを構築すると、モジュールシステムを構築すると、

クラスローダの関係はこうなります。クラスローダの関係はこうなります。

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

QCon Tokyo 2010 66

OSGiOSGiのクラスロードモデルのクラスロードモデル

System

A B C

D E FJAR+メタデータ• Bundle(バンドル)

G

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

クラスローダにより区分けクラスローダにより区分けhttp://www.flickr.com/photos/joiseyshowaa/2402764792/

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

QCon Tokyo 2010 68

バージョンの異なるバージョンの異なるJARJARへの依存への依存• java -cp a.jar;b.jar;c.jar;a_v2.jarjava -cp a.jar;b.jar;c.jar;a_v2.jar• ((通常フラットなクラスパスの場合通常フラットなクラスパスの場合))

先に見つけた先に見つけたJARJARで解決で解決

app

a

Ext Boot

b c a2

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

QCon Tokyo 2010 69

バージョンの異なるバージョンの異なるBundleBundleへの依存への依存• OSGiOSGi環境下の場合環境下の場合

宣言された宣言されたBundleBundleで解決で解決

app

a

Ext Boot

b c

a2

System

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

QCon Tokyo 2010 70

Bundle = Bundle = JARJAR + + メタデータメタデータ

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

QCon Tokyo 2010 71

JARJARとしてとして使える使える

http://www.flickr.com/photos/suewaters/2011571473/

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

QCon Tokyo 2010 72

欠点欠点

• 独自のクラスロード構造独自のクラスロード構造– ContextClassLoaderContextClassLoaderを頼ったライブラリのを頼ったライブラリの

利用が困難利用が困難

• 対処法対処法::• →→クラスローダの入れ替えクラスローダの入れ替え• →→ライブラリ側で順次対応ライブラリ側で順次対応• →→OSGiOSGi実装での拡張実装での拡張

System

A B C

D E F

G

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

QCon Tokyo 2010 73

メタデータに必要なものメタデータに必要なもの

• 名前名前• 依存関係依存関係

– 必要なもの必要なもの– 公開範囲公開範囲

• バージョンバージョン

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

QCon Tokyo 2010 74

OSGiOSGiのメタデータの書き方のメタデータの書き方

META-INF/MANIFEST.MFMETA-INF/MANIFEST.MFに記述に記述 シンボル名 シンボル名:Bundle-SymbolicName:Bundle-SymbolicName

 バージョン バージョン:Bundle-Version:Bundle-Version

 依存関係 依存関係

  必要なパッケージ  必要なパッケージ:Import-Package:Import-Package

  公開パッケージ  公開パッケージ:Export-Package:Export-Package• ローカルクラスパスローカルクラスパス:Bundle-ClassPath:Bundle-ClassPath

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

QCon Tokyo 2010 75

VisibilityVisibilityととAccessibilityAccessibility参照性とアクセス性参照性とアクセス性

 利用可能

参照可能

アクセス可能とは、モジュールが公開しているか?

MANIFEST.MFでアクセス可能範囲を宣言

タイプ=interface+class

アクセス可能

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

OSGiOSGiのの33大要素大要素モジュールシステムモジュールシステムサービス連携サービス連携動的動的 (Dynamic)(Dynamic)

http://www.flickr.com/photos/yourdon/2921734152/

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

QCon Tokyo 2010 77

Declarative ServiceDeclarative Service

• Consumer(Consumer(要求側要求側))ととProvider(Provider(供給側供給側))• ConsumerConsumerは、必要なは、必要なIFIFを宣言を宣言• ProviderProviderは供給できるは供給できるIFIFと、実装を宣言と、実装を宣言

POJOPOJO  

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

QCon Tokyo 2010 78

DIDIコンテナ→コンテナ→OSGiOSGiコンテナコンテナ

サービスはサービスはDIDIパターンが非常に有効パターンが非常に有効

→→テスト容易性の向上テスト容易性の向上

インタフェースと実装を明確に分離インタフェースと実装を明確に分離

http://www.flickr.com/photos/danielspils/58586596/

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

QCon Tokyo 2010 79

Whiteboard-modelWhiteboard-model

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

QCon Tokyo 2010 80

ExtenderExtenderパターンパターン

• Declarative SeriviceDeclarative Seriviceには内部互換性には内部互換性

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

QCon Tokyo 2010 81

Declarative ServiceDeclarative Service実装実装• Equinox DSEquinox DS• Felix DSFelix DS• iPOJOiPOJO• Google Guice Google Guice peaberrypeaberry• Blueprint ServiceBlueprint Service系系

– Eclipse Gemini(Spring DM)Eclipse Gemini(Spring DM)– Apache AriesApache Aries

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

OSGiOSGiのの33大要素大要素モジュールシステムモジュールシステムサービス連携サービス連携動的動的 (Dynamic)(Dynamic)

http://www.flickr.com/photos/yourdon/2921734152/

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

QCon Tokyo 2010 83

DynamicDynamic

VMVM稼働中に稼働中にBundleBundleの構成を変更の構成を変更→→install,update,uninstall,start,stop,refreshinstall,update,uninstall,start,stop,refresh

実行中の実行中のBundleBundleの状態が見えるの状態が見える

http://www.flickr.com/photos/clearlyambiguous/165316414/

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

OSGiOSGiの実装の実装http://www.flickr.com/photos/yourdon/2921734152/

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

QCon Tokyo 2010 85

OSGiOSGiの実装の実装

• オープンソースプロジェクトがオープンソースプロジェクトが44種類種類

スタンスが異なる

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

QCon Tokyo 2010 86

EquinoxEquinox

• よみ:いくいのっくすよみ:いくいのっくす• 開発元開発元:Eclipse Foundation:Eclipse Foundation• EclipseEclipseの基盤の基盤OSGi Core Spec R4.2 OSGi Core Spec R4.2 の参照実装の参照実装

• 実践主義実践主義((仕様へフィードバック仕様へフィードバック))• アプリケーションの基盤向けアプリケーションの基盤向け

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

QCon Tokyo 2010 87

EquinoxEquinoxの特徴の特徴

• Eclipse-BuddyPolicyEclipse-BuddyPolicy– 境界を制御する宣言境界を制御する宣言– 例例::スクリプト言語、スクリプト言語、log4jlog4j

• Bundle-ActivationPolicyBundle-ActivationPolicy– BundleBundleが必要になるまでロードせず。が必要になるまでロードせず。– →→起動時間の改善起動時間の改善

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

QCon Tokyo 2010 88

Eclipse-BuddyPolicyEclipse-BuddyPolicy

System

A B C

DE

ModelF

JAR+メタデータ• Bundle(バンドル)

ScriptEngine

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

QCon Tokyo 2010 89

FelixFelix

• よみ:ふぇりっくすよみ:ふぇりっくす• 開発元開発元:Apache Foundation:Apache Foundation

OSGi Service Spec R4OSGi Service Spec R4を実装を実装

• 仕様への互換性を重視仕様への互換性を重視• 既存アプリケーションへの組み込みを視野既存アプリケーションへの組み込みを視野

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

QCon Tokyo 2010 90

FelixFelixの特徴の特徴

• 既存のアプリと既存のアプリとFelixFelix内の内のBundleBundleで連携で連携

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

QCon Tokyo 2010 91

knopflerfishknopflerfish

• よみよみ::ノプラフィッシュノプラフィッシュ• 開発元開発元:makewave:makewave• OSGi R3OSGi R3を実装済み を実装済み R4R4を実装中を実装中

商用サポートあり商用サポートあり

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

QCon Tokyo 2010 92

Concierge OSGiConcierge OSGi

• よみ:コンシェルジュよみ:コンシェルジュ• 開発元開発元:Sourceforge.net:Sourceforge.netのプロジェクトのプロジェクト• OSGi R3OSGi R3を実装を実装

• 組込向けに特化組込向けに特化– ファイルフットプリント等ファイルフットプリント等

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

QCon Tokyo 2010 93

Pax Runner Pax Runner

• Equinox,Felix,knopflerfish,ConciergeEquinox,Felix,knopflerfish,Conciergeのの• 切り替えをサポート切り替えをサポート

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

OSGiOSGiの導入効果の導入効果http://www.flickr.com/photos/yourdon/2921734152/

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

QCon Tokyo 2010 95

OSGiはすべてのメンバーでのソリューション作成を強力に支援。

その力のいくらかはシステムエンジニアリングを越えて拡大し、ソーシャルエ

ンジニアリングに及んでいます。

Equinoxのリード開発者Jeff McAffer氏の言葉

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

QCon Tokyo 2010 96

ソーシャルエンジニアリングとはソーシャルエンジニアリングとはチーム開発が変わっていく事チーム開発が変わっていく事

• 開発チーム毎に開発チーム毎にBundleBundleを担当を担当• プロセスや実装を独自に改善プロセスや実装を独自に改善

http://www.flickr.com/photos/jragon/299011871/

プラットフォームチーム アプリ開発チーム

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

QCon Tokyo 2010 97

ソーシャルエンジニアリングとはソーシャルエンジニアリングとはチーム開発が変わっていく事チーム開発が変わっていく事

• プラットフォームチームの提供プラットフォームチームの提供IFIFでで• アプリケーションを開発アプリケーションを開発

http://www.flickr.com/photos/jragon/299011871/

プラットフォームチーム アプリ開発チーム

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

QCon Tokyo 2010 98

ソーシャルエンジニアリングとはソーシャルエンジニアリングとはチーム開発が変わっていく事チーム開発が変わっていく事

• アプリチームは提供アプリチームは提供IFIFを拡張してを拡張して開発を進める事もできる開発を進める事もできる

http://www.flickr.com/photos/jragon/299011871/

プラットフォームチーム アプリ開発チーム

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

QCon Tokyo 2010 99

ソーシャルエンジニアリングとはソーシャルエンジニアリングとはチーム開発が変わっていく事チーム開発が変わっていく事

• 提供提供IFIFの拡張はプラットフォームにの拡張はプラットフォームにフィードバックフィードバック

http://www.flickr.com/photos/jragon/299011871/

プラットフォームチーム アプリ開発チーム

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

QCon Tokyo 2010 100

インテグレーションの手違いをインテグレーションの手違いを撲滅撲滅

http://www.flickr.com/photos/jragon/299011871/

アプリAチームPFチーム アプリBチーム

インテグレーション環境

集めたバイナリの間違いを実行時に確認できる。

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

QCon Tokyo 2010 101

Polyglot(Polyglot(多言語多言語 )OSGi)OSGi

System

A B C

JRuby Scala Groovy

G

JVM上の言語もモジュール対応進行中

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

BundleBundleのテストのテストhttp://www.flickr.com/photos/yourdon/2921734152/

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

QCon Tokyo 2010 103

単体テストと統合テスト単体テストと統合テスト

System

A B C

D E FJAR+メタデータ• Bundle(バンドル)

G

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

QCon Tokyo 2010 104

Mock ServiceMock Serviceをコンテナに注入をコンテナに注入

動作の大まかな確認動作の大まかな確認Mockito (http://mockito.org/)Mockito (http://mockito.org/)

Mock ServiceMock Serviceの注入の注入

http://www.flickr.com/photos/takuma104/4311374934/

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

QCon Tokyo 2010 105

Pax Exam Pax Exam

• 統合テスト用のツール統合テスト用のツール• BundleBundleの構成やの構成やOSGiOSGiコンテナの変更コンテナの変更

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

QCon Tokyo 2010 106

アジェンダアジェンダ

• モジュラリティの重要性モジュラリティの重要性• Project Jigsaw Project Jigsaw と と OSGiOSGi• モジュール設計の勘どころモジュール設計の勘どころ

Page 107: Javaにおけるモジュラリティ元年
Page 108: Javaにおけるモジュラリティ元年

良い垣根は良い隣人を育む良い垣根は良い隣人を育むby Jeff McAfferby Jeff McAffer

http://www.flickr.com/photos/tambako/3451214734/

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

依存関係を小さく依存関係を小さく

http://www.flickr.com/photos/tambako/3451214734/

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

QCon Tokyo 2010 110

まとめ:複雑なシステム→小さく・独立・組み合わせ

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

QCon Tokyo 2010 111

参考文献参考文献

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

QCon Tokyo 2010 112

何か質問は何か質問はございますか?ございますか?

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

QCon Tokyo 2010 113

質問は質問はKompiro@[email protected]

までまで