tl;dr
たまたま aws-sdk-ruby に含まれている .travis.yml を見ていたら, 以下のように JRuby 環境でもテストを行っているようなので, 手元の環境でも JRuby 環境下で aws-sdk-ruby を試してみたメモ.
... 略 ... rvm: - 1.9.3 - 2.0.0 - 2.1 - 2.2 - 2.3 - 2.4 - 2.5 - jruby-9.1.16.0 ... 略 ...
特にギョームで JRuby を使う予定は無い為, 本当にあくまでも興味本位として動かしてみた系のお話. 特に深堀はせずにとりあえず動いていることが確認出来れば OK という感じで進める.
尚, お試しの環境は以下の通り.
$ java -version openjdk version "1.8.0_171" OpenJDK Runtime Environment (build 1.8.0_171-8u171-b11-0ubuntu0.16.04.1-b11) OpenJDK 64-Bit Server VM (build 25.171-b11, mixed mode) $ jruby --version jruby 9.2.0.0 (2.5.0) 2018-05-24 81156a8 OpenJDK 64-Bit Server VM 25.171-b11 on 1.8.0_171-8u171-b11-0ubuntu0.16.04.1-b11 +jit [linux-x86_64]
JRuby の導入
導入方法は幾つかあるが, 今回は rbenv を使って導入した.
$ rbenv install jruby-9.2.0.0
$ rbenv local jruby-9.2.0.0
これだけ.
aws-sdk-ruby の導入
$ jruby -S gem install aws-sdk-s3 --no-ri --no-rdoc -V
これだけ. 画面への出力については, 特に CRuby との違いはなく, 何の問題もなくインストールが完了する.
ちなみに, -S
オプションは以下の通り.
-S look for the script in bin or using PATH environment variable
サンプル
aws-sdk-s3 を使って, S3 バケットの一覧を取得するサンプルを以下のように作成する.
require 'aws-sdk-s3' s3 = Aws::S3::Client.new( region:'ap-northeast-1', profile:'default', ) p s3.list_buckets.buckets.map(&:name)
これを sample.rb というファイル名で保存して, 以下のように実行する.
$ jruby sample.rb
まず JVM が起動する為, CRuby で実行するよりも実行時間を要するが, 以下のように無事にバケットの一覧を取得出来た.
$ jruby sample.rb ["sample1", "sample2", "sample3"]
おおー, いい感じ.
awspec は動くのか
せっかくなので
awspec が JRuby 上で動作するのか試してみたい. 尚, あくまでもお試しである為, 完全に動作を保証するものではない. ご注意下さいまし.
awspec の導入
先ほどの aws-sdk-s3 導入と同様に, 以下のように awspec を導入する.
$ jruby -S gem install awspec --no-ri --no-rdoc -V
特に問題無くインストールが完了した.
awspec init
awspec に必要なディレクトリ等を作成する.
$ jruby -S awspec init
以下のように出力され, 必要なディレクトリ等が作成される. やはり, CRuby で実行するよりも時間はかかる.
$ jruby -S awspec init + spec/ + spec/spec_helper.rb + Rakefile + spec/.gitignore + .rspec
テストを実行する
以下のような spec を書いた. S3 バケットが存在しているかどうかをテストする.
require 'spec_helper' describe s3_bucket('my-bucket') do it { should exist } end
以下のようにテストを実行する.
$ jruby -S rspec spec
以下のように出力されて, テストが動いていることを確認出来た.
# 存在しないバケットでテスト $ jruby -S rspec spec s3_bucket 'my-bucket' should exist (FAILED - 1) Failures: 1) s3_bucket 'my-bucket' should exist Failure/Error: it { should exist } expected s3_bucket 'my-bucket' to exist # ./spec/s3_spec.rb:4:in `block in (root)' Finished in 2.3 seconds (files took 10.68 seconds to load) 1 example, 1 failure Failed examples: rspec ./spec/s3_spec.rb:4 # s3_bucket 'my-bucket' should exist # 存在しているバケットでテスト $ jruby -S rspec spec s3_bucket 'sample1' should exist Finished in 2.11 seconds (files took 10.69 seconds to load) 1 example, 0 failures
いい感じですな.
注意
以下の issue に言及されている通り, awspec は JRuby 上での動作は正式にはサポートされていない.
また, JVM の起動の遅さに引きづられてしまい, 簡単なテストでも 10 秒くらい掛かってしまうので, 現時点では実用的ではないと思われる.
以上
興味本位で試してみた系でした. JRuby だからって, あんまり構える必要は無いんだなって思った.