search
LoginSignup
6

More than 3 years have passed since last update.

posted at

JSONSchemaのススメ

システム開発をしている時、マスタデータを投入するシーンがあるかと思います。
そんな時に、マスタメンテナンスやImport機能があれば理想的ですし、RDBを使っているならばCSVで作れば大体何とかなります。
が、そのどちらでもないケース、ドキュメント型データベースにデータを投入しようということになると、かなり面倒です。
階層構造を持つデータを入力しなければいけないため、多少コードにより加工をするにしても元データ自体が階層構造を持ったデータ、つまりJSON(やYAML、TOML)になることのが普通です。
(いや、ならない。CSVでも綺麗に出来る、というのならそもそもDBの選定や設計を間違ったことを疑うべきです)

JSONでデータをデータを作るのはしんどい

しかし、JSONでデータを作るのは中々人に取って骨が折れます。
CSVの場合は項目名は先頭行やプログラム内に定義してしまえばそれで終了ですが、
JSONやの場合各項目のプロパティ名について間違えないように書かなければなりません。
配列の中にObjectが入り込んでいる場合など、うんざりします。
単純に記述量が多くなって大変ですし、えてしてドキュメントデータベースの類はスキーマレスなことが多いのでデータ投入までのフローに静的チェックをかけてくれる部分がありません。これは怖い。

せめて手元でValidationや補完が出来るようにしよう

そんな時に訳に立つのがJSONSchemaです。
これはJSONにおけるSchema定義を作るもので、VSCodeなどのモダンなエディタなら、
この定義に基づいて補完やバリデーションをかけてくれます。

参考:https://qiita.com/t-mimura/items/e0f12ea5678b1a10bba3

エディタで補完とバリデーションがかかるだけで作業効率・正確性共に向上します。

いやでもSchemaの書き方よく分からないし作るの面倒くさいんだけれども

では、Schemaをどこから調達すればいいのか。
世に広まっているシステムの設定ファイルだったら探せばどこかしらに転がっていますが、
今回の想定は自前のシステムのためのJSONです。

きちんとJSONSchemaの書き方を学んで手書きするのも一つの手ですが、
今の世の中色々と手抜き効率化する方法があります。

JSON Schema Tool

サンプルとなるJSONを張り付けてInferボタンを押すと、JSONSchemaを自動作成してくれるツール。
Enum等まできちんと作ろうとするとさすがに手直しが必要ですが、
項目名の補完やチェック程度なら大体これで済んでしまいます。
結果をコピーすると何故か行番号までついてきたりと若干突っ込みどころがありますが、
それを差し引いても非常に便利なサービスです。

Typescript JSON schema generator

こちらはVsCodeの拡張ですが、Typescriptの型定義からJSONSchemaを作成できます。
TypeScriptの型に沿った形で作成されるので、かなり高精度に書けます。

まとめ

  • JSON Schemaがあると非常に安心感がある
  • いちいち手書きしなくても自動作成に頼ることも出来る

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
6