2015年2月25日水曜日

FileMakerでデータの入力ログを記録してみるPart2~決まったフィールドだけ監視~

データの入力ログ(履歴)を記録してみる

FileMakerでデータの入力ログを記録してみるでは、テーブルの全フィールドに対して変更がされた場合のログを記録しましたが、この方法では、スクリプトなどで書き込まれた値は反映されません。

しかし、テーブルに内に20や30のフィールドがあってもログとしての変更履歴を残したいのはそれほど多くない場合もあるかもしれません。そんな場合の方法の一つです。

この場合は、スクリプトや全置換によって変更されたデータ内容も記録されます。

基本的には方法はFileMakerでデータの入力ログを記録してみると変わりありません。

方法

履歴を記録したいフィールド1つに対して、1つ記録用のフィールドを用意します。

記録用のフィールドに対して下記の計算式を設定します。
※logA はfieldAの履歴保存用のフィールドです。

logA & Get ( タイムスタンプ ) & " | "  & fieldA  & "¶"


無駄な改行が気になる場合

上記の方法では最初に改行が必ず入ります。入らないようにしたい場合はこのようにすると入らずにできます。

Let([
$count = Case (ValueCount(logA)=0 ; 1 ; 0)];
Replace ( logA & "¶" & Get ( タイムスタンプ ) & " | "  & fieldA    ; 1 ; $count ; "" )
)

ちなみに、履歴は末尾に足されていきます。

最新の履歴を上にする場合

最新の履歴を履歴の上に(降順)にする場合は下記のようにします。

Get ( タイムスタンプ ) & " | "  & fieldA  & "¶" &  logA

また、この場合終わりの改行が入りますので、気になる場合は消す必要があります。

下記のようにすればきれいになります。

Let([
 $log = Get ( タイムスタンプ ) & " | "  & fieldA  & "¶" &  logA コピー ;
 $length = Length($log);
 $m = Case ( ValueCount($log) = 1 ; 1 ; 0)
];
 Left ( $log ; $length - $m)
)

2015年2月19日木曜日

Webサイトから情報を取得して、一部(価格など)をFileMaker Pro(ファイルメーカー)に取り込む(価格.com)

価格.comからある商品の最安価格を取得


ネットショップなどを運営されていたり、そうではなくてもただ、ネットショップの最安価格を頻繁に知りたいときってありますよね。

FileMaker Proを使って価格比較サイト「価格.com」から最安価格の情報を取得して、フィールドに表示してみる方法です。

最低限必要なフィールド

・価格を格納する
・URLを格納する
・HTMLソースを格納する

この3つのフィールドが必要となるでしょうか。

流れ

URLから挿入スクリプトステップで「ソース」フィールドにソースを挿入
ソースから最安価格の入っている部分の文字位置を取得(Position関数)
価格部分を抜き出す(Middle関数)


※基本的な手順はFileMaker Proでメールを受信してみるで扱ったのとあまり変わりありません。

どこに最安価格が書いてるか?


上の画像が商品のページで、このページから情報を取得します。人間が見ればすぐに最安価格が目に入ってきますが、ソース上でどれがそれにあたるかを見なければなりません。

トラブル?

URLから挿入で、ソースを取得すると日本語が文字化け・・・文字コードの関係なのでしょうか。

文字化けがなければ、ヘッダ部分に情報があるのでそれを取得できたのですが・・・

先頭文字位置

最安価格はソースのいろいろなところにありましたが、「kakakuItemviewPrice」という部分が分かりやすいので、この部分から取得できます。これの文字位置を取得し、さらにkakakuItemviewPriceの文字数分を足すと、純粋な数字で価格の先頭文字位置になります。

※実際には「kakakuItemviewPrice = '」が検索文字になります。

文字数を取得

文字数(価格の桁数)を調べるには先ほど調べた先頭文字位置をスタートとして次に「'」が出てくるところまでになります。
これは 「Position ( ソース ; "'" ; 先ほどの先頭文字位置 ; 1 )」で分かります。

計算式

Let([
 $start = Position ( ソース ; "var kakakuItemviewPrice = '" ; 1 ; 1 ) + 27;
 $end = Position ( ソース ; "'" ; $start ; 1 )
];

Middle ( ソース ; $start ; $end - $start )
)

これを価格のフィールドに設定すると最安価格を取得することができます。

2015年2月10日火曜日

FileMaker(ファイルメーカー)とデータモデリング~FileMakerの使い方を覚えるくらい重要なこと~

FileMakerはシステム開発


「なんだこれ! だれが作ったんだ」

私が初心者の時に作ったソリューションは今でも動いているものもありますが、
FileMaker11のものだったので、いっそのこと作り変えてしまおうと思い、構造を分析し始めたときに思わずPCのモニターに向かって叫んだ言葉です。

見るに堪えないし、ほかの人には見せられない。

同じような経験は他の方にもあるのではないかと思います。

FileMaker Proの使い方以前に、何でこういう構造にしたのか理解できないということが多くありました。

「ファイルメーカーの使い方だけを覚えても、業務に役立つシステムは作れない」ということを身に染み、データモデリングについて勉強が必要だということを感じました。

FileMakerトレーニングシリーズ(training series)では「データモデリング」というセクションがあり、
データベースの設計について書かれています。

わざわざひとつのセクション丸ごと扱うということは、重要だということでしょう。

私もそうでしたが、とにかくExcelや紙はやめたいという思いが強く、そんな小難しいことを勉強する余裕があるはずもありませんでした。

長く、業務に役立つものを作り、社内からも支持されるには、小手先のソフトの使い方ではなく、表には見えにくい基礎的なことを充実させることが、いいソリューションを作成することではないかとFileMakerを使い始めてからしばらくして気づきました。

