7
5

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.

filemaker-ruby のご紹介

Last updated at Posted at 2017-12-12

filemaker-ruby

FileMaker の API を利用する方法については昨年の Advent Calendar でも書き散らしましたが1、いくつかの方法があります。メンテナンスの現状やそれを利用する言語などを検討すると、2017年ならば filemaker-ruby を使うのがモダンかと思います。

mech/filemaker-ruby: A Ruby wrapper to FileMaker XML API

この filemaker-ruby は、FileMaker の API のうち、XML方式 の API を Ruby でラップしたものです。

使い方

使い方は README に網羅されていますが、実際のコードを見たほうが早いと思います。ここでは単純に「レコードを検索する」コード例を紹介します。

使うための準備

コード例を見る前に、とにもかくにもまずは filemaker-ruby をインストールしておかなければいけません。

$ gem install filemaker

分割したコード例(レコードの検索を例に)

コード例はいくつかに分割して掲載します。そして最後にそれらをつなぎあわせます。

1. filemaker-ruby を require する

まず filemaker-ruby を require しないと始まりません。

require 'filemaker'

2. FileMaker Server に接続するための基本設定を行う

FileMaker Server への接続情報を以下のようにして定義しましょう。fm_serverの中に接続情報が詰め込まれています。

fm_server = Filemaker::Server.new do |config|
  config.host         = '10.10.10.100'
  config.account_name = 'your_account_name'
  config.password     = 'your_password'
  config.ssl          = { verify: false } # SSLを用いる場合はtrueを指定します
end

3. 「データベース名」と「レイアウト名」を指定する(準備をする)

後ほど「データベース名」と「レイアウト名」を使用する場面が出てきますので、ここでそれらを変数に押し込めておきます。

db_name = '顧客データ'
layout_name = '性別一覧'

4. レコードを検索する

ここまでできたならばレコードを検索することは簡単です。以下のようなメソッドを実行するとレコードの検索ができます。

results = fm_server.database[db_name].layout[layout_name].query('性別': ['男'])

上記の例では、以下の順に頭からメソッドチェーンをしています。

  • FileMaker Server の定義
  • データベース名を database[データベース名] で定義
  • レイアウト名を layout[レイアウト名] で定義
  • query メソッドで検索条件を定義

したがってこの例では以下のような条件で検索をしていることになります。

  • 10.10.10.100 にある FileMaker Server に
  • ユーザー名は your_account_name
  • パスワードは your_password
  • 上記のユーザー名とパスワードで接続し
  • 顧客データ というデータベースの
  • 性別一覧 というレイアウトにおいて
  • 性別 というフィールドが
  • であるレコードを
  • 検索する

そして上記の結果は results に格納されます。レコードは複数個ヒットする可能性があります。

結合したコード例(レコードの検索を例に)

前項のコードを結合すると以下のようになります。このコードのファイル名を fm_ruby_practice.rb としましょう。

fm_ruby_practice.rb
require 'filemaker'

fm_server = Filemaker::Server.new do |config|
  config.host         = '10.10.10.100'
  config.account_name = 'your_account_name'
  config.password     = 'your_password'
end

db_name = '顧客データ'
layout_name = '性別一覧'

results = fm_server.database[db_name].layout[layout_name].query('性別': ["男"])

あとはこれを実行するだけです。

$ ruby fm_ruby_practice.rb

これで results に検索結果が格納されました!2

検索結果を取り扱うために

一つの記事に多くを詰め込み過ぎると読む気が無くなると思います3ので、検索結果をどう取り扱うか、についてはこの記事では省略します4

注意することは、上記例の results には複数のレコードが格納されていることです5。個別のレコードを扱う場合には、results を「バラして」から6扱う必要があります。

「バラした」あとのレコード7からフィールドの値を取り出す方法は、例えば、「バラした」レコードが result という変数に格納されているとすると、result.性別 というメソッドによって「性別」フィールドの値が返ってきます8

  1. 一人で大暴れしてすいませんでした……

  2. 出力まわりのコードは書いていないため、見た目にはただ実行しただけとなります

  3. と思っています

  4. 後日書くかもしれません

  5. Filemaker::Resultset クラスのオブジェクト

  6. Filemaker::Record クラス のオブジェクトにする

  7. Filemaker::Record クラス のオブジェクト

  8. 日本語をメソッドの名前としてそのまま使えてしまう

7
5
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
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?