2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

FileMakerAdvent Calendar 2016

Day 12

FileMaker API for Ruby (ginjo-rfm) を初めて触る人のために

Last updated at Posted at 2016-12-11

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しましょう。

rfm_first_trial.rb
require 'rfm'

接続情報を書く

README には yml に書く方法が載っていますが、とにかくわかりやすさ重視で実行するコード内に直接書いていきましょう。RFM_CONFIGに以下のように定義します。

rfm_first_trial.rb
RFM_CONFIG = {
  :host          => 'FileMaker Server のアドレス',
  :account_name  => 'ユーザ名',
  :password      => 'ユーザ名に対するパスワード',
  :database      => 'データベースの名前',
  :layout        => 'レイアウト名',
  :ssl           => false # デフォルトが true であるので false の場合は明示する
}

メソッドを実行するためのクラスを作る

Rfm::Baseを継承したクラスを作りましょう。RfmTrialというクラスを作ります。設定情報は前述に記載した内容で全て埋まっていますので、ただクラスを作成するだけでよいです。README ではこの定義中でレイアウトを指定したりしてますね。

rfm_first_trial.rb
class RfmTrial < Rfm::Base
end

メソッドを実行して結果を得る

README にもあるように、オリジナルの Rfm に実装されているメソッドをそのまま実行することができます。ただし、一部のメソッドの挙動は ginjo-rfm では少しだけ変更されています。詳しくは以下のドキュメントを参考にしてください。

さて、ここではfindメソッドを用いて検索(Read)をしましょう。以下のように書くだけです。検索の記法は FileMaker のそれと同じ記法です。結果の表示もしてしまいます。

rfm_first_trial.rb
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というテーブルを用います。

fm_Qiita_02.png

fm_Qiita_03.png

以下の5つのカラムが定義されているのが分かります。

  • id
  • name
  • gender
  • work
  • point

このテーブルに対して 7 つのデータが投入されています。

コードを書く

これまでに書いた内容をまとめて、以下のような検索条件で検索をしてみましょう。

genderfemaleであるレコード

以下がコードと実行結果になります。

rfm_first_trial.rb
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

  1. まあ ginjo-rfm の実装によるところも大きいですが

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?