FilemakerからmysqlをCRUD操作する。

# 

# 概要
FileMakerに触ってみたので、記録を残しておきます。
FileMaker触り初めて１０時間程度の初心者なので、ガバ多いです。

# 対象読者
FileMakerとmysqlとの連携方法を知りたい方

# 開発環境
ソフトウェア名|バージョン|説明
------------|--------------|-------
Windows|10|OS
FileMaker Pro|21|ノーコード開発ツール 
MySQL|8.0|データベース
MySQL ODBC|9.3 Unicode Driver|FilemakerとPostgresのデータアクセスをするために使用

※ FilemakerはFileMaker Developer Subscriptionを購入して利用

# 配置図

```plantuml
@startuml
title:ネットスーパー購入情報記録バッチ
left to right direction
node ClientPC as "Client_Window10"{

node Docker_App {
    database PostgreSQL as "Mysql"
  }
   component FM as "FileMaker_Pro"
    node ODBC{
    }   
}
FM --> ODBC: a-1 ODBCを使用
ODBC -->PostgreSQL:a-2 データベースにアクセス

@enduml
```

# 設定方法

## mysql側

### DDL

```sql
drop table if exists  tests;
create table tests(
    id integer PRIMARY KEY,
    name varchar(60)
);


```

## ODBCの設定方法(windows側の設定)

### mysqlのODBCドライバーを取得する

https://dev.mysql.com/downloads/connector/odbc/

### ODBCデータソース　アドミニストレーターの設定

ODBCデータソース　アドミニストレーターを開いて、システムDSNにmysqlを追加する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/7c04476d-01bb-4725-af8d-54f9f6bc3283.png)

接続情報を入力する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/698320c3-16db-4a2f-b645-4e6b13439d57.png)



## FileMaker側の設定

### ODBCデータソース
FileMakerを開く。
ファイル（F）→管理（M）→データベース（D）を選択する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/f182128b-4f61-44e9-b7ba-6f73990f0a93.png)


「ODBCデータソースの追加」を選択する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/47314be1-bc6e-4393-9245-1964eea89fe1.png)

先ほど作ったシステムDSNのmysqlを選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/6e2830f0-e6b1-43fb-a269-d74f473aa74f.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/5cceb403-7dd6-41c6-8b22-163db86e640d.png)

操作したいテーブルを選択する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/d180bcea-8936-48c1-a28e-4af275067b5d.png)




リレーションシップに追加されていることを確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/75f44b25-b359-48e7-92ae-9b1003fcae1d.png)



## 画面の設定

入力項目とラベルは自動的に作ってくれます。





# CRUD処理

## select
フォーム形式で一件表示、リストと表形式で全件表示できる。

### フォーム

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/11277c56-29a2-4c64-a6b1-d45339471517.png)


### リスト形式
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/87c4587c-5305-42de-ae63-7bff9d29a010.png)



### 表形式

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/ea4d6007-8802-4fff-88c5-881fe7d0e58d.png)





## insert

マウス右クリック→新規レコードを選択する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/999b533d-d58e-4651-97cf-6fb52c8245ba.png)

空欄のフォームが表示されて値を入力する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/1c34b680-26d7-4c98-b062-c3c350a9554d.png)



## update
そのままnameをいじるだけで更新できます
主キーのidはいじっちゃだめです。あとで入力できないように設定したほうがいいですね。

 修正前
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/2a22bc29-f2a6-4348-b893-796f53b9e856.png)



 修正後
nameを「修正後」に変更する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/e554b6e0-715d-40d1-bc25-3b7ecf00b352.png)


## delete
フォーム形式で削除したいレコードを選択する

削除前
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/79bbd19c-c7b8-4925-8218-747d78499499.png)

右クリック→レコード削除を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/d5a03072-2a61-4e23-840e-5a22453cbdc7.png)


削除後

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/941ef58d-d403-441e-be2e-cc8a6b90b0a9.png)




# 感想

## 良かった点
・RDSとの外部連携は簡単に設定できます。
　Oracle　SQLServerも対応してるので、DBそのままでアプリ側はFilemaker側に移行するという使い方もできそうです。

・FileMakerはデータの永続化がRDSを使ってないという前評判があったので、それを確認できて良かったです。
 
・実装コストがプロコードと比べると早い。
　テーブル定義を作成すると入力項目も紐づけて設定されているのが特に良いと思いました。

・SQLとプロコードの知識がなくてとも、動くものを作れる。
　業務用アプリのプロトタイプを作るのにも使えそうです。仕様が難しい機能はFileMakerでさっと作って、仕様を明確にするときになど使えそうです。


## 不便だと思った点
### linux上のpostgreが対応してない。
当初はDocker上のPostgresで立てる予定ですが駄目でした。windowとmacOS上のpostgresは対応してるみたいです。（Linuxも対応してほしい！）

## ファイルを開くDBのユーザーとパスワードを聞かれる（windows側の設定？）
適切に設定すれば回避できると思いますが、気になりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/84e61e8a-0e72-462b-943f-08e1cde71ae8.png)

## fmpファイルのバージョン管理がわからない
とりあえずgithubでソースを管理したのですが、以下の問題点に気づきました。
・レイアウトを変更すると自動的に上書き保存される。
　自分で上書き保存できないのはちょっと慣れないです。
 
・ソースコード読んでもどこを変更したのかわからない
FileMaker Proから開かないとどこを変更したのかわかりにくいですね。　
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/1a1d5277-d578-46e1-bfd3-30db895ac18a.png)


## 今後調べたい部分
・Where文、GroupBy Joinの書き方
・トランザクション
・例外処理
・楽観ロックの仕方
・悲観ロックができるか、できるならそのやり方
・REST APIを使ってDBの情報表示　書き込みができるか
・バージョン管理のベストプラクティスを調べる



# 参考資料

## FileMaker Pro での ODBC と JDBC の使用

https://help.claris.com/ja/pro-help/content/odbc-jdbc.html

## mysql 設定
https://www.microlab.jp/xcutedoc/documents/sup_db/MySQL.htm

## claris　外部データソースへの接続

https://help.claris.com/ja/pro-help/content/connecting-to-data-sources.html

https://qiita.com/teaparty/items/be12e9d3224bf27472cd

## github コミット分
https://github.com/RYA234/hanbai_app/commit/61825f1a249eeacaa19edefc544bf26616dbc090