LoginSignup
10
11

More than 5 years have passed since last update.

embulkのjava pluginをbundlerっぽくgithubからインストールして実行できるラッパーを作った

Last updated at Posted at 2016-02-14

2016/2/29 追記
こっちの方法の方が安定するかも。 embulk bundleだけでJavaで書かれたプラグインをインストールし利用する方法 - Qiita


今週末の成果として、タイトル通りの機能を持ったembulk_javundlerというgemを作りました。

モチベーションとしては、javaのプラグインで開発中だったりgemとしてリリースするまでもないプライベートなプラグインをgitのリポジトリから直接インストールして使いたかったからです。
普通にjrubyのgemとして作成されているプラグインはembulk自体が持つbundle機能でインストールできるんですが、javaのプラグインはbundlerでは検知できないので、こういう仕組みが必要でした。

めっちゃ雜に作ったので、細かい挙動は何かおかしいかもしれません。名前もちょっと適当感があるw

仕組みは単純で、DSLを記述したファイルから情報を読み込んで、git cloneしてから./gradlew gemやってコンパイルするだけです。
そしてembulkコマンド実行時に、インストール先のディレクトリ情報からlibpathを自動でコマンドに付与します。

Embulkfileというファイルを作って以下の様に記述します。

java_plugin "embulk-input-jdbc", github: "joker1007/embulk-input-jdbc", commit: "support-json-type", libdir: "embulk-input-postgresql/lib"
java_plugin "embulk-output-bigquery", github: "embulk/embulk-output-bigquery"

これはRubyのDSLになってます。
libdirを指定することで、embulk-input-jdbcの様にサブプロジェクトを持つタイプのプラグインにも対応できます。

後は、bundlerっぽくコマンドを実行します。

$ embulk_javundler install --path .embulk_plugins
$ embulk_javundler guess base.yml -o config.yml
$ embulk_javundler preview config.yml
$ embulk_javundler run config.yml

runじゃなくてexecになってるのは、CLIを作るライブラリとして利用したthorでrunが予約語になってて泣いたからです……。

追記: コメントで回避方法を教えてもらったのでrunで実行できるようにしました。違ってるとややこしいし。

インストール後にはEmbulkfile.lockというファイルを生成し、同じコミットを利用する様になってるはずですが、細かく動作検証してないのでバグってるかもしれない。

Embulkfileという名前とかコマンド名とかコマンドインターフェースは深く考えてないので、将来的に変える可能性もあります。

10
11
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
11