FileMaker API for Ruby (ginjo-rfm) を初めて触る人のために
FileMaker API を Ruby を用いて扱える ginjo-rfm を利用するための、ごく基本的な方法を書いていきます。
環境
- Ubuntu 16.04.1 LTS
- ruby 2.3.1p112 (2016-04-26) [x86_64-linux-gnu]
インストール
まずは何はともあれインストールしましょう。gem
で一発です。
# gem install ginjo-rfm
コードを書いていく
そしてコードを書いていくわけですが、README がとても充実していますので、何かわからないことがあったらこちらを参照すればまず問題ないでしょう。以下、書くべきコードを順番に逐一説明していきます。実行する内容は CRUD のうち Read に絞ります。
まずはrequire
なにはともあれrequire
しましょう。
require 'rfm'
接続情報を書く
README には yml に書く方法が載っていますが、とにかくわかりやすさ重視で実行するコード内に直接書いていきましょう。RFM_CONFIG
に以下のように定義します。
RFM_CONFIG = {
:host => 'FileMaker Server のアドレス',
:account_name => 'ユーザ名',
:password => 'ユーザ名に対するパスワード',
:database => 'データベースの名前',
:layout => 'レイアウト名',
:ssl => false # デフォルトが true であるので false の場合は明示する
}
メソッドを実行するためのクラスを作る
Rfm::Base
を継承したクラスを作りましょう。RfmTrial
というクラスを作ります。設定情報は前述に記載した内容で全て埋まっていますので、ただクラスを作成するだけでよいです。README ではこの定義中でレイアウトを指定したりしてますね。
class RfmTrial < Rfm::Base
end
メソッドを実行して結果を得る
README にもあるように、オリジナルの Rfm に実装されているメソッドをそのまま実行することができます。ただし、一部のメソッドの挙動は ginjo-rfm では少しだけ変更されています。詳しくは以下のドキュメントを参考にしてください。
さて、ここではfind
メソッドを用いて検索(Read)をしましょう。以下のように書くだけです。検索の記法は FileMaker のそれと同じ記法です。結果の表示もしてしまいます。
records = RfmTrial.find(:対象フィールド => "==apple")
puts records
records
は配列で返ってきますので、結果を個別に処理したい場合はeach
してやれば良いと思います。
エラー処理
ginjo-rfm のエラー処理は PHP 系のライブラリとはやや異なります。これまた README にそのまま書いてありますので引用します。
Finally, if filemaker returns an error when executing any of these methods, an error will be raised in your Ruby script. There is one exception to this, though. If a find results in no records being found (FileMaker error # 401) I just ignore it and return you a Resultset with zero records in it. If you prefer an error in this case, add :raise_on_401 => true to the options you pass the Rfm::Server when you create it.
具体例
それではここまでの手順を具体例にあてはめましょう。
利用するデータベース
まずは具体例に利用するデータベースが必要です。以下のようにStaff
というデータベースのStaffData
レイアウト内のstaff_data
というテーブルを用います。
以下の5つのカラムが定義されているのが分かります。
id
name
gender
work
point
このテーブルに対して 7 つのデータが投入されています。
コードを書く
これまでに書いた内容をまとめて、以下のような検索条件で検索をしてみましょう。
gender
がfemale
であるレコード
以下がコードと実行結果になります。
require 'rfm'
RFM_CONFIG = {
:host => 'FileMaker Server のアドレス',
:account_name => 'ユーザ名',
:password => 'ユーザ名に対するパスワード',
:database => 'Staff',
:layout => 'StaffData',
:ssl => false
}
class RfmTrial < Rfm::Base
end
records = RfmTrial.find(:gender => "==female")
puts "#{records.length} 件ヒットしました!\n\n"
puts "ヒットした方のお名前は以下のとおりです"
records.each do |record|
puts record["name"]
end
3 件ヒットしました!
ヒットした方のお名前は以下のとおりです
higashino
ishikawa
kawano
注意点
FileMaker 上で""
で定義されている値の返り値は、empty
ではなくnil
になりますので注意です。
まとめ
以上、ginjo-rfm のごくごく簡単な使い方です。README やドキュメントを見れば分かるように、便利なメソッドや記述を簡潔にする手法が数多く存在します。FileMaker API for PHP や FX.php と比べてコードの見通しが良くて記述量が少ないのが Ruby っぽいですね1。
-
まあ ginjo-rfm の実装によるところも大きいですが ↩