+ astah*プラグイン開発勉強会 2013/5/29 朱峰 錦司 @kjstylepp + お品書き 2 astah*とは astah*プラグインとは astah*プラグインを作ろう astah*プラグイン開発勉強会 2013/5/29 + 3 astah*とは astah*プラグイン開発勉強会 2013/5/29 + astah* 4 株式会社チェンジビジョンが提供するツール のブランド名 以前は「JUDE」という名前だった 昔、JUDEは当社でもけっこう使って気がするけど、最近 はよくわからない… 社長は平鍋健児さん(@hiranabe) アジャイルとかリーンスタートアップ界隈で有名人 株式会社永和システムマネジメントの副社長もしてたり 「astah」というキーワードでツイートするとたまに反応 してくれる コンセプト:「最も身近なソフトウェア開発 設計支援ツール」 astah*プラグイン開発勉強会 2013/5/29 + astah*でできること 5 お絵かき ソフトウェア設計 各種UML ER図 データフロー図 フローチャート CRUD図…etc 思考の整理 マインドマップ 共有 Web経由での成果物参照 Web経由でのコメンの追加 ※エディションによってできることに差がある astah*プラグイン開発勉強会 2013/5/29 + エディションによる違い 6 ダイアグラム描画については… astah* community astah* UML ✓ ✓ Eriksson-Penkerのプロセス図 参照 ✓ ✓ マインドマップ しかも商用利用可! 参照 ✓ ✓ ER図 参照 参照 ✓ フローチャート 参照 参照 ✓ CRUD 参照 参照 ✓ データフロー図(DFD) 参照 参照 ✓ 要求テーブル 参照 参照 ✓ 要求図 参照 参照 ✓ 機能 UML2.x クラス図、ユースケース図、シーケンス 図、アクティビティ図、コミュニケー ション図、ステートマシン図、コンポー 慣れるまではとりあえ ネント図、配置図、合成構造図、オブ ジェクト図、パッケージ図 ずUML書ければOK astah*プラグイン開発勉強会 astah* professional 本格的に開発で使うなら ✓ やっぱりprofessionalが 欲しいですね ※http://astah.change-vision.com/ja/feature/comparison-table.htmlから引 用 2013/5/29 + 7 astah*プラグイン とは astah*プラグイン開発勉強会 2013/5/29 + astah*プラグイン 8 astah*が提供する拡張ポイントを経由して、 お好みの機能を追加できる 2011年10月のVer6.5でβ(?)初登場 それまでもastah* Labsにはひっそりとあった 2012年3月のVer6.6で正式対応 それなりの数のプラグインがすでに公開中 公式のプラグイン紹介 http://www.slideshare.net/ChangeVision/astah-plugins Github上には2013年5月時点で40弱のリポジトリ https://github.com/search?q=astah astah*プラグイン開発勉強会 2013/5/29 + どんなプラグインがあるか(1) 9 この手のツールのプラグインは主に以下の3 ジャンルに分類可能(と思う…) インポート系 外部ファイルをastah*で扱えるモデルに変換 FreeMindのインポート 各種プログラミング言語のリバース 加工系 astah*で扱えるモデルをこねくりまわす。なんでもあり。 エクスポート系 astah*で扱えるモデルを外部ファイルに変換 yUML形式にエクスポート MSOffice描画オブジェクトにエクスポート astah*プラグイン開発勉強会 2013/5/29 + どんなプラグインがあるか(2) 10 DBリバースプラグイン ERモデルの生成 DBサーバに接続し、スキーマ情報からモデルをリバース キー/リレーションなどの情報もばっちり 生成したモデルの自動レイアウトなども可能 http://astah.change-vision.com/ja/feature/db-reverse-plugin.html astah*プラグイン開発勉強会 2013/5/29 + どんなプラグインがあるか(3) 11 品質スイートプラグイン ステートチャートの活用 マトリクスに変換し、振る舞いの網羅性のレビュー 遷移パスを抽出し、テストケースとして活用 似たようなことをやっている人がいたような…(ry クラス図/シーケンス図の活用 クラス間依存関係を可視化し、結合度合いのレビュー クラス図とシーケンス図の整合性のレビュー http://astah.change-vision.com/ja/feature/quality-plugin.html astah*プラグイン開発勉強会 2013/5/29 + どんなプラグインがあるか(4) 12 Office連携プラグイン 日本人歓喜!!! 何かの勉強会で平鍋さん談 astah*とOfficeのダイレクト連携 Officeのオブジェクト挿入メニューからastah*で編集中の モデルを描画オブジェクトとしてインポート可能 画像として保存->Officeに貼り付け、をショートカット http://astah.change-vision.com/ja/feature/office-plugin.html astah*プラグイン開発勉強会 2013/5/29 + astah* API astah*にはastah* Thread-safeではない(はず) 公式利用ガイド/JavaDocあり APIが存在 astah*のモデルを扱うJavaインターフェース群 13 http://members.change-vision.com/javadoc/astah-api/6_7_043495/api/ja/doc http://members.change-vision.com/javadoc/astah-api/6_7_043495/api/ja/doc/javadoc/ APIが提供する機能 モデルの参照/作成/編集/削除 図の参照/作成/編集/削除 XML入出力 ※エディションによってできることが異なる astah*プラグイン開発勉強会 2013/5/29 + エディションによる違い 14 モデルの操作については… ※astah* UML, professionalのみ。△はastah* professionalのみ。 モデルの参照 モデルの作成※ モデルの編集※ モデルの削除※ クラス図 ○ ○ ○ ○ ユースケース図 ○ ○ ○ ○ ステートマシン図 ○ ○ ○ ○ アクティビティ図 ○ × プラグインを作るなら × × シーケンス図 ○ ○ ○ ○ professionalじゃないと コミュニケーション図 ○ × × × 楽しくない… コンポーネント図 × × × × 配置図 × × × × 合成構造図 ○ ○ ○ ○ フローチャート ○ × × × データフロー図(DFD) ○ × × × ER図 ○ △ △ △ CRUD × × × × マインドマップ × × × × 要求テーブル × × × × 要求図 ○ △ △ △ トレーサビリティマップ × × × × ※http://members.change-vision.com/javadoc/astah-api/6_7_0-43495/api/ja/doc/index.htmlから引 用 astah*プラグイン開発勉強会 2013/5/29 + プラグインの動作する仕組み ggrks プラグインはOSGi 15 (ごめんなさい、私も詳しくないです…) Runtime上で動作 Eclipseでおなじみのプラグイン機構 OSGi Bundle形式のプラグインjarをpluginsフォ ルダに配置すればOK Plugin B Plugin A OSGi Runtime UI拡張ポイント astah* API astah*ツール astah*プラグイン開発勉強会 2013/5/29 + 16 astah*プラグイン を作ろう astah*プラグイン開発勉強会 2013/5/29 + ハンズオンの内容 17 公式のチュートリアル http://astah.change-vision.com/ja/plugin-tutorial/index.html 元ネタというかほぼそのまま 本日の講師の環境 astah* community6.7 JDK7 まぁ6でも問題ないとは思いますが Eclipse3.8.2 JDT コマンド叩いたりとかはコマンドプロンプトでやるのでm2eは使い ません 拡張ポイントやAPIを1回使ってみるのが目的 詳細な使用などは説明しません 興味のある人はチュートリアルやその他資料を参照のこと astah*プラグイン開発勉強会 2013/5/29 + astah* Plug-in SDK 18 mavenベースのプラグイン開発支援ツール プロジェクト作成、ビルド、astah*ツール起動などのコマ ンド群を提供 2013年5月現在、Ver1.1が最新 利用方法 好きな場所に配置する コマンド群の入ったbinフォルダにパスを通す プラグインの動作確認対象のastah*ツールの場所を設定 ファイルに記述 デフォルト設定でastah*ツールをインストールしている場合は必要 なし Macだと「astah community」などのような半角スペースを扱えな いバグがあるっぽい 「astah_community」のように変更したらうまく動く 家で勉強してるときにいきなりハマって心が折れかけた… astah*プラグイン開発勉強会 2013/5/29 + (参考)mavenのproxy突破 19 settings.xmlの作成 setting.xmlではないので注意 {%HOME}/.m2/settings.xml <settings> <proxies> <proxy> <active>true</active> <protocol>http</protocol> <host>{proxyのアドレス}</host> <port>8080</port> <username>{アカウント名}</username> <password>{パスワード}</password> </proxy> </proxies> </settings> astah*プラグイン開発勉強会 2013/5/29 + (参考)astah*ツールのインストール場所の指定 20 settings.xmlの編集 {%ASDK_HOME}/conf/settings.xml <profile> <id>astah-community-windows-x86</id> <activation> <activeByDefault>false</activeByDefault> <file> <exists>C:/Applications/astah_community/astah-community.jar</exists> </file> </activation> <properties> <astahPath>C:/Applications/astah_community/</astahPath> <astahEdition>community</astahEdition> </properties> … 私はzip版をここに </profile> インストールしています astah*プラグイン開発勉強会 2013/5/29 + SDKの動作確認 21 パスが通っているかどうか >asdk astah* Plug-in SDK version: 1.1 astah*ツールが起動するかどうか >astah-launch [INFO] Scanning for projects... [INFO] [INFO] -----------------------------------------------------------------------[INFO] Building Maven Stub Project (No POM) 1 [INFO] -----------------------------------------------------------------------[INFO] [INFO] --- astah-maven-plugin:1.0.0:launch (default-cli) @ standalone-pom --[INFO] Launching astah*... astah*プラグイン開発勉強会 2013/5/29 + テンプレートプラグイン(1) 22 プラグイン開発プロジェクトの作成 プロジェクトを配置したいフォルダに移動 >astah-generate-project [INFO] Scanning for projects... … (初回はすごく長い) … Define value for property 'groupId': : com.example Define value for property 'artifactId': : SampleOfAstahPlugin Define value for property ‘version’: 1.0-SNAPSHOT: :(空欄) Define value for property ‘package’: com.example: :(空欄) Confirm properties configuration: groupId: com.example artifactId: SampleOfAstahPlugin version: 1.0-SNAPSHOT package: com.example Y: :(空欄) [INFO] -----------------------------------------------------------------… 識別子 プロジェクト名 astah*プラグイン開発勉強会 2013/5/29 + テンプレートプラグイン(2) 23 テンプレートプラグインの起動 作成したプロジェクトフォルダに移動 >astah-build [INFO] Scanning for projects... … (初回はすごく長い) … [INFO] -----------------------------------------------------------------[INFO] BUILD SUCCESS [INFO] -----------------------------------------------------------------… >astah-launch [INFO] Scanning for projects... … [INFO] -----------------------------------------------------------------[INFO] BUILD SUCCESS [INFO] -----------------------------------------------------------------… astah*プラグイン開発勉強会 2013/5/29 + テンプレートプラグイン(3) 24 メニューが追加されていることを確認 これ astah*プラグイン開発勉強会 2013/5/29 + テンプレートプラグイン(4) 25 テンプレートプロジェクトをEclipseにイン ポート Eclipseプロジェクトファイルの作成 >astah-mvn eclipse:eclipse Eclipseから既存のプロジェクトをインポート ここから作成したプロジェクトの ルートフォルダを指定 astah*プラグイン開発勉強会 2013/5/29 + (参考)m2eを使う場合 26 Mavenプロジェクトとしてインポート可能 Eclipseプロジェクトファイルの作成は必要なし 各種コマンドもEclipse上から実行可能 MAVEN_HOMEにSDKのルートディレクトリを追 加する必要あり astah*プラグイン開発勉強会 2013/5/29 + テンプレートプラグイン(5) 27 着目するファイル src/main/resouces/plugin.xml 拡張ポイントの設定ファイル テンプレートではメニューの定義と、メニュー押下時の振 る舞いの定義クラスを指定 src/main/java/com.example/TemplateAction.java メニュー押下時の振る舞いを実装 astah*プラグイン開発勉強会 2013/5/29 + テンプレートプラグイン(6) 28 plugin.xmlの確認 <?xml version="1.0" encoding="UTF-8"?> 拡張ポイントを指定 <plugin> <extension point="com.change_vision.astah.ui.actionSets"> <actionSet label="%action_set_label" メニューを追加 visible="true" id="com.example.SampleOfAstahPlugin.actionSet"> するグループ <menu id="SampleOfAstahPlugin" label="%menu_group" path="tool/SampleOfAstahPlugin"> グループ </menu> 押下時に実施される メニューを追加 <action 振る舞いを設定 label="%menu_label" icon="icons/sample.gif" class="com.example.TemplateAction" tooltip="%menu_tooltip" メニューを追加 menubarPath="tool/SampleOfAstahPlugin/" id="SampleOfAstahPlugin"> </action> </actionSet> </extension> </plugin> astah*プラグイン開発勉強会 2013/5/29 + HelloWorldプラグイン(1) 29 テンプレートプラグインを再利用して HelloWorldプラグインを作ろう ヘルプメニューに独自メニューを追加 プロジェクトを開いていなくてもHello World画面 を表示 テンプレートプラグインはプロジェクトが開いていないと エラーを表示する astah*プラグイン開発勉強会 2013/5/29 + HelloWorldプラグイン(2) 30 plugin.xmlに新たなactionSetを追加 <actionSet label=“HelloWorldプラグイン“ visible="true" id=“com.example.actions.HelloWorld”> <menu id=“HelloWorld” label=“HelloWorldメニューグループ” path=“help/HelloWorld”> </menu> 呼び出すクラスは <action HelloWorldAction label=“HelloWorldメニュー” icon=“icons/sample.gif” class=“com.example.actions.HelloWorldAction” tooltip=“HelloWorld” menubarPath=“help/HelloWorld/” id=“HelloWorldAction”> </action> </actionSet> astah*プラグイン開発勉強会 2013/5/29 + HelloWorldプラグイン(3) 31 Hell oWorldActionクラスの作成 アクションを実現するために IPluginActionDelegateを実装 public class HelloWorldAction implements IPluginActionDelegate { @Override public Object run(IWindow arg0) throws UnExpectedException { try { JOptionPane.showMessageDialog(arg0.getParent(), "HelloWorld!"); } catch (Exception e) { JOptionPane.showMessageDialog(arg0.getParent(), astah*ツールの "Exception occuerd!", "Alert", UIはSwing JOptionPane.ERROR_MESSAGE); throw new UnExpectedException(); } return null; } } astah*プラグイン開発勉強会 2013/5/29 + HelloWorldプラグイン(4) 32 プラグインをビルドし、HelloWorldのプロ ンプトが表示されることを確認 astah*プラグイン開発勉強会 2013/5/29 + CountClassesプラグイン(1) 33 プロジェクト内に存在するクラス数を表示す るプラグインを作ろう プロジェクト内にパッケージがある場合は配下の クラス数を再帰的にカウントする クラス数が3つで あることを表示 ※http://astah.change-vision.com/ja/plugin-tutorial/example.htmlから引 用 astah*プラグイン開発勉強会 2013/5/29 + CountClassesプラグイン(2) 34 plugin.xmlに新たなactionSetを追加 <actionSet label=“CountClassesプラグイン” visible=“true” id=“com.example.actions.CountClasses”> <menu id=“CountClasses” label=“CountClassesメニューグループ” path=“tool/CountClasses”> </menu> 呼び出すクラスは <action CountClassesAction label=“CountClassesメニュー” icon=“icons/sample.gif” class=“com.example.actions.CountClassesAction” tooltip=“CountClasses” menubarPath=“tool/CountClasses/” id=“com.example.actions.CountClassesAction”> </action> </actionSet> astah*プラグイン開発勉強会 2013/5/29 + CountClassesプラグイン(3) 35 CountClassesActionクラスの作成(1) public class CountClassesAction implements IPluginActionDelegate { @Override public Object run(IWindow window) throws UnExpectedException { try { AstahAPI api = AstahAPI.getAstahAPI(); ProjectAccessor projectAccessor = api.getProjectAccessor(); IModel iCurrentProject = projectAccessor.getProject(); List<IClass> classList = new ArrayList<IClass>(); getAllClasses(iCurrentProject, classList); JOptionPane.showMessageDialog(window.getParent(), "There are " + classList.size() + " classes."); } catch (ProjectNotFoundException e) { JOptionPane.showMessageDialog(window.getParent(), "Please open a project.", "Warning", JOptionPane.WARNING_MESSAGE); throw new UnExpectedException(); } catch (Exception e) { JOptionPane.showMessageDialog(window.getParent(), "Exception occured.", "Alert", JOptionPane.ERROR_MESSAGE); throw new UnExpectedException(); } return null; 扱うProject オブジェクトの取得 Projectを扱うときは Projectがない場合を想定 } astah*プラグイン開発勉強会 2013/5/29 + CountClassesプラグイン(4) 36 CountClassesActoinクラスの作成(2) パッケージなら 再帰的に検査 private void getAllClasses(INamedElement namedElement, List<IClass> classList) throws ClassNotFoundException, ProjectNotFoundException { if (namedElement instanceof IPackage) { for (INamedElement ownedNamedElement : ((IPackage) namedElement).getOwnedElements()) { getAllClasses(ownedNamedElement, classList); } } else if (namedElement instanceof IClass) { classList.add((IClass) namedElement); for(IClass nestedClasses : ((IClass) namedElement).getNestedClasses()) { getAllClasses(nestedClasses, classList); } } } } astah*プラグイン開発勉強会 クラスなら リストに追加 2013/5/29 + CountClassesプラグイン(4) 37 プラグインをビルドし、クラス数が正しく表 示されることを確認(1) astah*プラグイン開発勉強会 2013/5/29 + CountClassesプラグイン(5) 38 プラグインをビルドし、クラス数が正しく表 示されることを確認(2) デフォルトのjava プロジェクトには 137クラス存在 astah*プラグイン開発勉強会 2013/5/29 + HelloWorldViewプラグイン(1) 39 もうひとつの拡張ポイント、タブViewの追 加を行うプラグインを作りましょう plugin.xmlに新たなextensionを追加 Viewの拡張はこの extensionを使う <extension point="com.change_vision.astah.ui.view"> <view id="com.example.view.HelloWorldView" type="extraTab" class="com.example.view.HelloWorldView"> </view> </extension> 呼び出すクラスは HelloWorldView astah*プラグイン開発勉強会 2013/5/29 + HelloWorldViewプラグイン(2) HelloWorldViewクラスの作成 40 タブ自体はSwingのJPanel public class HelloWorldView extends JPanel implements IPluginExtraTabView { public HelloWorldView() { setLayout(new BorderLayout()); 拡張タブを実現するために add(createLabelPane(), BorderLayout.CENTER); IPluginExtraTabViewを実装 } private Component createLabelPane() { JLabel label = new JLabel("Hello World!"); JScrollPane pane = new JScrollPane(label); return pane; } @Override public String getDescription() { return "Hello World View Plugin"; } … } @Override public String getTitle() { return "Hello World View"; } astah*プラグイン開発勉強会 2013/5/29 + (参考)EventListnerの登録 41 ProjectEventListner astah*ツール上でモデルの編集など、プロジェク トに変更が発生した場合、このListnerを実装した クラスは変更のオブザーバーになれる 実装するメソッド public void projectOpened(ProjectEvent e){} public void projectChanged(ProjectEvent e){} public void projectClosed(ProjectEvent e){} チュートリアルの例ではHelloWorldViewにこの Listenerを実装している が、メソッドには何も実装していないのでサンプルとして は参考にはならない… astah*プラグイン開発勉強会 2013/5/29 + HelloWorldViewプラグイン(3) 42 プラグインをビルドし、拡張タブが表示され ることを確認 ここ astah*プラグイン開発勉強会 2013/5/29 + astah* communityで動くプラグイン 43 コードを読んでみよう yUML http://astah.change-vision.com/ja/feature/yuml-plugin.html Astah tool for Astahプラグイン Scriptプラグイン http://astah.change-vision.com/ja/feature/script-plugin.html PHP-Export Plug-in https://github.com/tobitobita/php-export/blob/master/README_ja.md (参考)最新Eclipseでも動くJavaのリバースツール「JD-Eclipse(の改造版)」 http://mchr3k.github.io/jdeclipse-realign/ astah*プラグイン開発勉強会 2013/5/29 + みんなで何かおもしろい プラグイン作りましょう! 2013/5/29 astah*プラグイン開発勉強会 44
© Copyright 2024 ExpyDoc