FMDefaultFields.xml を作る

 FileMaker Pro でテーブルを作成する際に日本語環境では、常に次のフィールドが作成されます。
 - 主キー
 - 作成情報タイムスタンプ
 - 作成者
 - 修正情報タイムスタンプ
 - 修正者

 プライマリーキーとハウスキーピングフィールドで、これはこれでいいんですが、フィールド名が日本語になっていることで、煩わしい場面もあります。
 例えば、`ExecuteSQLe()` 関数や `ExecuteSQL()` 関数の中の SQL クエリの場合、フィールド名が日本語になっているといちいちエスケープしなければならなくなったり、Unicode エンコードや URL エンコードした際に、何がなんだかわからなくなるという難点があります。

 気ままに日本語でフィールド名を決めていると、JavaScript 連携や FileMaker Data API、OData を使う場合に、逆に煩わしくなったりします。これは、もうスッキリと英語にしてしまって、他の PostgreSQL、MySQL、SQLite3 等と命名規則を合わせてしまった方が余計なことを考えなく済むと思います。

 このデフォルトで作成されるフィールド群を変更するには、FMDefaultFields.xml を作成し、次の場所に配置して、FileMaker Pro を起動すればいいだけです。

 ### macOS
```
/Users/Shared/FileMaker/Shared/FMDefaultFields.xml
```

### Windows
```
C:¥ProgramData¥FileMaker¥Shared¥FMDefaultFields.xml
```

 基本的には、オリジナルの FMDefaultFields.xml をコピーして、必要部分を変えればいいだけです。オリジナルは、以下にあります。

### macOS
```
 /Applications/FileMaker Pro/Contents/Resources/ja.lproj/FMDefaultFields.xml
```

### Windows
```
C:¥Program Files¥FileMaker¥FileMaker Pro¥Extensions¥Japanese¥FMDefaultFields.xml
```

 とはいえ、もっと自由に設定したい要請はあると思います。例えば、プライマリーキーは、UUID ではなくシリアル値を使いたいとか、デフォルトで必要なフィールドがもっといるとか……。
 
 これは、ツボを押さえておくと簡単に作成できるようになります。
 また、FMDefaultFields.xml を読み解くこともできるようになります。
 
 FMDefaultFields.xml の基本的な枠組みは次のようになっています。
```
<?xml version="1.0" encoding="UTF-8"?>
<FMDefaultFields version="2.1.0.0" Source="19.0.1" locale="English">
	<ObjectList membercount="">

        〜 （ここにフィールド設定） 〜

	</ObjectList>
</FMDefaultFields>
```

`<ObjectList>` タグの `membercount` 属性には、設定するフィールドの数が入ります。オリジナルだと `5` が入っています。作成するフィールドメンバー数を設定するということです。

 フィールドの設定は、外側のタグから説明します。
```
<Field id="" name="フィールド名" fieldtype="Normal" datatype="" comment="">

    〜 （ここにフィールドオプション設定） 〜

</Field>
```

 `id` 属性は、シリアル値で、1 から順番に設定していきます。
 `name` 属性はフィールド名で、ここを英語にして、`comment` 属性に日本語での説明を書いておくといいのではないでしょうか。
 `fieldtype="Normal"` の `datatype` 属性は、FileMaker Pro のデータタイプが入りますが、次の値で設定します。

 - Text ... テキスト
 - Number ... 数字
 - Date ... 日付
 - Timestamp ... タイムスタンプ
 - Binary ... オブジェクト

  次のデータタイプの `datatype` 属性は、計算結果で、上記データタイプが入ります。

  - 計算
  - 集計

 以上の、データタイプは、`datatype` 属性ではなく、`fieldtype` 属性で設定します。
  `fieldtype` 属性を以下の値で設定し、`datatype` 属性が計算結果を数字とするなら、`Number` が入るということです。
  
 - 計算フィールド `fieldtype="Calculated"`
 - 集計フィールド `fieldtype="Summary"`

 計算フィールドで計算結果がテキストならば、次のように設定します。
```
<Field id="" name="" fieldtype="Calculated" datatype="Text" comment="">
```

 `<Field>` タグの内側のメンバーも、`fieldtype` 属性によって異なります。`Normal` タイプでは、
 次の 5つですが、最初の 4つは、フィールドのオプションに対応しています。
```
<AutoEnter> 〜 </AutoEnter> → フィールドのオプション「入力値の自動化」
<Validation> 〜 </Validation> → フィールドのオプション「入力値の制限」
<Storage> 〜 </Storage> → フィールドのオプション「データの格納」
<Furigana> 〜 </Furigana> → フィールドのオプション「ふりがな」
<TagList> 〜 </TagList>
```

 計算フィールドには、`<Calculation> 〜 </Calculation>` が、集計フィールドには、`<SummaryInfo> 〜 </SummaryInfo>` が加わります。

　オプションのパターンは、ここで説明しきれないほどありますから、これらのフィールドとフィールドのオプションの設定は、実際に、仮のファイルでフィールド設定をしてしまって`ツール > 名前をつけて XML として保存...` を使って書き出してしまって、該当するフィールドタグを抜き出して、上記説明にある部分以外を削除して使用します。
 
  その際に、`<Field>` タグの `id` 属性をユニークなシリアル値にすることと、フィールドメンバー数が決まったら、`<ObjectList>` タグの `membercount` 属性を設定するということを忘れないでください。

## &lt;TagList&gt;

 `<TagList>` タグでは、まず、プライマリーキーを設定します。プライマリーキーにするフィールドの設定は次のようになります。

```
<TagList primary="True"></TagList>
```

 次に、FileMaker Pro では、テーブル作成時にテーブルオカレンスとレイアウトが自動作成されますが、初期レイアウトに配置したくないフィールドは、`<TagList>` タグを次のように設定します。

```
<TagList>#_FMI_0 </TagList> 
```

 この設定をしておくと、レイアウトに自動でフィールドが配置されなくなります。
 プライマリーキー、かつ、レイアウトに自動配置しない設定ならば、

```
<TagList primary="True">#_FMI_0 </TagList>
```

　何も設定しないなら、

```
<TagList></TagList> 
```

　以上のようになります。

 まとめると、
 - フィールド設定、フィールドのオプション設定は、仮ファイルで、実際にフィールド設定し、`ツール > 名前をつけて XML として保存...` で、XML ファイルを書き出し、`<Field>` 部分を抜き出し、不必要なタグを除去する
 - `<TagList>` タグを設定する
 - `<Field>` タグの `id` 属性をシリアル値で 1から設定する
 - 設定したフィールドのメンバー数を `<ObjectList>` タグの `membercount` に設定する。

　これで自由自在に FMDefaultFields.xml を編集できるようになります。