拡張機能の作成
はじめに
OpenRefine 拡張の構造を手短に紹介します。詳細な手順は以下の資料を参照してください。
- Giuliano Tortoreto による OpenRefine 拡張ビルド手順
- Owen Stephens による GREL 関数を追加する拡張ガイド
OpenRefine は改良版 Butterfly フレームワーク を利用して拡張を提供しています。拡張は Butterfly のモジュールとして実装し、設定で参照します。
コアに同梱の拡張は extensions/ 配下にありますが、自作拡張は任意の場所に置けます。以下のいずれかでパスを指定してください。
main/webapp/WEB-INF/butterfly.propertiesのbutterfly.modules.pathにディレクトリを追加- OpenRefine 起動時に
-Dbutterfly.modules.path=modules,../../extensions,/path/to/extを指定(プロパティを上書きするため既定値も含める)
依存ライブラリは各自で同梱し、OpenRefine のパッケージ変更に左右されないようにしてください。
ディレクトリ構成
pom.xml
src/... Java ソース
module/
*.html, *.vt
scripts/*.js
styles/*.css
images/**
MOD-INF/
lib/*.jar
classes/**
module.properties
controller.js
module.properties(例)にはメタデータを記述します。
name = my-extension-name
requires = core
module/ 以下のリソースは http://127.0.0.1:3333/extension/my-extension-name/ から参照されます。controller.js に init() を実装し、OpenRefine へのフック登録を行います(サンプル)。
pom.xml は Maven ビルド定義で、Java コードと依存ライブラリを module/MOD-INF/lib に出力します。OpenRefine の Java クラスを参照するため、Maven で適切に依存を追加してください。
サンプル拡張
サンプル拡張 を複製して開始できます。module/MOD-INF/controller.js 内の名称を変更してください。
基本構成
sample-extension/
pom.xml
src/main/java/com/google/refine/sampleExtension/**
module/
MOD-INF/module.properties
MOD-INF/controller.js
...
controller.js は以下のように記述します。
function init() {
Refine.actionAreas.push({
id: 'gdata',
label: 'Google Data',
uiClass: GDataExtension.CreateProjectUI
});
}
OpenRefine 起動時にモジュールが読み込まれます。
サンプル拡張の利用
- リポジトリを clone
- サンプル拡張を
extensions/にコピー cd sample-extension && mvn package- OpenRefine を起動し、新メニューを確認
リモート API エンドポイント
多くの UI は OpenRefine の JSON API を叩きます。module.properties の endpoints でエンドポイントを追加し、controller.js でルーティングします。
endpoints = extension
module.exports = {
init() {},
process(req, res) {
if (req.path === '/extension/my-extension-name/do-something') {
// 処理
}
}
};
GitHub Action で CI とリリース
サンプル拡張には Maven テストを実行する workflow と、タグ作成で GitHub Release を生成する workflow が含まれています。GITHUB_TOKEN に WRITE 権限が必要です。