Eclipseプラグイン実践テクニック(3)

Eclipseのパースペクティブをカスタマイズしてみよう!



NTTデータ先端技術 竹添直樹
NTTデータ 基盤システム事業本部 岡本隆史
2006/11/3


パースペクティブとは?

  本連載ではこれまでビューやエディタ、アクションなどさまざまな機能の拡張方法を解説してきました。Eclipseではこれらの拡張を特定の目的に応じてひとまとめにし、「パースペクティブ」として提供しています。例えばJava開発用のJavaパースペクティブはパッケージ・エクスプローラビューやアウトライン・ビューなど、Java開発で利用頻度の高いビューが配置され、ツールバーにはクラスやインターフェイスを作成するためのウィザードへのショートカットなどが表示されています。

 あらゆる機能をプラグインとして拡張可能なEclipseのことですから、もちろん新たなパースペクティブをプラグインとして追加することもできますし、既存のパースペクティブを拡張することも可能です。今回はこのパースペクティブについて詳しく解説していきたいと思います。

独自のパースペクティブを作成するには?

 新たなパースペクティブを追加するには、org.eclipse.ui.perspectivesという拡張ポイントを使用します。plugin.xmlでの定義は以下のようになります。

リスト1
<extension
    point="org.eclipse.ui.perspectives">
    <perspective
        class="jp.sf.amateras.perspective.PerspectiveFactory"
        icon="icons/sample.gif"
        id="jp.sf.amateras.perspective.perspective1"
        name="サンプル・パースペクティブ"/>
</extension>

 perspective要素のclass属性で指定しているjp.sf.amateras.perspective.PerspectiveFactoryクラスによってパースペクティブが生成されます。このクラスはorg.eclipse.ui.IPerspectiveFactoryインターフェイスを実装する必要があります。最もシンプルなIPerspectiveFactoryの実装例を以下に示します。

リスト2
package jp.sf.amateras.perspective;

import org.eclipse.ui.IPageLayout;
import org.eclipse.ui.IPerspectiveFactory;

public class PerspectiveFactory implements IPerspectiveFactory {

    public void createInitialLayout(IPageLayout layout) {

        // エディタ領域を取得
        String editorArea = layout.getEditorArea();

        // エディタ領域の左側にリソース・ナビゲータビューを表示
        layout.addView(IPageLayout.ID_RES_NAV
                    , IPageLayout.LEFT, 0.25f, editorArea);

        // エディタ領域の下側にブックマークビューを表示
        layout.addView(IPageLayout.ID_BOOKMARKS
                , IPageLayout.BOTTOM, 0.75f, editorArea);
    }
}

 IPerspectiveFactoryの実装クラスでは、createInitialLayout()メソッドの引数として渡されるIPageLayoutに対してレイアウト情報などを設定していくことで、パースペクティブを作成します。初期状態ではエディタ領域だけが存在する真っさらな状態ですので、addView()メソッドでエディタ領域に対する相対位置を指定してビューを追加しています。addView()メソッドは以下の引数を取ります。

表1 IPageLayout#addView()の引数
引数 説明
viewId String 追加するビューのIDを指定します。Eclipseが提供する基本的なビューについてはIPageLayoutの定数としてビューIDが定義されています
relationship int refIdで指定した領域に対してどの位置に表示するかをIPageLayoutで定義されているTOP、LEFT、RIGHT、BOTTOMのいずれかで指定します
ratio float refIdで指定した領域の何パーセントを割り当てるかを0.05〜0.95の間で指定します
refId String relationshipおよびratioの対象となる領域を指定します。エディタ領域、フォルダID(後述)、ビューIDのいずれかを指定します

 このプラグインによって、以下のようなサンプル・パースペクティブが追加されます。

図1 サンプル・パースペクティブ

 IPageLayoutにはこのほかにもフォルダ(ビューをレイアウトするための領域)や高速ビュー、アクションセットを追加したり、ウィザードやパースペクティブなどのショートカットを追加するためのメソッドが用意されています。これらのメソッドを使用して、先ほどのサンプル・パースペクティブに少し手を加えてみましょう。

リスト3
public void createInitialLayout(IPageLayout layout) {

    // エディタ領域を取得
    String editorArea = layout.getEditorArea();

    // パースペクティブのショートカットを追加
    layout.addPerspectiveShortcut
        ("org.eclipse.ui.resourcePerspective");

    // ウィザードのショートカットを追加
    layout.addNewWizardShortcut
        ("org.eclipse.jdt.ui.wizards.JavaProjectWizard");
    layout.addNewWizardShortcut
        ("org.eclipse.jdt.ui.wizards.NewPackageCreationWizard");
    layout.addNewWizardShortcut
        ("org.eclipse.jdt.ui.wizards.NewClassCreationWizard");

    // エディタ領域の左側にフォルダを追加
    IFolderLayout left = layout.createFolder
        ("left", IPageLayout.LEFT, 0.25f, editorArea);
    left.addView(JavaUI.ID_PACKAGES);

    // 追加したフォルダの下側にプロパティビューを追加
    layout.addView(IPageLayout.ID_PROP_SHEET,
                    IPageLayout.BOTTOM, 0.5f, "left");

    // エディタ領域の下側にフォルダを追加
    IFolderLayout bottom = layout.createFolder
        ("bottom", IPageLayout.BOTTOM, 0.75f, editorArea);

    // 3つのビューをスタック
    bottom.addView(IPageLayout.ID_BOOKMARKS);
    bottom.addView(IPageLayout.ID_PROBLEM_VIEW);
    bottom.addView(IPageLayout.ID_TASK_LIST);

    // 高速ビューを追加
    layout.addFastView(IPageLayout.ID_OUTLINE);

    // アクションセットを追加
    layout.addActionSet(JavaUI.ID_ACTION_SET);
    layout.addActionSet(JavaUI.ID_ELEMENT_CREATION_ACTION_SET);
}

 この例ではJDTのビューやアクションセットなどをパースペクティブに追加しています。JDTのビューやアクションセットのIDは、JDTの提供するorg.eclipse.jdt.ui.JavaUIクラスに定数値として定義されています。そのため上記のソースコードを動作させるためには、org.eclipse.jdt.uiプラグインを依存関係に追加する必要があります。ビューやアクションセットのIDがあらかじめ分かっているのであれば文字列で直接指定しても構いません。この場合、依存関係の追加は不要です。

 パースペクティブは以下のようになります。高速ビューやアクションセット、ウィザードのショートカット、パースペクティブのショートカットなどが追加されていることに注意してください。

図2 サンプル・パースペクティブ拡張版

 
1/2

 INDEX

第3回 Eclipseのパースペクティブをカスタマイズしてみよう!

Page1
パースペクティブとは?
独自のパースペクティブを作成するには?
  Page2
既存のパースペクティブを拡張してみる
パースペクティブカスタマイズのすすめ



Java Solution全記事一覧



Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間