☁️

kintone向けEffectTS Schemaの型定義ライブラリを公開しました

に公開

はじめに

kintoneの型の謎

kintoneでは、フィールドが空の場合に返ってくる値が場面によって違うという不思議な現象が起きます。

具体的には、文字列(1行)フィールドから空の値を取得する場合、基本的には以下のように空の文字列ですが、

"value": ""

「レコード追加画面」または「レコード編集画面」でJavaScript APIを使用した場合、

"value": undefined

が返ってきます。

しかし、登録時には、

"value": ""

または

"value": null

で空の値を登録することができます。

同様に、数値フィールドから空の値を取得する場合には、基本的には空の文字列が返ってきますが、

"value": ""

「レコード追加画面」または「レコード編集画面」でJavaScript APIを使用した場合、

"value": undefined

が返ってきます。

空の値を登録する場合には、次のいずれかの値を指定します。

"value": ""
"value": undefined
"value": null

他にも理解不能な例は枚挙にいとまがありません。

こんなもの理解してプログラミングできますか?僕は当然できません。そもそもプログラミングできないので。

なぜEffectTS Schemaなのか

そもそもEffectTSとは、開発者が複雑な同期および非同期プログラムを簡単に作成できるように設計された強力な TypeScript ライブラリだそうです。

関数型プログラミングの考え方を利用しているようです。きっと関数を使うに違いありません。

https://effect.website/docs/getting-started/introduction/

そんなEffectTSに存在する、TypeScript でデータを検証および変換するためにスキーマを定義および使用するためのモジュールがSchemaです。

https://effect.website/docs/schema/introduction/

何を言っているかわからないと思いますが、データの形式を定義して、そこから型とランタイム検証を行います。これにより、たとえば3桁-4桁の数字とハイフンの組み合わせをSchemaでPostalCodeと定義しておくと、郵便番号の形式になっているかコンパイル時とランタイム双方で検証がされます。これにより、kintone上で安全にアプリケーションを構築することができます。

Schemaにはバリデーションやdecode、encodeといった仕組みが組み込まれています。decodeは外部から来たデータをSchemaの形式に変換する関数、encodeはその逆でSchemaの形式のデータを外部向けに変換する関数です。decode時に謎のundefinedが渡ってきた場合にも、ここで空の文字列に変換しておくことでデータが格段に扱いやすくなります。

というわけで現物

npmはこちら
https://www.npmjs.com/package/kintone-effect-schema

githubはこちら
https://github.com/Kensei-Kimoto/kintone-effect-schema?tab=readme-ov-file

終わりに

人生初のライブラリ公開は右も左もわからずずっとClaudeに泣きついていましたが、これくらい簡単なライブラリなら割と思いついてからサクッと公開できていいかもしれませんね。割と楽しかったです。

Discussion