公開日:
システム開発グループ テクニカルマネージャーの浅利です。
今回は、私が最近ハマった問題についてお話しします。
メールアドレスの大文字小文字問題
みなさん、ご自身のメールアドレスは、大文字小文字の意識はしてらっしゃいますか?
私はすべて小文字で書くのでそれほど意識していません。
私と同じように全部小文字で書くよという方も多いと思いますが、例えば AsariYuta@example.com のように大文字小文字両方使うという方もいらっしゃいます。
さらに、場面によって大文字にする箇所を変えている、という方もいらっしゃるようです。
というのは、一般的なメールサーバーでは、大文字小文字違いの区別なく、asariyuta@example.com も AsariYuta@Example.com も ASARIYUTA@EXAMPLE.COM も、同じ人に届くようになっているからです。このアドレスは例なので、誰にも届きませんが。
(※なお、メールアドレスの国際的な規格(RFC)としては、@よりも前の部分は大文字小文字の区別はあるけど推奨しない、となっているそうです😅)
それを踏まえまして、今回のお話です。
作ろうとしたシステム
問い合わせフォームのようなものからREST APIで登録されるkintoneアプリが2つあります。
カスタマインの定期実行タスクを使って、この2つに入ったレコードを、メールアドレスをキーにして別のkintoneアプリ「問い合わせまとめアプリ」に反映しようとしました。
問い合わせアプリA に入ったレコードと、同じメールアドレスのレコードが問い合わせまとめアプリにすでにあれば、そのレコードを更新します。まだなければレコードを追加します。
問い合わせアプリB も同様に、B に入ったレコードと同じメールアドレスのレコードが問い合わせまとめアプリにすでにあれば、そのレコードを更新します。まだなければレコードを追加します。



最初この仕組みを作ったときには、正直いいますと、さきほどの「場合によりメールアドレスの大文字の箇所を変える」というパターンは想定していませんでした。
そのため、asariyuta@example.com で登録された問い合わせと、 AsariYuta@Example.com で登録された問い合わせは、別のメールアドレスあつかいで、問い合わせまとめアプリにまとめられる際に別々になってしまいました。
改修
それを同じメールアドレスだとしてまとめるためにどうやったかというと、問い合わせアプリA・B にそれぞれ「メールアドレス(小文字)」フィールドを追加しました。

そして、上記の「 問い合わせアプリA に入ったレコードと、同じメールアドレスのレコードがまとめアプリにすでにあれば、そのレコードを更新します。まだなければまとめアプリにレコード追加します」という定期実行タスクの処理ですが、
この処理を
・問い合わせアプリA に入ったレコードについて、メールアドレスをすべて小文字に変換したものを「メールアドレス(小文字)」フィールドにセットして更新します
・「メールアドレス(小文字)」と同じメールアドレスのレコードがまとめアプリにあれば、そのレコードを更新します。まだなければまとめアプリにレコード追加します
という形に変更しました。
問い合わせアプリBも同様です。

※ なお、今回は別途WebのフォームからREST APIでkintoneに登録される仕組みにしていたため、定期実行タスク側でこの処理が入っています。
今回はやっていませんが、このkintoneアプリ上でレコードを追加・編集する場合は、追加・編集の保存前イベントで小文字変換をしてあげるといいと思います。
最後に、問い合わせまとめアプリ側のA・Bへの関連レコードの設定を、「メールアドレス(小文字)」が一致する、という条件に変更しました。
結果
これで、問い合わせAとBに来た asariyuta@example.com も AsariYuta@Example.com も ASARIYUTA@EXAMPLE.COM も、問い合わせまとめアプリ側ではすべて asariyuta@example.com としてまとめられました。

え?
すでに大文字入りのメアドでまとめアプリに入ってしまっているデータはどうしたかですか?
はい、手作業です。一度すべてファイル書き出しして、大文字小文字違いで重複してしまっているデータを洗い出して手作業で片方に集約、もう片方は削除。さらに全レコードをエクセル上で大文字→小文字に修正してからファイル読み込みして、更新しました💦
蛇足
ちなみに、kintoneのリンクフィールドにはメールアドレス形式があります。
このフィールドも「値の重複の禁止」と設定することができますが、実際に試したところ、やはり大文字小文字がすべて一致した場合でないと重複エラーにはなりませんでした。
このフィールドを使う場合でも、大文字→小文字変換の処理をどこかのタイミングで行ってあげる必要がありそうです。
まとめ
以上、最近私がハマった、メールアドレスをキーにするときの大文字小文字違いの問題でした。
皆様もどうかお気をつけください。
また、アールスリーでは業務改善・システム開発を行うサービスを「キミノマホロ for kintone」として提供しています。
今回書かせていただいた内容も、そのシステム開発のノウハウをもとにしています。
こういった失敗も成功も含めて、経験豊富なメンバーがそろっていますので、ぜひご検討ください!

必要なものを、必要なだけ。
業務改善の新しいカタチ。
kintoneを活用した業務改善・システム開発サービス
kintoneを活用した業務改善・システム開発サービス
投稿者プロフィール

- Webとか.NETとかスマホとかマイコンとかシーケンサーとか、いろいろやってるエンジニアです