基本的に、もしアップデートサイトにPluginやFeatureのJarファイルを配置したい場合、Eclipseアップデートサイトにて定義されたルールに従う必要があります。そのルールとは、site.xmlファイルを作成し、PluginのJarファイルを「plugins」という名前のサブディレクトリに置き、そしてFeatureのJarファイルを「features」という名前のサブディレクトリに置くことです。ユーザがこのアップデートサイトにアクセスしてプラグインをインストールする際に、EclipseはこのルールによってこれらのJarファイルを見つけることができます。
しかし、もしアップデートサイトを作りたいとき、何らかの理由でこれらのサブディレクトリを作れないかもしれません。そのとき、あなたは自由にこれらのファイルを配置したいと考えるでしょう。
このケースの場合、site.xmlファイル内で<archive>タグを使用することができます。このタグの指定により、PluginのJarファイルを任意の場所に配置することができるようになります。もちろん、FeatureのJarファイルは、URLを記述することによって場所を指定できるので、任意の場所に配置することが可能です。
...
Featureが「jp.eisbahn.foo」という名前のPluginを持っているとき、Eclipseは「plugins」という名前のサブディレクトリからそのPluginを探そうとするでしょう。そのとき、PluginのJarファイルのパスは、「plugins/jp.eisbahn.foo_1.0.0.jar」となります(バージョン番号が1.0.0の例)。そして、<archive>タグを使うことで、そのパスを任意のURLに置き換えることができます。上記の例では、そのパスは「http://www.eisbahn.jp/any/foo-plugin.jar」に置き換えられています。
このテクニックは、OSDEのアップデートサイトで使用されました。そのsite.xmlファイルは以下となります。
http://opensocial-development-environment.googlecode.com/svn/update-site-candidate/site.xml
- Posted:
- 01.04.2010
- Category:
- Eclipse

昨日の15日に、Eclipseプラグイン開発のための勉強会「EclipSKY」に参加してきました。
竹添さん著のEclipseプラグイン開発本である「Eclipse 3.4 プラグイン開発徹底攻略(青本) 」を持参することが参加の条件でした(半分ホント)。もちろん全員持参してきました。

テーマとして、OpenSocialアプリケーションの開発環境であるOpenSocial Development Environment(OSDE)の紹介と、OSDEの中で「ここは便利」「ここはイケてない」という箇所を、ソースコードを実際に見ながら議論しました。
[イケてる箇所]
・MasterDetailsBlockの利用
[イケてない箇所]
・例外発生を防ぐための、時間差ILaunch実行(timerExec()で3秒待つ、とか)。
・MultiPageEditorでのページ間の編集内容の同期方法(EditorInputの実装をサボった結果、dirtyフラグ見て自前で同期、とか)
残りのテーマは、ここで紹介されていますので、そちらをどうぞ。
最後に話していたこととして、Eclipseプラグイン開発はやっぱり難しいよね、Ajaxアプリの方がリッチに作れちゃうよね、とか、Eclipseで作ることの意義をどう探していくかが課題なのかなぁ、と。開発環境以外で、結局Eclipseベースでアプリケーションを作る利点って何なんだろう、と考えさせられます。特にユーザエクスペリエンスがいいわけでもないし。。。
次回は「プラグイン開発で困ったことを付箋で貼っていって、みんなで解決!」「AIR開発環境の紹介」がテーマとなりそうです。いつ開催されるかわかりませんが、もしEclipseプラグイン開発に興味があれば、ぜひ次回参加してみてください。
- Posted:
- 02.16.2009
- Category:
- Eclipse

Eclipse Plug-in開発に関する勉強会「EclipSKY」が、明日開催されます。
EclipSKY200902 〜OSDEとかのソースコードからプラグインのコードのおいかけ方を学ぼう
http://atnd.org/events/351
テーマとして、OpenSocialアプリケーションの開発環境である「OpenSocial Development Environment」のコードを見て頂きながら、Eclipse Plug-inの開発に関する知見を参加者の間で共有したいと思っています。
http://www.eisbahn.jp/trac/osde
もしEclipse Plug-in開発に興味がある方は、ぜひご参加ください。
- Posted:
- 02.14.2009
- Category:
- Eclipse

