Hatena::ブログ(Diary)

Fly me to the Juno! このページをアンテナに追加 RSSフィード

2011-06-24

Eclipse 3.7を使い始める前に知っておくといいこと

今まで使ってたEclipseから、インストールしてたフィーチャーを簡単にインポートできるよ!

1. File -> Importを選択

f:id:kompiro:20110624222633p:image

2. Install -> From existing Installationを選択

f:id:kompiro:20110624222634p:image

3. 既存のEclipseのパスを指定

f:id:kompiro:20110624222635p:image

するとでーんとインストールしていたフィーチャー一覧が表示されるよ。

あとはインポートしたいフィーチャーを選択してね!

そんじゃーね。

2011-02-08

5分でEclipse PluginをGroovyで書くよー。

ぼーっとしていたらEclipse PluginをGroovyで書いてました!他のJVM言語でもEclipse Plugin書けるんです!

Eclipseはe4プロジェクトでJava以外の言語(例えばJavaScript)でもPluginの実装を実現しようと頑張ってますが、なんか3系でもできちゃった。

必要なもの(環境)

こっからはほぼ画像ペタペタ貼っているだけです。この通りに作業すれば同じようにプラグインが作れます。

ほいじゃ、実際に作っていくよー。

まずGroovyプロジェクトを作るー

f:id:kompiro:20110208221544p:image

プロジェクト名は「 eclipse-plugin-by-groovy 」って作りました。

f:id:kompiro:20110208221545p:image

GroovyプロジェクトをPluginプロジェクトにコンバート

f:id:kompiro:20110208221546p:image

f:id:kompiro:20110208221547p:image

MANIFEST.MFを編集してGroovyのライブラリやらEclipseのライブラリを追加するっす。

f:id:kompiro:20110208221548p:image

f:id:kompiro:20110208221549p:image

f:id:kompiro:20110208221550p:image

下記のダイアログが出るので、次のプラグインを追加するっす。
  • org.eclipse.ui
  • org.codehaus.groovy
  • org.eclipse.core.runtime

f:id:kompiro:20110208221551p:image

こんな感じで追加したらこんなんなります。

f:id:kompiro:20110208221552p:image

続いてメニューの拡張ポイントのテンプレートを追加するよー。

f:id:kompiro:20110208221920p:image

f:id:kompiro:20110208221921p:image

テンプレートの内容をカスタマイズするページが表示されるっす。そのままでOKっす。

f:id:kompiro:20110208221922p:image

テンプレートが出力されたので、Javaのファイルができました。groovyにするっす。

f:id:kompiro:20110208221923p:image

f:id:kompiro:20110208221924p:image

f:id:kompiro:20110208221926p:image

ソースを編集するよー

f:id:kompiro:20110208221927p:image

f:id:kompiro:20110208221928p:image

完全版のソースコードはこんな感じ。

package eclipsepluginbygroovy.handlers;

import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.handlers.HandlerUtil;
import org.eclipse.jface.dialogs.MessageDialog;

class SampleHandler extends AbstractHandler {
	/**
	 * The constructor.
	 */
	SampleHandler() {
	}

	/**
	 * the command has been executed, so extract extract the needed information
	 * from the application context.
	 */
	def execute(ExecutionEvent event) throws ExecutionException {
		def window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
		MessageDialog.openInformation(
				window.getShell(),
				"eclipse-plugin-by-groovy",
				"Hello, Eclipse world");
		return null;
	}
}
実行してみよー。

f:id:kompiro:20110208221929p:image

Eclipse Applicationを追加するよー。左側のEclipse Applicationを選んで、ノートに+がついたようなアイコンをクリック

f:id:kompiro:20110208221930p:image

「Eclipse Plugin by Groovy」と言う感じでNameをつけてあげよう。Macユーザーの方は、Arguments(引数)タブを開いて、VM Arguments(VM引数)に-d32を追加してください。そんでOKを押してみる。

