Table Of Contents

Previous topic

astah*のプラグインの開発環境を構築しましょう

Next topic

クラスの総数を表示するプラグインを作ってみましょう

This Page

Hello Worldプラグインを作ってみましょう

本章ではメニューの追加を例に、astah*のプラグイン開発を紹介します。

プラグインプロジェクトの新規作成

まず、プラグインプロジェクトを新規作成します。プラグインプロジェクトを作成したいディレクトリへ移動し、次のコマンドを入力しましょう。:

> astah-generate-project

続いてgroupId、artifactId、version、パッケージを指定してください。

Parameter Description
groupId プロジェクトの識別名を指定します。一般的には、プロジェクトのルートパッケージ名を指定します。
artifactId プロジェクト名を指定します。生成されるフォルダ名やjarファイルの名前に使用されます。
version プロジェクトのバージョンを指定します。
package プロジェクトのパッケージ名を指定します。groupIdと同じか、下層のパッケージ名を指定してください。
astah*プラグインプロジェクトの生成

エラーがなければ、指定したartifact idと同名のフォルダがプラグインプロジェクトとして作成されます。

astah*プラグインプロジェクトの生成の成功

生成されたプロジェクトの内容を簡単に説明します。

File Name Description
pom.xml プロジェクトのビルド情報や、ライブラリの依存情報、 Mavenプラグインの設定などを記述します。
Activator.java プラグインがロードされるときに実行されます。 プラグインの初期化処理や終了処理などを定義します。
plugin.xml メニューなどの拡張ポイントを設定します。 この例では、 astah*の拡張ポイントとしてメニュー定義を記述します。 記述方法は、後ほどプラグインの作り方で説明します。
plugin.properties astah*プラグインで使用するラベルなどの多言語化のための仕組
plugin_jp.properties みです。デフォルトではplugin.propertiesの値が使用され、 日本語のラベルを提供する場合は plugin_jp.propertiesに記述される値が使用されます。

開発中のプラグインを読み込んだ状態でastah*を起動しましょう

開発中のプラグインを読み込むには、まずビルドしなければなりません。そのために、作成したプラグインプロジェクトのディレクトリへ移動し、次のコマンドを実行してみましょう。:

> astah-build
astah*プラグインプロジェクトのビルドの成功

ビルドが成功すると、targetフォルダが作成され、その中に[artifact id]-[version].jar というファイルが作成されています。このファイルがプラグインファイルです。続いて、このプラグインファイルを読み込んでastah*を起動します。次のコマンドを実行してみましょう。:

> astah-launch

すると、プラグインが読み込まれた状態でastah*が起動します。

astah*プラグインプロジェクトを組み込んでastahの起動に成功

[ヘルプ]-[プラグイン一覧]メニューを見ると、次のようにテンプレートのプラグインが 読み込まれていることを確認できます。

プラグイン一覧

また、[ツール]メニューを開くと、下のほうにメニューが追加されています。

追加されたメニュー

IDEにプラグインプロジェクトをインポートしましょう

astah* Plug-in SDKはMavenベースのツールです。しかし、実際にプラグインの開発では、astah* Plug-in SDKのみを用いて開発を進めるというよりも、Eclipse [1] やIntelliJ IDEA [2] など、IDEと連携して開発する場合がほとんどでしょう。

ここでは、EclipseとIntelliJへのプラグインプロジェクトのインポート方法を解説します。お使いのIDEにインポートしてみましょう。

Eclipse

EclipseとMavenを連携させるm2eをインストールしておくと、Eclipse上からMavenのコマンドを実行できます。

Eclipseとm2eのインストール

まず、Eclipseとm2eをインストールします。 Eclipseのサイト より、:

Eclipse IDE for Java Developers

をダウンロードしてください。このパッケージにはm2eが同梱されています。

Note

Eclipseはパッケージを解凍するだけでインストールが済み、また既存の開発環境に影響 を与えません。本チュートリアルの実施では、こちらのパッケージをお勧めします。も ちろん既存の環境にm2eをインストールしてもastah*プラグイン開発を行えます。既存の 環境にm2eをインストールする場合は、 m2eのサイト を参考にしてください。

astah* Plug-in SDKをEclipseのMAVEN_HOMEとして設定する

Eclipseを起動し、ワークスペースを選択後、astah* Plug-in SDKをMAVEN_HOMEに設定します。

[Window]-[Preferences]を開き、[Maven]-[Installations]ページを開きます。そして次の図のようにInstallationsに、astah* Plug-in SDKのインストールフォルダ(ASDK_HOME)を追加してください。

Eclipse設定ページ

これでEclipse上に読み込む準備ができました。Mavenのプロジェクトとしてインポートしてください。

Note

インストール中、Connectorのインストールを勧める画面が表示される事があります。 このConnectorは、astah*プラグイン開発に必要なものなので、インストールしてください。

IntelliJ IDEA

IntelliJ IDEAには標準でMavenとの連携機能が組み込まれています。 IntelliJのサイト より、ダウンロードしてください。

初めて起動した場合はまずプロジェクトの新規作成のウィザードが立ち上がります。既にお使いの場合は、次の「astah* Plug-in SDKをIntelliJ IDEAのMAVEN_HOMEとして設定する」を行ってからプロジェクトのインポートを行ってください。