しばらくEclipseから遠ざかっていたので、Twitterclipseも自分で使っていなかった。今日やってみたら、truncated属性がAPIに追加されていたみたいで、投稿できてもステータスが見れない状態だった。
上記不具合を修正し、1.3.2としてリリースを行った。もし興味のある方はバージョンアップをして欲しい。
- Posted:
- 01.22.2008
- Category:
- Eclipse

Twitterclipseをバージョンアップした。修正内容は,下記の1点のみ。
- TwitterのAPIで「source」属性が追加されたことに対応。
ご利用の方は是非バージョンアップを。
- Posted:
- 07.20.2007
- Category:
- Eclipse

「Webブラウザコンポーネントの利用」エントリで紹介したように,EclipseプラグインのViewなどにBrowserコンポーネントを貼り付けることで,効果的なEclipseプラグインを低コストで開発することができるようになる。「〜clipseな技術」の第2弾として,Webブラウザの起動方法について紹介してみたい。
何らかのWebサービスを利用したEclipseプラグインでは,Webサービスの提供元のWebページをWebブラウザ(not Browserコンポーネント)でブラウジングしたくなる局面がしばしば発生する。この場合,Eclipseプラグイン内の何らかのUIを操作した結果として,直接Webブラウザを起動して,該当のWebページにアクセスさせれば,利便性の向上につながる。
Eclipseは,もちろんWebブラウザの起動をAPIレベルでもサポートしている。実際には,2種類のサポートが実装されている。
- パースペクティブ内で,ViewまたはEditorとしてWebブラウザを起動する。
- 外部のWebブラウザアプリケーションを起動する。
1つ目の方法は,OSによっては実現できない。少なくともWindowsとMacOSXでは大丈夫。それぞれAPIの叩き方が異なるため,1つずつ見ていこう。
最初のパースペクティブ内でWebブラウザを開くパターンだが,これは「内部Webブラウザを開く」という表現である。Package ExplorerでHTMLファイルをダブルクリックした際に,テキストエディタではなく,この内部Webブラウザが起動してしまった経験をお持ちの方も多いことだろう。拡張子がhtmlなファイルをPackage Explorer上で右クリックし,[Open With]メニューに「Web Browser」と表示されているものが,それである。これを行った際に,Webブラウザアプリケーションが起動してしまった場合は,内部WebブラウザがサポートされていないOSか,[Window]-[Web Browser]メニューで「Internal Web Browser」以外が選択されているかのどちらかである(ほとんど後者)。内部Webブラウザを試したい時は,「Internal Web Browser」を選択しておくのを忘れずに。
内部Webブラウザを起動する時は,IWorkbenchBrowserSupportオブジェクトを利用する。
IWorkbenchBrowserSupportオブジェクトは,Workbenchオブジェクトから取得できる。これのisInternalWebBrowserAvaliable()メソッドで,内部Webブラウザを使用することができるか検査することが可能だ。これがfalseを返す時は,内部Webブラウザとしてではなく,Webブラウザアプリケーションが起動されるようになる。
取得したIWorkbenchBrowserSupportオブジェクトのcreateBrowser()メソッドの引数を調整することで,Webブラウザの基本的なUIを設置するかどうかなどの設定を施すことができる。上記の場合は,URLを入力するためのロケーションバー,[戻る][進む]ボタンなどが配置されるナビゲーションバーが,内部Webブラウザの上部に設置される。AS_EDITORを指定しているが,これをAS_VIEWとすることで,Viewとして内部Webブラウザを表示することも可能だ。
createBrowser()メソッドの戻り値であるIWebBrowserオブジェクトに対してopenUL()メソッドを使用すれば,指定したURLのコンテンツがレンダリングされる。内部Webブラウザの正体はSWTのBrowserコンポーネントなので,レンダリングエンジンはOSなどによって異なってくる。つまり,レンダリング結果もOSやWebブラウザのインストール状況によって変わってくるので,ご注意を。
さて,もう一つのEclipse外部のWebブラウザアプリケーションの起動だが,こっちの方が簡単である。
IWebBrowserSupportオブジェクトのcreateBrowser()メソッドを利用する代わりに,getExternalBrowser()メソッドを利用している。このメソッドに引数はないため,WebブラウザアプリケーションのスタイルをJavaコードで指定することはできない。得られたIWebBrowserオブジェクトのopenURL()メソッドのコールは,先ほどと同じである。
ここで1つ注意。「Webブラウザコンポーネントの利用」エントリで紹介したBrowserコンポーネントは,execute()メソッドでJavaScriptコードを実行できるなど高機能であったが,IWebBrowserオブジェクトにはそのような機能はなく,close()メソッドで閉じることくらいしかできない。つまり,このエントリで紹介している手順は,あくまでWebブラウザの起動と割り切って利用する必要があるということだ。
Webブラウザ起動のテクニックは,Twitterclipse,Lingrclipse,IPMsg4E,そしてSearchclipseというように,作成したEclipseプラグインの多くで使用している。きっと,楽しいEclipseプラグインであればあるほど,このテクニックの登場機会は増えるだろう。
Eclipseを使用しているということは,何らかの開発を行っているということだろう。今日では多くのドキュメントがHTMLコンテンツとして提供され公開されていることを考えれば,今回紹介した技術は非常に有効であり多用されることだろう。もちろん,楽しいEclipseプラグインにおいても,Webサービスとの連携を考えればWebブラウザの起動は何らかで必要となってくる。本エントリが効率的なEclipseプラグインの開発に一役買えば幸いである。
- Posted:
- 07.02.2007
- Category:
- Eclipse

