Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Astahプラグイン開発勉強会

7,496 views

Published on

社内で実施したAstahプラグイン開発勉強会の資料です。

  • Be the first to comment

Astahプラグイン開発勉強会

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

×