とはいえ、こういった分野のことは本当に奥が深く、インハウスの開発者であれば、あまり意義を見出せないかもしれません。私もそう思ったことがあります。

しかし、何年間前に作ったものを見返すたびに「基礎を見直そう」と思うわけです。

私もまだそんなことを言っても勉強の途上にいるので偉そうなことはとても言えません。

重要だと思ったこと

・シンプルに行く(=他の人が見て分かりやすいように)
・システムを業務に100%合わせようと失敗する

たぶんシステム開発に関して書かれた本か何かに書いてあったことだったと思います。特に「システムを業務に100%合わせようと失敗する」は本当にそう思います。

「システムを業務に100%合わせようと失敗する」とは、紙やExcelの帳票をそのままFileMakerに載せ替えるだけでは、業務の改善・効率化という意味ではあまり意味をなさない。というようなことです。

システムを作るとき、作り変えるときは業務フロー自体も見直す。と書いてありました。

無理に合わせようとすると、滅茶苦茶なソリューションを作り出すことになり、どこかで行き詰ってしまいます。

また、作ったソリューションはいつか自分の手を離れる。ということも意識しなくてはなりません。

自分の手から離れたものは他人がメンテナンスします。後任に分かりやすいように作ることを意識できれば理想的ではないでしょうか。

そういったことを実現していくには、やはり作る前にソリューションの要点を整理することではないかと思います。

メモでもいいと思いますし、cacoo.comのようなツールを使って図を作ってもいいでしょう。

できれば図式化しておき、頭の中を整理するといいのではないかと思います。

2015年2月3日火曜日

FileMaker Serverはオンプレミスかクラウド 結局どっちがいいのか?

オンプレミスとクラウド

今回は「FileMaker Serverにとっての最適なクラウドサーバ」とはで取り上げましたクラウド上の仮想マシンを使う場合と、オンプレミスのどちらを選択するべきかを考えてみたいと思います。

ちなみにオンプレミスは直訳すると「敷地内」となるでしょうか。

つまり、企業であれば自社のオフィス内にサーバを設置して、管理も自分たちで行うことを言います。

対してクラウドは、サービス提供者のデータセンターにサーバがあり、サービス提供者が管理をする方式です。

最近ではAmazonやマイクロソフトなどの事業者が比較的簡単かつ自動的にWindowsの仮想マシンを作成できるクラウドサービスを提供していることによって、FileMaker Serverをクラウドに置くことを検討したり、実際に運用したりすることが多くなりました。

基本的にAmazonやマイクロソフト(Azure)のサービスマシンをシャットダウン(停止)しておくと課金されないので、私なんかはテスト環境として開発中だけ起動して使ったりしています。

テスト環境用に自分でサーバを持とうとすると、結構なコストになりますので、クラウドサービスを使うとコスト削減に直接的につながるでしょう。

では、FileMaker Serverの運用サーバとして使う場合はどうなんでしょうか。

ちょっと考えてみたいと思います。

比較を行う条件

・Amazon EC2の仮想マシン(m3.large)
・オンプレミスは同程度のマシンを用意

※同程度のマシンといっても仮想マシンと実マシンなので一緒とは言えないかもしれません。

費用面について

まず、オンプレミスのサーバですが、Amazonと同程度といっても、まったく同じ構成の実サーバを探すのはちょっと難しいので、ざっくりで計算しています。

オンプレミスの場合はサーバ機以外にもUPSやインターネットから接続させることも考えるのであればルータなども必要になってくるでしょうし、細かいところを言うと固定IPアドレス取得代、プロバイダの接続代金などネットワーク関連の費用も必要になってきます。この辺はすでに持ってい場合もあるでしょうが、月に7千円ということにしておきます。

ざっくり計算ですが、サーバ機および周辺機器に約30万円、それと月に7千円のコストがかかるという感じにしておきます。

一方のEC2は月に2.6万円です。

この費用をグラフで比べたものが下の図です。


オンプレミスの場合はサーバ機の購入費用などを1か月目にすべて計上しています。

19か月目にオンプレミスとクラウド(Amazon)が累計費用が逆転します。

簡単にいうと19か月以上サーバ機を使うとオンプレミスの方がコスト的には安くなります。

しかし、コスト面だけで比較してはいけない面もあります。

直接コストに現れにくい面


例えば、故障を最初から考えて費用として見積もっておくのは難しいことだと思います。しっかりしたベンダーから購入したサーバ機が3年程度で壊れるかといったことは今の時代あまり考えにくいですが、壊れれば部品代、外に直すのを頼めば修理代もかかります。

オンプレミスの場合は社内の人間が面倒を見るので、人件費もかかります。

クラウドの場合は基本的に含まれているわけです。

また仮にOSが壊れたとしましょう。

クラウドの場合は、別の仮想マシンを立ち上げて、壊れたものは消してしまうこともできます。

オンプレミスの場合はそういうわけにはいきません。

そういった面も考慮するとなかなか結論を出しにくい問題ではあります。

私見


あくまでもこれは私見ですが、クラウドを選んだ方がいい場合とオンプレミスの場合を書かせていただきます。

クラウドがいい場合

・ネットワークやサーバの知識に自信がない
・とにかく早くサーバを導入したい
・社内にサーバを置く場所がない
・管理にできるだけ人を使いたくない
・費用として計上できる(サーバ機の償却が必要ない)

オンプレミスがいい場合

・長期的、継続的に使用する場合コスト的に安くなる
・LAN内だけの運用
・ネットワークやサーバの知識に自信がある、または頼れる人がいる

という感じになるでしょうか。

関連する記事: