2014年7月25日金曜日

OmegaT スクリプト開発に便利な IntelliJ IDEA の設定

OmegaT にはスクリプト機能があります(3.0.3 からプラグインを本体に統合)。
スクリプトを開発するときは、もちろん好きなテキストエディタで書いてもいいのですが、ちょっと長くなってくると、やはり IDE じゃないといろいろ辛くなってきます。

他の人はどうやってるのか興味があるのですが、とりあえず自分のやり方を晒してみます。

IntelliJ IDEA

使うのは、IntelliJ IDEA です。


スクリプト言語は Groovy です。

当初 NetBeans を試したのですが、Groovy 用のインスペクションが期待したよりも貧弱で、型宣言のない変数になるとあっという間に入力補完が効かなくなり、あまり IDE を使う恩恵を感じられませんでした(ただし NetBeans に詳しいわけではないので、何か適切な設定方法があるのかも)。

IntelliJ IDEA はコマーシャル製品ですが、オープンソース版である Community Edition は無償で使えます。当然、両者にはユーザーサポート以外にも製品自体の機能差があるのですが、幸運なことに Groovy は Community Edition でもサポートされているため、OmegaT のスクリプト開発用途であれば、Community Edition でもまったく問題ありません。

ライブラリ

インストールはインストーラー任せなので、割愛。
まず、OmegaT スクリプト開発用の IDEA プロジェクトを作成します。
次に、[File]-[Project structure] から依存ライブラリを設定します。


OmegaT 自体(omegat.jar)はもちろんですが、もしスクリプト中で使用するライブラリが他にあるなら、それも参照しておきます。
上図では、SVNKit も参照させています。
ちなみに、JAR だけでなく、ソースコードの場所も設定したかったのですが、やり方がよく分かりませんでした。分かりました。JAR の追加時とまったく同じように、ソースコードの場所を追加するだけでした。JAR とソースコードの関連は、IDEA 側が自動認識するようです。

GroovyDSL スクリプト(GDSL)

OmegaT スクリプトでは何もしなくても、既定でいくつかのインスタンスを参照できるようになっています。たとえば、いきなり「editor」と書くと、もうそれだけで編集ウィンドウにアクセスできるようになっています。便利ですね。
しかし、これができるのは本番環境でスクリプトを実行したときの話です。開発環境で「editor」や「console」、「project」などと書いても、IDE には何のことだか分かりません。何のことだか分からないと、当然、入力補完もしてくれません。入力補完してくれないだけならまだしも、IntelliJ IDEA は割りと面倒見のいい人らしく、そういう正体不明の変数のメソッドやらプロパティを使うと、「何デスカコレハ?」的な警告(下線)が表示されてしまいます。


それでは悲しいので、GroovyDSL スクリプトを作成します。
GroovyDSL スクリプトでは、コンテキストに応じてメソッドやプロパティを定義することができます。言い換えるなら、GroovyDSL スクリプトを使うことで、「editor」が何を指しているのか IntelliJ IDEA にも分かるようになります。これ重要。
詳しくは、下記を参照してください(丸投げ万歳)。

GroovyDSL と IntelliJ IDEA - 倭マン's BLOG

実際に自分が使っている GDSL は、こんな感じです。
/**
 * Created by Yu-Tang on 2014/07/22.
 */

// Create context for Groovy script files which names end with groovy.
def ctxOmegaT = context(filetypes: ['groovy'], scope: scriptScope())

contributor(ctxOmegaT) {
    property name: 'console',    type: 'org.omegat.gui.scripting.ScriptLogger'
    property name: 'mainWindow', type: 'org.omegat.gui.main.IMainWindow'
    property name: 'glossary',   type: 'org.omegat.gui.glossary.GlossaryTextArea'
    property name: 'editor',     type: 'org.omegat.gui.editor.IEditor'
    property name: 'project',    type: 'org.omegat.core.data.IProject'
    property name: 'res',        type: 'java.util.ResourceBundle'
    property name: 'binding',    type: 'groovy.lang.Binding'
    property name: 'eventType',  type: 'org.omegat.core.events.IProjectEventListener.PROJECT_CHANGE_TYPE'
}

見よう見まねで作ったので、なんか変なことやってる可能性もありますが、とりあえず動いているようなので、気にしない。

コーディング

この状態で新しいスクリプトを書き始めると、以下のように快適に入力補完や構文チェックしてくれます。


「editor」と書いてドットを打つと、ちゃんとメンバーが表示されますよ! 便利!
以上。

まとめ

OmegaT のスクリプトを書いている人は現状ではまだまだ少ないと思いますが、スクリプト自体の公開ではなく、スクリプトを書くためのノウハウを公開している人になると、壊滅的に少ないです。
情報が少ないこと自体が、これから始めようとする人のハードルになってしまうので、お得情報をご存知の方は、どんどん公開しよう!

余談

IDEA って、「アイディア」って読むのね。でも IDEON は「イデオン」じゃん。ねえ…。

0 件のコメント:

コメントを投稿