f:id:kompiro:20110208221931p:image

するともう一つEclipseが立ち上がるので、ツールバーのこのボタンを押してみよー。

f:id:kompiro:20110208221933p:image

うまくいくとこのダイアログが出るよー。

f:id:kompiro:20110208221934p:image

おしまい。

今回はメニューやツールバーのテンプレートを使いましたが、ビューやらエディタやらも各拡張ポイントに対応するクラスを指定すれば同様に動作するはずです。

種明かし

と書いてみましたが、特に種はありません。Groovy Eclipse環境下では、groovyのソースコードがコンパイルされclassファイルになります。groovyのクラスファイルは、実行時にgroovyのランタイムが必要ですが、プラグインの実行時に依存関係にgroovyのライブラリを含んでいるため、意図したとおりクラスが実行できるのです。

これってば他のJVM言語でもうまくいくのではないか!?

Groovyの場合、Javaとソースコード変換をするプラグインがあるのでさくっと行きますが、他のJVM言語でも依存ライブラリにその言語のライブラリを指定すれば動くはず。近いうちにScalaとかJRubyとか試してみたいと思います。それができれば、ポリグロット(多言語)eclipse環境が実現されますね。ではではー。

2011-01-29

Eclipse Plugin開発のチュートリアルを公開します。

1/28に僕のふるさとの名古屋でEclipse Plugin開発セミナーが開催され、講師として参加してきました。そのために作成したEclipseプラグイン開発のチュートリアルを公開します。

http://kompiro.org/nagoya-seminar/html

このチュートリアルはチュートリアルを通じて手を動かしてみる事でプラグイン開発とはどういったものかを、一通り学ぶ事を目的にしています。手順通りに実施すると二つ小さなプラグインを作成できるチュートリアルです。

このチュートリアルではまだテストコードを書いたり、ビルドサーバを立てたCIのやりかたなどは取り上げていませんが、その辺りも追加できればと思っています。

2011-01-20

Eclipse Orionのためし方

Eclipse Orionのためすための手順はたった3つです。(あ、試す前にJavaインストールしておいてくださいね。)

  1. 0.2 M4のサイトからOrionサーバを起動したいプラットフォームのパッケージをダウンロードする。
  2. できるだけパスの短い適当なフォルダに展開する
  3. eclipse何チャラをダブルクリック

・・・これだけです。ソースコードが配布されているなんてもんじゃないです。実際多少ですが動くもんも公開されてました。

動かしてみると、サーバ内のワークスペースにあるファイルを編集できるのですが、色づけやら文法エラー解析やらはできてました。(日本語があると解析がうまくできていないようですが。)

パッケージの展開後のものを見ていたければ分かるように、Orionはサーバ側のテクノロジはEclipseプラットフォームをそのまま使ってます。EquinoxというOSGiコンテナ上にJettyがHttpをサーブし、その上にOrionのアプリケーションが乗っかってると言う。e4はJavaScriptもファーストクラス言語になりそうなので、だいぶいろいろ出来そうです。

ブラウザ上で動くIDEは正直デスクトップのIDEとはやっぱり利用用途が違う気がするんですが、こういう環境が整ってくるといろいろ妄想が膨らみますね。お試しを。

2010-09-26

Buckminsterを試してみる(1)

BuckminsterとはEclipse Plug-inのビルドやテストを補助するEclipse Plug-inです。Eclipse Demo Camp Tokyoで、「こんなネタで話したかったんだ」とつぶやいたネタの一つがBuckminsterでした。それで興味を持ってくださった方がいらっしゃったのと、PluginBuilderのHelios版がリリースされる様子がないので、この機会に試してみました。ここで公開されているチュートリアルを試しました。このチュートリアルを訳しつつ、メモをとりました。

準備
  • まっさらなEclipse RCP/RAPパッケージを用意*1

やったこと

