Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
はやい開発のためのJSONデータ型の活用
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
sunnyone
August 24, 2023
Programming
190
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
はやい開発のためのJSONデータ型の活用
sunnyone
August 24, 2023
More Decks by sunnyone
See All by sunnyone
AIコーディング時代に意識したい縦と横
sunnyone
0
100
Rustとgtk-rsで自分用GUIツールを作ろう
sunnyone
1
92
multirange 型(多重範囲型)の活用
sunnyone
0
120
開発者とのコミュニケーションのはじめかた
sunnyone
0
66
概念モデル→論理モデルで気をつけていること
sunnyone
3
550
印象に残ったLLMの使い方5選
sunnyone
0
42
シンプルじゃないテーブルの見つけ方
sunnyone
1
390
Next.js App Router登場後の話
sunnyone
0
86
フロントエンドトレンドのふりかえりと事業に合わせた選択
sunnyone
0
120
Other Decks in Programming
See All in Programming
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
420
Prismを使った型安全な暗号化_関数型まつり2026
_fhhmm
0
150
Foundation Models frameworkで画像分析
ryodeveloper
1
130
AI時代のPHPer生存戦略 ~「言語、もうなんでもよくない?」に本気で向き合う~
vivion
0
150
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
170
Go言語とトイモデルで学ぶTransformerの気持ち / fukuokago23-transformer
monochromegane
0
140
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
200
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
170
FDEが実現するAI駆動経営の現在地
gonta
2
200
【SRE NEXT 2026 Lunch Session】一人目専任SREの立ち上げを加速する ― AIと進めたオンボーディングで2分を0.04秒にした話
pkshadeck
PRO
0
3k
Lean は証明の正しさを確認するためだけのツールって思ってませんか?
inoueasei
1
110
AWS CDK を「作」ってみた 〜フルスクラッチで見えた CDK の裏側〜 / aws-cdk-from-scratch
gotok365
3
500
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
331
22k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Automating Front-end Workflow
addyosmani
1370
210k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
410
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.4k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Producing Creativity
orderedlist
PRO
348
40k
The Limits of Empathy - UXLibs8
cassininazir
1
530
Testing 201, or: Great Expectations
jmmastey
46
8.2k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Transcript
はやい開発のための JSON データ型の活用 1
アジェンダ JSON 型とは JSON 型のメリット JSON 型の運用上の課題と対策 結論 2
JSON 型とは RDB に備わっているJSON を格納するためのデータ型 json 型やjsonb 型 JSON のための関数もある
->> 演算子, json_array_elements, etc 今回はRDB の機能自体については触れません 3
JSON 型のメリット 可変の構造を入れられる int やtimestamp などはそれぞれのもの ???「決めなくていい!早くできる!!」 4
JSON の例 { "title": "SQL アンチパターン", "author": "Bill Karwin" }
5
JSON 型の運用上の課題:構造が変わる ???「タイトルの一部を太字にしたいんですけど」 { "title": [ { "text": " 失敗",
"type": "strong" }, { "text": " から学ぶRDB の正しい歩き方" }, ], "author": " 曽根 壮大" } 6
JSON 型の運用上の課題への対策 マイグレーションする 互換性がある構造にする 複数バージョンに対応する 7
対策 1. マイグレーションする クエリー一発というわけにいかないことが多い 変換ロジックの実装が必要 実装の時間がかかる 変換が難しい構造になることがある 木の一部にあるような例だと辿るのも大変 8
対策 2. 最初から柔軟性のある構造にする ある程度変更を見越しておく。 { "title": [ { "text": "SQL
パズル" }, ], "author": " ジョー・セルコ" } → 想定するにも限界がある 9
対策 3. 複数バージョンに対応する 複数の形のデータを排除することは諦め、ロジックがどちらの値も 想定する 10
複数バージョンの罠 本来の目的の中に今の実装にない過去データの構造が入り込む 開発速度を下げる function BookBox({title}) { if (title instanceof string)
{ // こういうのが増えていく return <Box><div>{title}</div></Box>; } // 本来は見た目をどうにかするのが役割 return <Box><DecoratedText text={title} /></Box>; } 11
罠の原因と対策 本来の業務の役割に、永続化されたデータを解釈する役割が重なっ ている データを保存する目的と表示する目的が異なることも多い 複数バージョンを想定する場合は、データを解釈する層を用意する 最初からデータをそのままで使えないことを想定した構成にして おく 後付けで一貫して足すことは大変なことに注意 12
例 こういう層を書けるようにしておくと、本来の役割に集中できる function parseFooData(bookData): Data { if (bookData instanceof string)
{ return [ { text: bookData.title } ]; } return bookData; } function BookBox({book}) { return <Box><DecoratedText text={title} /></Box>; } 13
JSON 型、 ほんとうにはやかったのだろうか? 14
結論 RDB を使えるなら使う方がはやくない? マイグレーションのための仕組みがある データに対する制約をかけやすい 変なデータが入っていることを想定する必要性が下がる 制約によってはアンチパターン: EAV(Entity Attribute Value)
も考慮 を JSON を使わなければいけないときは覚悟をもって使いましょう 15