Eclipse 3.6 Helios × Subversive

ご無沙汰しちょります。最近はがっつりAndroidの世界に身を置いてます。

さて、えーと、いよいよHeliosリリースですね。一般DLは始まっていないようですが、明日みんなDLできるようになるようです。わたしゃEclipseにはさんざんお世話になってるので、35US$を寄付してEclipseのお友達になってまして。前日からお友達専用サーバからダウンロードができる、というわけです。

さて、この時期はHeliosの新機能紹介なんかをするのが順当かとは思ってたんですが、id:kompiroに先を越されたので、そちら参照w

いよいよEclipse3.6(Helios)がやってくる。 - Fly me to the Juno!

で、ですね。実はSubversiveを使っている人に悲報。control+option+C (commit)等のショートカットが、Heliosでは死んでしまうのです。いやー、コミットなんて日常茶飯事の操作だから、コレが使えないのは痛いねー。と思っていたのですが。対応策があったのでご紹介。

続きを読む

Strict Java Project Plugin 1.0.0

Java開発者であれば、しばしばEclipseJavaプロジェクトを作ると思います。

JDT標準の「Java Project」ウィザードを使う事もあれば、Maven構成のプロジェクトを使うためにarchetypeを使ってmvn eclipse:eclipseをしたり。まあ色んなパターンがあると思います。

先日の日経ソフトウエア記事を切っ掛けに、「コンパイラ設定やcheckstyle設定を適度に厳しく設定して、綺麗なコードを書いていこうぜ」という主張を始めている都元ですが、記事の通りに設定ファイルをコピーしたり何なりって意外とめんどくさく、サボってしまいがちです。俺自身も。

じゃあ、ちょっとした設定が済んでいるプロジェクトを吐けるようになればいいじゃない。というプラグインを作りました。題して「Strict Java Project Plugin」。

色々細かく作り込むのが面倒だったので、以下の前提で決め撃ちです。

  • フォルダ構成はMaven構成
  • CheckstyleFindBugsコンパイラの設定を適切に行う(日経ソフトで配布した設定ファイルです)
  • ファイルヘッダはApache Licenseのヘッダ。Copyright保持者はUI上で指定可能。
  • pom.xmlのgroupIdはUI上で設定可能。


っつー感じで。例の Choco Project で作ってみました。

上記の通り、Maven構成でCheckstyle等の設定済みのプロジェクトが作成されます。

更新サイトもChoco Project → http://svn.sourceforge.jp/svnroot/ykhr-kokko/update/