「Webブラウザコンポーネントの利用」エントリで紹介したBrowserコンポーネントを使用すれば,低コストでリッチなEclipseプラグインを開発できる。しかし,嬉しいことばかりではない。このエントリでは,発生し得るいくつかの問題点と,その解決方法について紹介する。
万能に見えるBrowserコンポーネントだが,Webブラウザであること故のデメリットもちゃんと対処してあげなければならない。〜clipseで行っている対処として,以下のものがあげられる。
- コンテキストメニューの無効化
- ハイパーリンクの無効化
- レンダリングエンジンの違いの吸収
コンテキストメニューの無効化は,一般的なWebアプリケーションで用いられている手法がそのまま適用できる。つまり,htmlのbodyタグの属性におまじないを指定してあげれば良い。
最近のWebブラウザでは,上記の施策で十分であろう。「こんなことも必要だろ!」と何か御持ちの方は,ぜひコメントを。
機会は少ないかも知れないが,レンダリングされたコンテンツ内にaタグなどでハイパーリンクがあった時に,それをクリックしてもページ遷移が起きないようにしたいときが出てくる。ハイパーリンクがクリックされるなど,ページ遷移がBrowserコンポーネントで発生した際のイベントをJavaコードで拾うことができるようになっている。
上記のコードのように,LocationListenerオブジェクトをBrowserコンポーネントに登録することで,ページ遷移をJava側で知ることができるようになる。上記のコードでは,遷移先のlocationが「http://」で始まるものについては,それに対する処理をJava側で行い,LocationEventオブジェクトのdoitフィールドにfalseをセットすることで,Browserコンポーネントにページ遷移を行わせないように指示している。この条件を満たさない場合は,doitフィールドに何もセットされないために,ページ遷移が行われることになる。つまり,ハイパーリンクをSWTのLinkコンポーネントのように使用することができる。
最後のレンダリングエンジンの違いの吸収については,主にCSS系の話になるだろう。つまり,スタイル定義が同じでも,IEとFirefoxでその解釈が異なるために,見た目が変わってしまうのを何とかしなければならない。これもコンテキストメニューのときと同様に,一般的なWebアプリケーションでのテクニックが使える。
・・・
特にスタイルの調整は「IEだったら」という話になるため,上記のようにIEのみで解釈される特殊な記法を使って,スタイル定義を上書きしてあげればよい。
ちなみに,TwitterclipseとLingrclipseについては,上記の施策を施している。本来であれば,Browserコンポーネント上でショートカットキーを無効にするなどしないと,アプリケーションが意図していないページ遷移などが行われてしまう。ま,言いだしたらキリがない領域になるので,上記程度の工夫が妥当ではないだろうか。
このようなテクニックを適用すれば,見た目的にも美しいEclipseプラグインを短期間で開発することが可能となる。このエントリを読んでくれた方には,ぜひこれらの技術を身に付けて,面白いEclipseプラグインを作って公開して頂きたい。
- Posted:
- 06.29.2007
- Category:
- Eclipse

