【FileMaker】あれ？同じ数値データなのにゼロ付いてないじゃん！

フィールドタイプを間違えて設計している現場に遭遇したことはないですか？
ないと思うでしょ？
そんなわけないじゃん、って思うでしょ？
過去、何度か経験している人が、ここにいます。

# テスト環境
FileMaker Pro ver.20
FileMaker Pro ver.19
多分、どのバージョンでも同じ再現ができます。（古すぎるバージョンはわかりませんが、、、）

# 事件は現場で起こってた
## フィールドが数字タイプ同士のコピー
数字タイプフィールドで設計した二つのフィールドがあります。
仮に、Aフィールド、Bフィールドとしましょう。
Bフィールドは、Aフィールドのデータを計算結果で数字として参照する設計です。
![スクリーンショット 2023-08-21 16.16.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/73ef60eb-bfbc-94fe-0876-0bacc144171d.png)
Aフィールドに00001を入れたら、Bフィールドは1が設定されました。
![スクリーンショット 2023-08-21 16.19.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/7b6365de-1676-2c14-2aee-c3689066ff9a.png)
あれれ？
どっちも数字フィールドだから、仮にAフィールドはゼロ埋めで5桁固定で入力されたら、Bフィールドもゼロ付くんじゃないの？
てな感じです。

## 数字タイプのフィールドをテキストタイプにコピー
次に、数字タイプのフィールドAを、計算結果がテキストタイプのフィールドCから参照してみました。
![スクリーンショット 2023-08-21 16.23.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/a2c1e91a-5afa-187e-b840-f48ae8346258.png)
Cフィールドはテキストタイプなので、数字タイプのAフィールドをそのままゼロ付きで参照しています。
![スクリーンショット 2023-08-21 16.26.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/6f381017-1fea-39d3-606b-e4ff7bfe5aab.png)

# 数字タイプフィールドの取り扱い
Claris FileMakerのヘルプには、次のように数字フィールドについてのページがあります。

https://help.claris.com/ja/pro-help/content/number-fields.html

つまり、数字フィールドにゼロが付く可能性がある場合や何らかのテキストがつく場合はテキストフィールドを使うこと、となっているので、そもそもの設計がまずかった、ということになります。

# 現象が発生した原因は？
次のような原因が考えられます。

・設計時点ではテキストタイプだったが、実装段階で数字タイプにしてしまって気づかなかった
・開発中に、リレーションシップ元のフィールドタイプに変更があり、本来なら参照しているファイルのAフィールドも修正しなければならなかったが、修正が及んでいなかった
・数字タイプのものしか入力されないと思っていたら、現場でゼロ埋めデータを入力していた

とかとか？

# 途中で気づいたらどうする？
## 開発中の時
開発中に気づいたら、修正できるので、ラッキーですね！

## 運用中の時
運用中に気づいて、何食わぬ顔で利用され続けていたらどうなるでしょうか？
これって、「なんで今まで気づかなかったんだ！？」と思いがちですが、「なんか普通に使えていたから」と案外そのままになっているケースもあるのではないでしょうか？

運用中のシステムを現場で覗いて一瞬、脳がバグりますけどね、、、

### 修正手順
次のような修正手順が考えられます。

1.影響範囲調査
2.外部システムがある場合は、外部システムが参照していないかどうかも確認
3.修正するなら修正して、テスト
4.新バージョンにデータを移行
5.新バージョンをリリース

### 修正方法
では、修正手順3において、どんな修正方法が考えられるでしょうか？

・方法1
Aフィールドをテキストフィールドに修正する。

・方法2
Bフィールドの計算結果をCフィールドと同様、テキストで返すように修正する。

・方法3
Bフィールドをゼロ詰めで計算結果を返すようにする。
この場合、計算結果を数字にしてもゼロ埋め数字で返ってきます。
![スクリーンショット 2023-08-21 16.45.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/d5a51337-185e-7956-247f-68d248f1c76d.png)
こんな感じです。
![スクリーンショット 2023-08-21 17.27.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/d251dedd-267e-20a4-cc62-f24da8ee0da9.png)
Bフィールドのデータが統一的に綺麗になりますが、今までゼロ埋めでないことで動いていたシステムなので、帳票やスクリプトで影響がないかの確認が重要です。


・方法4
Aフィールドを数字のみにしたい場合、今までの入力データはそのままとし、フィールド定義でゼロ詰めなし数字で設定されるようにする。
![スクリーンショット 2023-08-21 17.12.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/5aa4f93b-acb9-7f15-4e44-7d287705dcb0.png)
こんな感じで、入力が終わったらゼロがなくなります。
ただし、すでに入力されたレコードには影響がありません。
![スクリーンショット 2023-08-21 17.29.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/4ee616e4-3f7b-263a-2634-43fc00c2d791.png)
とはいえ、Aフィールドもゼロ埋めがされていることで奇跡的に動いていたシステムなので、帳票やスクリプトで影響がないかの確認が重要です。


# 一番無難な対処方法はどれだ？
Aフィールド、Bフィールドどちらを重点におくかで対応方法が違ってきますが、これは「修正する」を選択した場合です。
その場合の一番無難な対処方法は現場によりけりなので、現場と相談です。

大抵は、すでに運用中のシステムで問題が起きていないのであれば、そっ閉じが一番無難なのかもしれません。。。
きっと、今までの担当者もそうしてきたに違いありません。
でも、何かしらのドキュメントは残しておきましょうね。

ちなみに、過去遭遇した時の私の対処も、そっ閉じです。