生成したプラグインプロジェクトをIntelliJ IDEAにインポートする

生成したプラグインプロジェクトをインポートしましょう。通常の手順と同様のため、割愛します。不明点はIntelliJのヘルプをご参照ください。

astah* Plug-in SDKをIntelliJ IDEAのMAVEN_HOMEとして設定しましょう

astah* Plug-in SDKをIntelliJ IDEAのMAVEN_HOMEとして設定しましょう。

IntelliJを起動後、[File]-[Settings]を開き、[Maven]ページを開きます。そして、次の図のように、Maven home directoryのOverrideにチェックし、astah* Plug-in SDKのインストールフォルダ(ASDK_HOME)を指定してください。

IntelliJ IDEA設定ページ

設定が終わると、クラスパスが設定されます。

メッセージを表示するメニューを作成しましょう

プラグインメニューの追加例

astah*のプラグインを作成するには、astah*が提供する拡張ポイントの内容を<extension>タグのpoint属性でplugin.xmlに記述する必要があります。現時点で提供している拡張ポイントは以下の2つです。

Extension Point Name Descrption
com.change_vision.astah.ui.actionSets astah*のメニューに独自メニューを追加
com.change_vision.astah.ui.view astah*の拡張ビューに独自タブを追加

これから追加するのは、メニューです。下記はメニューを追加するplugin.xmlの例です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?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.helloworld.actionSet">
         <menu
               id="helloworld"
               label="%menu_group"
               path="tool/helloworld">
         </menu>
         <action
			   label="%menu_label"
               icon="icons/sample.gif"
               class="com.example.TemplateAction"
               tooltip="%menu_tooltip"
               menubarPath="tool/helloworld/"
               id="com.example.actions.HelloWorldAction">
         </action>
     </actionSet>
   </extension>
</plugin>

この例では<menu>タグを追加し 、[ツール]メニューに[サンプルメニュー]を追加しています。<action>タグでは、[サンプルメニュー]にHello Worldプラグインのメニューを追加しています。メニューを追加する位置は、<action>タグのmenubarpath属性で指定します。toolは[ツール]メニューのidで、<menu>タグのpath属性と<action>タグのmenubarpath属性に各メニューのidを記述する必要があります。各メニューのidは astah* メニューID一覧 を参照してください。<actionSet>タグは各<action>タグをグループ化します。<action>タグのclass属性で、メニューが押されたときに呼ばれるアクションを定義します。

まとめると下記のようになります。

Tag Name Attribute Required Description
plugin
extension 拡張ポイントを指定します。
point com.change_vision.astah.ui.actionSetsを指定
actionSet メニューバーにメニューを追加するグループを
指定します。
label (予約属性)
visible (予約属性)
id メニューグループのIDを指定します。
menu グループメニューを追加します。
label グループメニューのラベルを指定します。
id グループメニューのIDを指定します。
path 表示したい位置を指定します。
action メニューを追加します。
label メニューのラベルを指定します。
icon (予約属性)
class 押下した時のクラスを指定します。
tooltip (予約属性)
menubarPath 表示したい位置を指定します。
id メニューのIDを指定します。

アクションの作成方法を後ほど説明します。

ラベルの国際化対応をしましょう

<action>タグのlabel属性の記述には”%menu_label”と記述されています。この記法は、ラベルの表示を国際化するためのものです。”menu_label”という文字列はキー名です。ラベルの内容は、plugin.propertiesとplugin_ja.propertiesに記述します。

plugin.properties:

menu_label=&Hello World

plugin_ja.properties:

menu_label=こんにちは、ワールド(&H)

日本語環境であればplugin_ja.propertiesから、”こんにちは、ワールド”という文字列がロードされます。それ以外の環境ではplugin.propertiesから”Hello World”という文字列がロードされます。

アクションを作成しましょう

メニューバーにメニューを追加できました。これから”Hello World”のメッセージを表示するアクションを作成します。アクションはIPluginActionDelegateインターフェースを実装したクラスで定義します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/*
 * パッケージ名は、生成したプラグインのパッケージ名よりも下に移してください。
 * プラグインのパッケージ名=> com.example
 *   com.change_vision.astah.extension.plugin => X
 *   com.example                              => O
 *   com.example.internal                     => O
 *   learning                                 => X
 */
package com.example.actions;


import javax.swing.JOptionPane;
import com.change_vision.jude.api.inf.ui.IPluginActionDelegate;
import com.change_vision.jude.api.inf.ui.IWindow;

public class HelloWorldAction implements IPluginActionDelegate {

  public Object run(IWindow window) throws UnExpectedException {
      try {
          JOptionPane.showMessageDialog(window.getParent(), "Hello World");

      } catch (Exception e) {
        JOptionPane.showMessageDialog(window.getParent(), "Exception occured", "Alert", JOptionPane.ERROR_MESSAGE);
          throw new UnExpectedException();
      }
      return null;
  }
}

IPluginActionDelegateインターフェースのrun()メソッドは、対応するastah*のメニューが押されたときに呼び出されます。例では、[Hello World]メニューが押されたときに、”Hello World”という文字列が書かれたダイアログを表示しています。実行中に発生するエラーはIPluginActionDelegateインターフェースの内部クラスUnExpectedExcetpionとして扱っています

Footnotes

[1]http://eclipse.org/
[2]http://www.jetbrains.com/idea/