FileMaker ProとRubyを接続してみた。
最近FileMaker Pro(以下FM)というDBを利用する機会があったのですが、このFMのスクリプトがどうしても好きになれず、rubyでスクリプトが書けないか模索してみました。
(好きになれない理由: FMではスクリプトを作成するために、本来のテーブル構造には不要なテーブルオカレンスやらフィールドを追加しなければならず、構造が汚れるのが嫌。簡潔から遠のく感じがします。)
結論
先に結論を書くと、ODBCによる接続はあきらめました。
色々なサイトを参考(※1)にして、FileMaker〜iODBC間の接続は行えたのですが、ruby-odbc〜iODBC間でSQLを発行すると、select文でsegmentation faultが発生することがあり、これがどうしても解決できずあきらめました。(どうやらruby-odbcはruby1.9.1 (32bit)までしか対応していない?)
※1 参考にしたサイト
で、接続できた環境は以下の通りです。 rubyとJDBCって接続できる環境ない?って思ったのが解決のきっかけでした。
・・・rubyはあきらめて、Javaのruby実装であるjRubyで接続する事にしました。 今までjRubyの使い道ってどこにあるんだろうと思っていましたが、こんなところで使うことになるとは思いませんでした。
余談ですが、FileMaker Serverと接続する場合には、もっと良さそうなRfmというgemが存在するので、そちらを使った方が良いと思います。
手順
具体的な導入手順です。
1: jRubyをインストールする.
http://jruby.orgより、jRubyの最新版(バイナリ版)を任意のフォルダにダウンロードします。
以下は一例
# jRuby を /usr/local/jRuby-1.7.10 に保存したとします。 cd /usr/local ln -s jRuby-1.7.10 jRuby_current_version # symbolic linkを設定します。
2: PATHを設定します。
vim ~/.bash_profile # ログインシェルがbashの例 PATH="$PATH":/usr/local/jruby_crrent_version/bin/ #適当な行に追加する.
3: JDKが入っていない場合は、JDKをインストールします。
ダウンロード先 Java SDK Downloads
4: jdbc-helperをインストールします。
参考 jdbc-helper
jRuby -S gem install jdbc-helper
5: FileMakerのJDBCドライバをインストールします。
FileMakerのインストーラより、fmjdbc.jarを任意のフォルダにコピーします。
コピー先の例 ~/Library/JDBC/fmjdbc.jar
6: classpathの追加
vim ~/.bash_profile # ログインシェルがbashの例 export CLASSPATH=$CLASSPATH:~/Library/JDBC/fmjdbc.jar
テスト
FileMaker側
1: FileMaker Proでテストをするファイルを開きます。仮に"test.fmp12"とします。
2: ファイル 共有設定で[ODBC/JDBCを有効にする]を選択します。
3: ODBC/JDBC共有をONにして、ファイルのアクセスを[すべてのユーザ]にします。 (必要に応じて制限します)
4: ファイルオプションの[開く]タブにてアカウント名とパスワードを指定します。 (無指定だとJDBCから接続できなかったので、念のため指定します)
注意:接続する際は、test.fmp12は開きっぱなしの必要があります。
ソース
1: test.rb
テストソースを、テスト環境に合わせて作成します。
require 'jdbc-helper' con = JDBCHelper::FileMaker.connect('localhost', 'testuser', 'password', 'test') sql = 'SELECT id, name, "点数" FROM "テスト"' con.query(sql) do |row| id, name, score = row puts "#{id} #{name} #{score}" end con.close
2: 実行
jruby test.rb
以上です。