LoginSignup
16
9

More than 3 years have passed since last update.

embulk 0.9.0 で embulk gem がリリースされなくなった件について

Last updated at Posted at 2019-03-03

embulk >= 0.9.0 から embulk gem が個別にリリースされなくなりました

では、jruby プラグインから Embulk なライブラリを使うにはどうすれば良いかというと、embulk.jar に同梱されている embulk gem を使う形になります。

これによってどういう影響があるかというと、主には以下の2つに影響が出ているので、それについて記載します。

  • embulk run -b
  • jruby プラグインのテストの書き方

embulk run -b /path/to/Gemfile

embulk >= 0.9 で embulk run -b を使いたい場合は、Gemfile に

Gemfile
gem 'embulk'

を書いておく必要があります。embulk < 0.9.0 では必要ありませんでした。

bundler は Gemfile.lock に書かれているものだけをロード対象にするので、gem 'embulk' を書いておかないと、embulk.jar に同梱されている embulk.gem でも無視されてしまいます。0.8.x 以前で書かなくて良かったのは、embulk 側でごにょごにょしてくれていたから(という認識)ですが、それは行わなくなったので、ユーザ側でケアする必要があります。

Gemfile.lock を作る際には、embulk.jar に同梱されている embulk gem を指定したいので、最終的に使いたい embulk と手元の embulk のバージョンを合わせて

$ embulk bundle update

として Gemfile.lock を作る必要があります。Gemfile.lock を覗いて、

    embulk (0.9.15-java)
      bundler (>= 1.10.6)
      liquid (~> 4.0.0)
      msgpack (~> 1.1.0)

のように embulk --version と同じバージョンの embulk gem が記載されていればOKです。

$ embulk run -b /path/to/Gemfile ...

のように -b オプションを指定して実行すれば Gemfile を指定して embulk を実行できます。

jruby プラグインの単体テストを流す

embulk は embulk bundle exec の利用をサポートしていないので、bundle exec rake test でテストを実行できるようにするには手間が必要です。

embulk を .jar 拡張子付きでダウンロードしておきます。(.jar がついてないと jruby から require できません)

$ curl -o embulk.jar --create-dirs -L "http://dl.embulk.org/embulk-0.9.15.jar"
$ chmod a+x ./embulk.jar

Gemfile.lock を作る際には、embulk.jar に同梱されている embulk gem を指定したいので ./embulk.jar bundle で依存 gem をインストールします。

$ ./embulk.jar bundle install --path vendor/bundle

embulk.jar に同梱されている jruby と bundler のバージョンを調べておきます。 See also embulk 同梱の jruby のバージョンを調べる

$ echo JRUBY_VERSION | ./embulk.jar irb
2019-08-10 00:59:11.866 +0900: Embulk v0.9.17
Switch to inspect mode.
JRUBY_VERSION
"9.1.15.0"
$ echo "require 'bundler'; Bundler::VERSION" | ./embulk.jar irb
2019-08-10 01:59:10.460 +0900: Embulk v0.9.17
Switch to inspect mode.
require 'bundler'; Bundler::VERSION
"1.17.3"

同じバージョンの jruby を rbenv なりを使ってインストールします。bundler もインストールします。embulk は embulk bundle exec の利用をサポートしていないので、bundle exec 実行できるように同じバージョンの jruby と bundler をインストールして誤魔化そうという作戦です。

$ rbenv install jruby-9.1.15.0
$ rbenv local jruby-9.1.15.0
$ gem install bundler -v 1.17.3

bundle exec で実行する際には、bundler が Gemfile の gem をロードする前に、embulk.jar を require する必要があります。これは RUBYOPT 環境変数ないし、ruby の -r オプションを利用して実現できます。

さらに以前はテストを書く時に使っていた Embulk.setup が embulk gem >= 0.9.0 では消去されたので、代わりに embulk/java/bootstrap を require します。

こんなかんじになると思います。

$ bundle exec ruby -r ./embulk.jar -r embulk -r embulk/java/bootstrap -e "puts Embulk"
$ bundle exec env RUBYOPT="-r ./embulk.jar -r embulk -r embulk/java/bootstrap" rake test

embulk-output-bigquery で実際にやっている設定はこちらpull/88 です。

16
9
0

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
16
9