Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
はやい開発のためのJSONデータ型の活用
Search
sunnyone
August 24, 2023
Programming
210
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時代のDependency Injection
sunnyone
0
41
AIコーディング時代に意識したい縦と横
sunnyone
0
130
Rustとgtk-rsで自分用GUIツールを作ろう
sunnyone
1
130
multirange 型(多重範囲型)の活用
sunnyone
0
160
開発者とのコミュニケーションのはじめかた
sunnyone
0
72
概念モデル→論理モデルで気をつけていること
sunnyone
3
580
印象に残ったLLMの使い方5選
sunnyone
0
52
シンプルじゃないテーブルの見つけ方
sunnyone
1
410
Next.js App Router登場後の話
sunnyone
0
91
Other Decks in Programming
See All in Programming
はじめてのPLATEAU
nokonoko1203
1
610
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
290
複数ドメインを一つのアプリに統合するFlutterの設計と運用_FlutterKaigi2026登壇資料(須永高弘)
takahirosunaga
0
160
우리의 Nitro Modules는 당신의 Turbo Modules보다 아름답다
l2hyunwoo
0
260
Performance Optimization With LLMs
xleitix
0
250
高橋メソッドでCVE解説シリーズ 〜CVE-2026-112816〜
hakkadaikon
0
230
自作Discord音声botをLambda MicroVMsに移行した話 / Migrating My Discord Voice Bot to Lambda MicroVMs
akihisaikeda
1
300
AI駆動開発4年目の現在地(『あなたはFDEになるべきか?』イベント資料)
kumaiu
0
310
Goコンパイラを作ってGoをもっと理解する / Build a Go compiler to better understand Go
ikura_hamu
0
130
flutter_test のその先へ — Flutter アプリの LLM 機能に「評価」という品質保証を
kosukesaigusa
0
200
作れるエンジニアから、価値を届けるエンジニアへ
ryunakayama
1
240
Web3Dライブラリを作ってVue Custom Rendererの仕組みを理解しよう / lets learn vue custom renderer by making 3d library
drumath2237
1
130
Featured
See All Featured
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
630
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
510
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
320
It's Worth the Effort
3n
188
29k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
60k
BBQ
matthewcrist
90
10k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.3k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.4k
Amusing Abliteration
ianozsvald
1
380
Being A Developer After 40
akosma
PRO
92
590k
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