こんにちは。CData Software Japan リードエンジニアの杉本です。
最近 JRuby というJVM上で動かすことができる Rubyインタプリタ の Java実装を知りました。
https://www.jruby.org/
以下のWikiでも書かれている通り、JRuby は Javaプラットフォームのクラスを参照して、利用することが可能になっています。面白いですね。
ja.wikipedia.org
include Java
frame = javax.swing.JFrame.new()
frame.getContentPane().add(javax.swing.JLabel.new('Hello, World!'))
frame.setDefaultCloseOperation(javax.swing.JFrame::EXIT_ON_CLOSE)
frame.pack()
frame.set_visible(true)
そこで今回はJRuby から CData JDBC Driver を使って、Salesforceに接続するというのをやってみました。
手順
必要なもの
- JRuby
- CData Salesforce JDBC Driver
- Salesforce アカウント(トライアルの取得方法はこちらを参照)
今回は予めJDKがインストールしてあるWindowsマシンで試しています。
jRuby本体の入手
以下からJRuby本体を入手して、任意のフォルダに展開しました。
https://www.jruby.org/download
環境変数でPathを通して実行できる状態にしておきます。
> jruby -version
> jruby 9.1.17.0 (2.3.3) 2018-04-20 d8b1ff9 OpenJDK 64-Bit Server VM 11.0.1+13 on 11.0.1+13 +jit ```
Salesforce JDBC Driver のインストール
続いて、CData Salesforce JDBC Driver をインストールします。トライアルは以下のURLから入手できます。
https://www.cdata.com/jp/drivers/salesforce/jdbc/
ダウンロード後、exeファイルを実行し、セットアップを進めます。
インストール完了後「C:\Program Files\CData\CData JDBC Driver for Salesforce 2019J\lib」にDriver本体であるjarファイルが生成されます。
JRuby で CData JDBC Driver へアクセスする
まずシンプルなプログラムでアクセスしてみたいと思います。JRubyはJavaのクラスやメソッドをそのまま呼び出せるので、CData JDBC Driverのヘルプに書かれているコードを参考に実装することができます。
http://cdn.cdata.com/help/RFE/jp/jdbc/pg_JDBCqueries.htm
単純にAccount一覧を取得するプログラムを書いてみました。
gist.github.com
実行すると、以下のようにJDBC経由でデータを取得できました。
>jruby -S Sample.rb
0012x000009VGSvAAO GenePoint CDataUpdate
0012x000009VGStAAO United Oil & Gas, UK
0012x000009VGSuAAO United Oil & Gas, Singapore
0012x000009VGSlAAO Edge Communications
0012x000009VGSmAAO Burlington Textiles Corp of America
0012x000009VGSnAAO Pyramid Construction Inc.
0012x000009VGSoAAO Dickenson plc
0012x000009VGSpAAO Grand Hotels & Resorts Ltd
0012x000009VGSrAAO Express Logistics and Transport
0012x000009VGSsAAO University of Arizona
0012x000009VGSqAAO United Oil & Gas Corp.
0012x000009VGSwAAO sForce
システムテーブル参照・プリペアドステートメント・INSERT・UPDATE
JDBC Driverは各種テーブルやカラム情報を取得するためのシステムテーブルや、プリペアドステートメント・INSERT・UPDATEもサポートしています。
ざっといろんな機能を試したソースコードが以下の通りになります。
基本的にはJDBC実行の文法さえおさえておけば、Javaと同様のアプローチで実行できます。
gist.github.com
以下のような結果を得ることができました。問題なくJavaからの実行と同等の機能が得られています。
> jruby -S SampleCodeForSalesforce.rb
関連コンテンツ