「〜clipseな技術」の第1段として,Webブラウザコンポーネントの利用方法について紹介する。
近年,Web2.0的なアプリケーションが数多く登場している。これを支えているのは,RESTなどによる軽量なWebサービスが次々と公開されているという事実であることについては,誰もが認めるところだろう。多くのWebサービスがWebブラウザ上で利用あるいはマッシュアップされることを前提として提供されている。つまり,Webブラウザ上,しかもJavaScriptとの親和性という点が重要である。
何らかのWebサービスを利用したEclipseプラグインを開発したいと思った時,やはり最も手軽で効果的な手段は,Webブラウザを利用してしまうことだ。Webサービスとの親和性だけでなく,HTML&CSSによる高い表現力も魅力である。Webブラウザアプリケーションとして完成されたものではなく,Webブラウザの(コンテンツの受信なども含めた)レンダリングエンジンをEclipseプラグインに組み込む。多くの場合,Eclipseプラグインの利用者にとってレンダリングエンジンを利用していることには気がつかない。
EclipseプラグインでWebブラウザのレンダリングエンジンを利用することは,非常に簡単である。SWTに含まれるBrowserコンポーネントを配置する,ただそれだけだ。
上記のコードだけで,parentコンテナにBrowserコンポーネントが配置される。もちろん何も指定していないので,配置結果は真っ白である。実際に張り付いているレンダリングエンジンは,WindowsであればIEのActiveXコンポーネント,MacOSXであれば(たぶん)Safariのコンポーネント,Linux系であれば(たぶん)何らかのGeckoコンポーネントが採用される。
Browserコンポーネントにレンダリングを要求するには,2通りの方法がある。1つは,手元にあるHTMLなどの文字列をレンダリングさせる方法,もう一つは,URL文字列を指定してWebサーバなどからコンテンツをダウンロードさせてレンダリングさせる方法である。
例えば,HTML文字列を渡す時には,以下のようにsetText()メソッドを使用する。
URL文字列を指定する場合は,以下のようにsetUrl()メソッドを使用する。
BrowserコンポーネントはWebブラウザを実現するためのコンポーネントであるので,Webブラウザの基本的な機能である「進む,戻る,更新する」はそれぞれ「forward(),back(),refresh()」メソッドを呼び出すことで実現可能である。もちろんこれらの機能を備えたい場合は,そのためのUIを自分で設置する必要がある。
Browserコンポーネントで何らかのコンテンツをレンダリングした後に,その内容に対してEclipseプラグインのJavaコード側から操作をしたくなることがあるだろう。その場合に,setText()メソッドやsetUrl()メソッドを使用してコンテンツ全体を更新するのも1つの手である。しかし,Browserコンポーネントにはexecute()メソッドという非常に強力なAPIが提供されている。execute()メソッドにJavaScriptコードを渡すことによって,JavaScriptコードをレンダリングエンジンで外部から実行することができるのだ。
例えば,以下のようなHTMLがBrowserコンポーネントにsetText()あるいはsetUrl()メソッドによってセットされているとする。
outputという関数がscriptタグ内に定義されている。これをexecute()メソッドを使用することによって実行することができる。
これによって,divタグ内が「Hello Eclipse!」という文字列で書き換えられる。DHTMLを理解していれば,execute()メソッドを使用することによって,Browserコンポーネント内のコンテンツを自在に更新することが可能である。
ちなみに,SWTコンポーネントは自作のスレッドから直接操作を行うことができない。これを回避するためには,以下のようにコーディングする必要がある。
基本的には上記の技術のみで,Webブラウザを利用したEclipseプラグインを開発することができるだろう。しかし,Webブラウザならではの工夫も必要となる。これについては,別エントリで紹介したい。
- Posted:
- 06.28.2007
- Category:
- Eclipse

Twitterが「1時間に70回」というアクセス制限を始めた。これに伴い、Twitterclipseも「10秒に1回の更新」を止め、「60秒に1回」(これは初期値で更新頻度は設定で変更可能)に変更を行った。
古いTwitterclipseのままだと、数分のうちに「400エラー」になってしまうので、ご利用の方は是非アップデートをお願いしたい。
- Posted:
- 06.27.2007
- Category:
- Eclipse

修正点は以下の通り。
- 検索履歴が10個溜まってしまうと,新しいキーワードが履歴として含まれなくなってしまう不具合を修正。
- キーワード入力フィールドの大きさを修正。
興味のある方はバージョンアップをして欲しい。
そろそろ「〜clipseな技術」のエントリを始めようと思っている。ちょっとしたテクニックで面白いプラグインを作ることができるんだぜ,的な内容にしていくつもりだ。
- Posted:
- 06.26.2007
- Category:
- Eclipse

Previous »