Skip to main content

拡張機能の作成

はじめに

OpenRefine 拡張の構造を手短に紹介します。詳細な手順は以下の資料を参照してください。

OpenRefine は改良版 Butterfly フレームワーク を利用して拡張を提供しています。拡張は Butterfly のモジュールとして実装し、設定で参照します。

コアに同梱の拡張は extensions/ 配下にありますが、自作拡張は任意の場所に置けます。以下のいずれかでパスを指定してください。

  • main/webapp/WEB-INF/butterfly.propertiesbutterfly.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.jsinit() を実装し、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 起動時にモジュールが読み込まれます。

サンプル拡張の利用

  1. リポジトリを clone
  2. サンプル拡張を extensions/ にコピー
  3. cd sample-extension && mvn package
  4. OpenRefine を起動し、新メニューを確認

リモート API エンドポイント

多くの UI は OpenRefine の JSON API を叩きます。module.propertiesendpoints でエンドポイントを追加し、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_TOKENWRITE 権限が必要です。

外部リファレンス