RCPのサンプルとしてよく使われる、Mailテンプレートプロジェクトを作成する。
  • プラグインプロジェクト(com.example.mail)を作成
  • RCPの作成を選択
  • Nextを選ぶとテンプレートプロジェクトが表示される。Mailテンプレートを選択
配布用フィーチャーを作る(com.example.mail.feature)
  • フィーチャープロジェクト(com.example.mail.feature)を作る
  • Plug-insにcom.example.mailを追加
  • include featuresにcom.eclipse.rcp*2を追加
RCPとしてビルドできる事を確認する。
  • com.example.mail.featureにproductファイル*3を追加する。
  • 下記の写真みたいに情報を追加する。

f:id:kompiro:20100920161342p:image

  • "The product configuration is based"にfeatureを選択し、Dependencyタブでcom.example.mail.featureを選ぶ
  • 試しにプロダクトが起動するか確認する。OverviewタブのLaunch an Eclipse Applicationを選択する。*4
Buckminsterをインストールする。
Buckminster用のフィーチャープロジェクト(com.example.mail.site)を作成

target platform*5の定義と共有をします。

  • Preference画面を開き、 Plug-in Development > Target Platformを選ぶ。
  • 空の定義を作成し、Eclipse Software SiteからEclipse RCP SDK と Eclipse Platform Launchersを追加する。
  • Include required softwareのチェックは外し、Include all environmentsにチェックを入れる。
  • 現在のターゲットプラットフォームに指定する
Buckminsterを使ってp2リポジトリを作成する

Buckminsterを使ってp2リポジトリを作るのは簡単です。

  • com.example.mail.siteを選択し、コンテキストメニューを表示し、Buckminster > Invoke Action を選択すると次のダイアログが表示される。

f:id:kompiro:20100926214442p:image

  • しばらく待つと、site.p2が表示される。site.p2を選択すると、同じワークスペースにBuckminster.outputというフォルダが出来る。それがp2のリポジトリ。
  • 今度はp2リポジトリの出力先等、カスタマイズ。まず下記のプロパティファイルを作る。
# 出力先
buckminster.output.root=${user.home}/tmp/mail
# 一時ファイルの出力先
buckminster.temp.root=${user.home}/tmp/buildtmp
# .qualifier の置換方法(リビジョンで置き換える)
qualifier.replacement.*=generator:lastRevision

target.os=*
target.ws=*
target.arch=*
  • 先ほどのダイアログではpropertiesファイルの指定欄があったが、そこに作成したbuckminster.propertiesを指定。

これで出力先のカスタマイズ等できます。.qualifierの指定方法は他にもgenerator:lastModifiedや generator:buildTimestamp があります。一般的にeclipse上からエクスポートされると置換されるのは、buildTimestamp形式です。先ほどのbuckminster.propertiesはこんな感じで指定します。

qualifier.replacement.*=generator:buildTimestamp
generator.buildTimestamp.format=yyyyMMddHHmm

これで自動ビルドの下準備が整いました。続いてHudson...と行きたいところですが、ちょうど区切りがいいので次回。ちなみに紹介したチュートリアルのサイトではHudsonの自動化までやられており、実際にやってみたのですが、拍子抜けするくらい簡単でした。ただ、作業は簡単ですが、実際はp2のインストールに時間がかかる事があるので、なんか止まってるっぽいと思って終了しないように。ハマったのは、フィーチャーIDの指定が間違っていた、ということくらいです。

*1:他のプラグインによる干渉を防ぐため。何か変な動作があったとき、その原因を探る時間がもったいないでしょう。

*2:RCP用のベース機能を用意しているフィーチャー

*3:RCPとしてパッケージするための情報を格納したファイル

*4Macの場合、64bit Java VMを利用しているのであれば、VM引数に-d32が含まれていないと起動しない。

*5:target platformとは開発中のプラグインを載せるためのプラットフォームの定義です。