FileMaker 外部サービスとの連携（GoogleForm編）

# 前置き
前置きはいいよという方は、[GoogleForm のデータをFileMakerに取り込む３つの方法](https://qiita.com/hirdot/items/88ee0a400f138fcf5956#googleform-%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92filemaker%E3%81%AB%E5%8F%96%E3%82%8A%E8%BE%BC%E3%82%80%EF%BC%93%E3%81%A4%E3%81%AE%E6%96%B9%E6%B3%95)からご覧ください。

## 社内SEの味方
中小規模の社内SEとして働いているのですが、慢性的にリソースが不足していることもあり
様々なサービスやソフトウェアに助けてもらいつつ日々課題に取り組んでいます。

この記事では日頃の感謝も兼ねて GoogleForm と Filemaker について、特にその連携について紹介します。

### GoogleForm
説明なんて不要ですね。
ちょっとしたアンケートや申請受付を作るのに手軽で便利なGoogleForm。
私たちもよく助けてもらっています。

「こんなシステムが欲しいんだけど」という社内からの要望にも「それ、GoogleFormでよくない？」という場面は結構多いです。

**弱小エンジニアだからこそ**[^1]、三大美徳の **「怠惰」** には全面的にしたがわねばなりません。
また、ピティナには「自分で作ってね」という **「怠惰」** もあります。
※ラリー・ウォールの「怠惰」からは外れますけどね

[^1]: わたし個人のことであって、ピティナ・エンジニア全体のことではないですよ！

どちらの意味においても、GoogleForm は大変魅力的です。

### FileMaker
「自分で作ってね」の点でいうと、FileMakerというソフトウェアも大変重要な存在です。
というか、FileMakerがあったから「自分で作ってね」という怠惰が許されています。

[**FileMaker**](https://www.filemaker.com/jp/)については少し説明します。

ViewとModelが一緒くたになったという感じなのですが・・・

* テーブルを定義すると、レイアウト画面でオブジェクトとして扱うことができる
* これにより、GUIで簡単にそれっぽい画面がめちゃめちゃ手軽に作れてしまう

というのがシンプルな説明でしょうか。

また、**（ほぼ）日本語で記述できるスクリプト**も搭載しているので、非プログラマーによるプログラミングが可能になっているのもポイントです。

**イメージ**
![FMイメージ.png](https://qiita-image-store.s3.amazonaws.com/0/16382/0a30d30f-22b5-40f5-1e13-c36a35fa1a31.png)
※FM17のサンプルファイルから拝借
右側に見えているのがテーブル定義用の画面で、左側がレイアウト（画面）設定画面です。

カラム（FMではフィールド）をGUIでラベルやテキストボックスとしてレイアウトすることできるので、
簡単に画面が出来てしまいます。

## ピティナではFileMakerが基幹
私の働く [ピティナ](https://www.filemaker.com/jp/solutions/customers/stories/ptna.html) はこのFileMakerが基幹DBとなっており、社内システムの大半がFileMakerで構築・管理されています。

そのため、ピティナのシステム開発は「（なるべく）すべてのデータをFileMakerで見られるように」というのが暗黙の前提になっています。

### GoogleFormとも仲良くしてほしい
なので、両者にはぜひ仲良くしてもらいたいのですが、GoogleForm と FileMaker はお互いのことを
気にしていませんので、デフォルトでは連携することができません。

# GoogleForm のデータをFileMakerに取り込む３つの方法
前置きが長くなってしまいましたが、ここから本題です。

これまで連携させるために行ってきた方法と、いまいま「これがベスト」と思える方法について紹介します。


## ①CData を利用する
手動コピーをしていた時代もあったのですが（恥）、最初に行き着いたのがCDataでした。

* [公式ページ](https://www.cdata.com/jp/)
* [FileMakerについてのマニュアル](http://cdn.cdata.com/help/LKC/odbc/pg_usagefilemakerpro.htm)

### 概要

1. CData
 2. ライセンスの購入
2. ローカル端末
 3. ODBCドライバに設定する
 4. FileMaker スクリプトを作成する（当該端末でないと作成できない）
 5. 専用のスクリプトステップでインサートSQLを作成する

#### メリット
**SQLが使える**
SpreadSheetをテーブルとしてみなしSQLで任意のデータを取得できます！！

#### デメリット
**設定が面倒**
割とブラックボックスなUIなので、テーブル・カラムの指定方法が分かりにくいです。
一旦SQLを自動生成させて「ああ、こうやって書くのね」というのを掴んでから、
SQLを調整する感じになります。

こんな感じ
![cdata.gif](https://qiita-image-store.s3.amazonaws.com/0/16382/3b67cc94-2912-5bc7-7b44-d55edb3cc188.gif)


**ライセンス料金**
そこまで高価でもありませんが、後述の方法は特別な支払いがなく出来る方法なので、比較すると高く感じてしまいます。
＞ [お値段表](https://www.cdata.com/drivers/gsheets/order/odbc/) 

**端末が限定される**
これもライセンス料金の影響なので、お金を払えば解決する問題ですが、
目先の料金を小さくしようと思うと端末１台にのみ適用することになります。

するとスクリプト修正・新規スクリプトの作成は、その端末で操作しなければならなくなり、
圧倒的に開発効率が悪くなります。

まぁ、、、お金を払って複数台に入れればいいんですよ。

## ②GAS＋FM「レコードのインポート」
### 概要

1. GAS
 2. スプレッドシートでcsv出力マクロを作成する
2. FileMaker
 3. WebViewerか何かでマクロ実行URLを叩く
 3. ローカルにcsvが落ちてくる
 4. スクリプトでcsvを「レコードのインポート」する

#### メリット
**無料**
自分で作れるので無料です。（開発コストはどれも大差ないので無視します）

**GAS楽しい**
プラットフォーム機能が改善されてプロジェクト管理できるようになりましたね。
やばいです。GAS開発がどんどん楽しくなってきてます。

#### デメリット
**csvが邪魔**
実ファイルを生成するので定期的に削除してあげる必要があります。
そこまで気にならない人もいるかと思いますが、やはりゴミになるものは作らないに限ります。

## ③GAS＋MySQL
現時点でのベストだと思っています。
もっと早く気づいてもよかったのに・・・。悔しい限りです。

GASの初期はMySQLへのインサートが出来なかったか、あるいは僕が情弱過ぎてリーチできなかったかで、
「できたらいいのにね」という話で終わっていました。

### 概要
1. MySQL
 2. DBサーバをたてる or 既存のDBサーバに１つテーブルを作成する
 2. ユーザを作成する（当該フォーム専用のユーザ）
3. GAS
 4. MySQLにインサートするマクロを書く
4. FileMaker
 5. MySQLをESS透過する

#### メリット
**MySQLにデータがある**
FileMaker 大好きな組織で働いていますが、僕自身は実は苦手です。
（リレーションを貼るのにいちいちオカレンスなるものを作成しないといけないとか・・。）

なので、MySQLにデータがあるとすごく安心します。（SQL使えるし）

またFileMakerはデフォルトでMySQLとの連携があるため

* 透過してMySQLのデータを見ることができる（データはMySQLにのみ保持）
* FileMakerへの取込も標準対応（FileMakerのテーブルと同等に扱えます）
 * ということは社内のスタッフも間接的にMySQLを扱うことができるのです。

データ量が多くなると、FileMaker越しにMySQlを見るのは辛くなってくるのですが、
GoogleForm で集める程度のレコード数なら問題にはなりません。


#### デメリット
**サーバ代**
DBサーバがあって相乗りするなら不要です。

**GASに接続情報を書かないといけない**
個人の感覚ですが、なんとなく気持ち悪いと思ってしまいます。
そもそも、当該ユーザは当該フォーム用のテーブルしかアクセスできないようにしますし、
公開されるわけでもないんですけどね。
古い人間の感覚かもしれません。

**データの多重管理**
スプレッドシート、MySQL、FileMakerと下手すると三重持ちになります。
なので、FileMakerにはデータを入れず、MySQLをESS透過するのが良いと思います。


#### ピティナでの使い方

1. MySQL
 2. DBを１つ作成（GoogleFormの回答テーブルをまとめるDB）
 2. テーブルを１つ作成（GoogleForm１つにつき、１テーブル）
 3. ユーザを１つ作成（2のテーブルしか触れないユーザ）
4. GAS
 5. 当該テーブルにインサートするGASを作成
5. FileMaker
 6. 当該テーブルをESS透過

# おしまいに

ピティナの場合は、

* エンジニアの都合（FM好きくない。MySQL好き）
* 事務スタッフの都合（MySQL好きくない。FM好き）

両方かなえようとしているので、③がベストですが、MySQLを必要としない組織であれば①か②が良いと思います。

①は多少SQLが出てきますが、おそらく一番単純なセレクト文しか使わないので、
SQLはじめての方でも[Qiitaの記事](https://qiita.com/search?q=sql+select)を参考にすれば対処できるでしょう。


※ちなみに、いずれの方法を取るにしてもフォーム毎に開発コストが掛かりますので、その点は留意なさってください。