正直、まだまだしょーもないバグ満載です。でもまぁ、何とか使えるかな? という感じ。どうにかしたい方は勝手にフォークするなり、コメントで「Choco Project入りたい」って名乗り出ると、id:ykhr-kokko がどうにかしてくれるかもしれない(無責任

Choco Projectのプラグインを勝手にリリースしてみた

自分は、基本的に地豆の人である。

ただ、普段の作業でEclipseを使うことが多く、さらにEclipseプラグインを書けるとなると、ちょっとしたプラグインを書いて使う、という機会がたまにある。

先日のActivityTrackerもそんな感じでチョチョっと作ってみたプラグインだ。

そんなプラグインの置き場として、その昔、Choco ProjectというOSSプロジェクトのメンバーにしてもらった。

リーダーはid:ykhr-kokko。最近見かけないけど元気かな。サイトの更新も止まってるみたいだが、俺はwikiのパスも知らんw*1

で、ここのプラグインは更新サイトでリリースされていない。zipを展開してpluginsに放り込むタイプだ。モノによっては「まぁ欲しい人はチェックアウトしてビルドしてよ」っていう、結構スパルタンなプロジェクト*2である。

ChocoMemopadは「自由なテキストが書けるビューを提供する」だけのプラグイン。コピペしたいと思った時、すでに1つクリップボードにデータを保持していた場合、まぁ一時的データを待避しておく場所など、まぁ何にでも使えるw そんなチョコっとプラグイン

ActivityTrackerは、先日のエントリのようなプラグイン

他は俺が作ったものではないので、どんなプラグインなのか詳しいことはよくわからないw まぁ、使ってみるといいかもしれない。

で、ActivityTrackerとか、更新サイトが欲しいなぁ、と思ったので、ついでにすでにあるプラグインもtrunkの状態を全部更新サイトに載せてしまったw ご自由にどうぞ、とプロジェクトリーダーでもないのに勝手な事を言ってみる。

ついカッとなってやった。後悔はしていない。

Choco Project 更新サイト→ http://svn.sourceforge.jp/svnroot/ykhr-kokko/update/

*1:後日談追記。リーダーがパス忘れてやがるぞww

*2:絶対面倒なだけだろw

Activity Tracker v1.0.1

Eclipseのキー操作を追跡するビューを表示するプラグインApache License v2。

※ 動画は前のエントリと同じです。


ダウンロード

  • jp.xet.eclipse.activitytracker_1.0.1.200909091156.jar 直 (最新)
    • v1.0.0で挙げた不具合を修正。
    • 実は内部でひどいこと*1をしている。今のところそれが原因の不具合は見つけられていないが、Eclipseにとって想定外の処理が行われるので、このバージョンではEclipseが不安定になる可能性も無くはない。まぁ、言うまでもなく自己責任でよろしくメカドック
    • 何かトラブルがあっても、設定を変更するようなことはしていないので、プラグインを外して再起動すれば問題ないハズ。(100%保証はできないが)
    • (追記) SHIFTを押しながら入力するキー(ex. "!")が「SHIFT+!」等と表示される。(v1.0.0では「SHIFT+1」と表示されていた。)
  • jp.xet.eclipse.activitytracker_1.0.0.200909072219.jar 直
    • 初期リリース。
    • スピーディーに入力していると、たまにキーを拾い漏らす。
    • ALT+SHIFT+R が拾えない…。(ALT+SHIFT系全滅?)


id:taichitaichi助言は活かされずorz

*1:リフレクションによるレイプw

Activity Trackerなるものを作った

Eclipseのキー操作って暗黙知化してますよね。ちょっと触っていれば、いくつかの便利なショートカットを覚えてくる。けど、みんなどうやってコーディングしてるんだろう? もっと便利な方法、色々あるんだろうなーって。

だけど、ペアプロでもしない限りこの知識はとても広がりにくい。例えば「CTRL+2, L」「CTRL+2, F」の便利さをブログで伝えようとしても…。文章は長くなるし、説明もしづらい。読む方も読みづらい、難解なのでマジメに読まない。読み手と書き手、お互いに費用対効果が低い。

先日発売になった日経ソフトウエア2009年10月号ではそこを強引にブッちぎって、書きづらいのを覚悟、読みづらいのを承知で、この領域にメスを入れてみました。*1

日経ソフトウエア 2009年 10月号 [雑誌]

日経ソフトウエア 2009年 10月号 [雑誌]


せめて動きを動画で伝えられれば良いのだけど、画面とキー操作を同時に上手く伝える術がない。ということで作ってみたのがこれ。まぁ、Eclipseへのキー入力をビューに表示してくれるって奴です。動画見せたほうが早いかな。動画の後半、右側に置いてあるビューに注目です。(最大化しないとよくわからないと思う)

プレゼンで、デモなんかに使うと分かりやすいのでは、と思いますです、はい。

ダウンロード


まぁ、5クラスしかない簡単なコードなので、だれかレビューしたってください><

*1:やはり読者様からは、分かりづらいというお言葉もいただき…w

お勧めのSyntax Coloring設定

俺、この設定しないと、もうその単語がクラス名なのか変数名なのか分からなくて死にますw

Eclipse:お勧めSyntax Coloring

EnableしてBoldをONにする感じ。デフォルトでdisableなんだけども、実は裏側でColorは設定されている。この色分けも便利。Preview で「InterfaceName」「Color」「Object」がそれぞれ太字になっていて、僅かに色が付いている。

Eclipse+Subversive環境での、複数プロジェクトの扱い

やー、凹んだorz

何が起きたのか

Sabotter 0.0.2リリースの為に、タグ打ったんですよ。
そしたら、その一操作でCodeReposに12回ものコミットが入ったんですよorz
で、IRCで話題沸騰。

一般的な話

Sabotterは、12個の「Eclipseプロジェクト」に分かれています。もう少し詳しく言うと、7つのコンポーネントと、5つのフィーチャープロジェクト*1。そして、その7つのコンポーネントはそれぞれ依存関係があります。

Sabotterの様な複数コンポーネントのプロジェクト群は、repository/trunk 内に、複数のディレクトリを作って、それぞれコミットすると思います。で、チェックアウト時には trunk ディレクトリを指定して、内部のプロジェクトをごっそりチェックアウトしますね。これが一般的な使い方。

  • /repository/
    • trunk/
      • ComponentAProject/
        • .project
      • ComponentBProject/
        • .project
      • ComponentCProject/
        • .project
    • branches/
    • tags/

Eclipseだと何がどうなるのか

Eclipseというのは、起動時に「ワークスペース」という、プロジェクトを配置するディレクトリを指定します。今日のテーマであるEclipseのイケてない仕様の一つに、Eclipseワークスペースディレクトリの直下のディレクトリしか、Eclipseプロジェクトとして扱わない。というか、直下のディレクトリを全てプロジェクトとして扱う。というものがあります。(デフォルトでは。参照 http://d.hatena.ne.jp/taichitaichi/20080711/1215759933

そしてもう一つ。Eclipseはプロジェクトディレクトリ直下の .project ファイル(等)を利用して、このプロジェクトのメタデータを管理(Javaプロジェクトなのか、EclipsePluginプロジェクトなのか、Mavenで管理されているのか否か、等)しています。これらのファイルは、プロジェクト直下でなければ役割を果たしません。

  • /path/to/workspace/
    • ComponentAProject/
      • .project
    • ComponentBProject/
      • .project
    • ComponentCProject/
      • .project

のような状況ですね。

しかし、Eclipse環境だと、trunkディレクトリを指定してチェックアウトを行うと、「trunk」という名前のプロジェクトが1つだけ出来上がり、内部にディレクトリが複数できあがります。

  • /path/to/workspace/
    • trunk/
      • ComponentAProject/
        • .project
      • ComponentBProject/
        • .project
      • ComponentCProject/
        • .project

こうなった場合、まずEclipseは、trunk直下に .project が無い為、適当な .project ファイルを勝手に作成します。(そんな事されても意味ないんですけど…)

次に。trunk/ComponentAProject/ ディレクトリ内には .project ファイルがある訳ですが、これは「プロジェクトディレクトリ直下」では無いので、ガン無視されます。

EclipseJavaプロジェクトなのかどうかさえ判断しないまま(つまりコンパイルも行わず)、ただの「Windowsエクスプローラの様なもの」の挙動をします。IDE使う意味がまったくない状態w

ではどうしようか。というと。trunkをチェックアウトするのではなく、ComponentA〜CProjectを個別にチェックアウトします。そうすると、プロジェクト間の関連性は消えてしまいますが、Eclipseに適した形でチェックアウトすることができます。

これが原因で事件が起きました…

これら12個のコンポーネントは、互いに依存性がある為、現在の状況をまとめてタグ打ちする必要があります。通常であれば、trunkディレクトリを tags/v0.0.2 なんかにコピーする事によって、タグ打ちをします。が、前述の通り、Eclipse上にはtrankディレクトリがありません。そこで俺がやった操作は…。

「該当12プロジェクトを選択状態にして、コンテキストメニューから Team>タグ を選ぶ」

そうすると、通常は1回で済むところが、12回バラバラにコミット(コピー?)が行われてしまいます。うおーー。

ではどうすれば良かったのか。

結論を言えば、Repositoryエクスプローラ*2から、trunkを選択して、New>タグ ですね。

なるほど。別にローカルコピーをコミットしてタグを打つ訳ではないのだから、こちらから操作するのもアリなんだ。これで、やっとアトミックにタグを打つことができます。次からそうします。CodeReposの方々、お騒がせしました><

というのが事の顛末。

しかし、まだ問題は残っていた!

タグ打ちは問題なくなりました。しかし。

コミットする時どうしよう。

前述の通り、各コンポーネントは依存関係にあります。例えば一番コアなコンポーネントのクラス名を変えたとします。そうすると、その下流にあるコンポーネントは全て影響を受け、発信変更状態になります。

これをアトミックにコミットすることができない! やっぱり12回コミットする事になってしまうのか…。

また、依存関係はないものの、新バージョンリリース時には、各プロジェクトのMANIFEST.MF内に記述してあるバージョン表記を変更しなければいけません*3。これはアトミックである必要はありませんが、出来ればアトミックにコミットしたいですよね。

コミットはタグ打ちとは違って、ローカルコピーが必須になるので、SVNリポジトリビューから作業を行うことはできません。

という問題が、未だ解決できていません。どなたかお知恵を…。

*1:EclipsePlugin作者じゃないと意味不明ですが…。

*2:正確には、SVNレポジトリビュー

*3:EclipsePluginを作た経験が無い方には分からないと思いますが、全部個別に記述しなければいけないんです。