FileMakerとODBCを使ったデータ連携の手順

## はじめに
社内でFileMakerを使用している方もいるかと思いますが、今回はパブリッククラウドへのデータ連携などを行うために、FileMakerをデータソースとして利用できるかを検証してみました。

## 本記事の対象者
・基本的なプログラミングを理解している方
・FileMakerを利用している方

## 準備
・FileMakerProまたはFileMakerServerをインストールした端末
・Visual Studioなど、データ出力用のプログラムを開発できる環境

## FileMakerとは
・プログラミングの知識がなくても、ドラッグ＆ドロップで簡単にデータベースを作成できるローコードツールです。アドオンを使って、様々な機能を追加することも可能です。

## 検証

### FileMakerの設定
FileMaker Proで、ODBC接続ができるようにユーザー設定と共有設定を行います。

・FileMakerで対象のテーブルを開き、
「ファイル」＞「共有設定」＞「ODBC/JDBCを有効にする」
を選び、共有を「オン」にします。
また、アクセスを許可するユーザーを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2822850/082006d9-3921-de0f-8c57-8291f17a7ce5.png)

・ユーザーの追加は
「ファイル」＞「管理」＞「セキュリティ」
から行えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2822850/41d0473e-c928-a1be-a84c-0a76b0684346.png)


### ODBCドライバのダウンロード
以下のサイトからFileMakerのODBCドライバをインストールします。インストールする際は、使用中のFileMakerのバージョンとOSに合ったドライバを選んでください。

https://support.claris.com/s/article/Software-Update-FileMaker-xDBC-client-drivers-for-FileMaker-1503692806454?language=ja

なお、ODBCドライバは異なるデータベース間でデータをやり取りできるようにするためのソフトウェアで、データベースとアプリケーションの間の橋渡しを行います。

### ODBCドライバのインストールと設定

ダウンロードしたODBCドライバをインストールし、その後ODBCデータソースアドミニストレーターを使用して接続設定を行います。

・まず、Windows 64bit版のドライバをインストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2822850/d0bc03d9-84b4-9290-c385-c3fe17a68e57.png)

・次に、ODBCデータソースアドミニストレーターを開き、システムDNSタブで「データソースの新規作成」を選択し、インストールしたODBCドライバを設定していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2822850/96e26be4-9d73-2be4-2273-0e30349935ac.png)

・最後に、接続テストを実行して設定が正しく行われているか確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2822850/d5094039-74c5-d81d-326c-9ddd9852b1fd.png)


### C#コンソールアプリでデータを出力
C#のコンソールアプリケーションを使用して、FileMakerからデータをテキストファイルとして出力します。以下は、そのコード例です。

    using System;
    using System.Data;
    using System.Data.Odbc;
    using System.IO;

    class Program
    {
        static void Main(string[] args)
        {
            // ODBC接続文字列を作成（DSNを使用）
            string connectionString = "DSN=fmservername;UID=your_username;PWD=your_password";

            // ODBC接続を作成
            using (OdbcConnection connection = new OdbcConnection(connectionString))
            {
                try
                {
                    connection.Open();

                    // SQLクエリを定義
                    string query = "SELECT * FROM test";

                    // SQLコマンドを作成
                    OdbcCommand command = new OdbcCommand(query, connection);

                    // データリーダーを使用してデータを取得
                    using (OdbcDataReader reader = command.ExecuteReader())
                    {
                        // 書き出すテキストファイルのパスを指定
                        string outputPath = "output.txt";

                        using (StreamWriter writer = new StreamWriter(outputPath))
                        {
                            // カラム名を書き出し
                            for (int i = 0; i < reader.FieldCount; i++)
                            {
                                writer.Write(reader.GetName(i) + "\t");
                            }
                            writer.WriteLine();

                            // データを一行ずつ書き出し
                            while (reader.Read())
                            {
                                for (int i = 0; i < reader.FieldCount; i++)
                                {
                                    writer.Write(reader[i].ToString() + "\t");
                                }
                                writer.WriteLine();
                            }
                        }
                    }
                    Console.WriteLine("データの書き出しが完了しました。");
                }
                catch (Exception ex)
                {
                    Console.WriteLine("エラー: " + ex.Message);
                }
            }
        }
    }


### 結果
テキストファイルとしてデータを正常に出力することができました。

・ビルドファイル
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2822850/79f4dc2c-eeff-15d7-714b-dcc47238dddc.png)

・出力テキスト
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2822850/3314e0ca-7d70-40ad-5d57-8b9f41bd63b9.png)

:::note warn
### 注意
今回のテストは自身のローカル端末上内でFileMakerにODBC接続しましたが、対象のFileMakerファイルを開いた状態にしておく必要があります。
:::

## 感想
参考となる記事が少なく、最初は戸惑いましたが、やり方が分かれば思ったより簡単にデータ出力ができました。FileMakerをデータソースとして利用するためのODBCに関する情報が少ないと感じました。おそらく、新規でFileMakerを使い始めるユーザーが減っているため、それに伴いFileMakerとパブリッククラウドのデータ連携の事例が少ないのではないかと思います。