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
PostgreSQL開発とテスト
Search
forcia_dev_pr
February 21, 2022
Programming
0
550
PostgreSQL開発とテスト
「FORCIA Meetup #4 高速検索を支えるPostgreSQLのノウハウ」の資料です
forcia_dev_pr
February 21, 2022
Tweet
Share
More Decks by forcia_dev_pr
See All by forcia_dev_pr
"書く文化"を仕組みで育てる──フォルシアの技術ブログ継続戦略
forcia_dev_pr
1
220
新しいおもちゃを見つけたい私がやっている情報収集
forcia_dev_pr
2
450
「Pythonの環境構築について」と記事作成で意識したこと
forcia_dev_pr
1
160
Neovim で VS Code みたいにコーディングする
forcia_dev_pr
1
180
なぜ・どうやって・何を書く? 〜技術記事を書く習慣の作り方〜
forcia_dev_pr
1
190
第8回ゆるふわオンサイト 解説スライド
forcia_dev_pr
0
120
第7回ゆるふわオンサイト解説
forcia_dev_pr
0
250
第6回ゆるふわオンサイト解説
forcia_dev_pr
0
260
よくわかるFORCIAのエンジニア旅行SaaSプロダクト開発編
forcia_dev_pr
0
920
Other Decks in Programming
See All in Programming
AI Agent Tool のためのバックエンドアーキテクチャを考える #encraft
izumin5210
6
1.5k
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
7
4.2k
Canon EOS R50 V と R5 Mark II 購入でみえてきた最近のデジイチ VR180 事情、そして VR180 静止画に活路を見出すまで
karad
0
140
AIで開発はどれくらい加速したのか?AIエージェントによるコード生成を、現場の評価と研究開発の評価の両面からdeep diveしてみる
daisuketakeda
1
210
[AtCoder Conference 2025] LLMを使った業務AHCの上⼿な解き⽅
terryu16
6
1k
Developing static sites with Ruby
okuramasafumi
1
340
CSC307 Lecture 01
javiergs
PRO
0
650
Giselleで作るAI QAアシスタント 〜 Pull Requestレビューに継続的QAを
codenote
0
330
Flutter On-device AI로 완성하는 오프라인 앱, 박제창 @DevFest INCHEON 2025
itsmedreamwalker
1
180
Python札幌 LT資料
t3tra
7
1.1k
re:Invent 2025 のイケてるサービスを紹介する
maroon1st
0
160
Spinner 軸ズレ現象を調べたらレンダリング深淵に飲まれた #レバテックMeetup
bengo4com
1
210
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
sira's awesome portfolio website redesign presentation
elsirapls
0
100
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Designing for Timeless Needs
cassininazir
0
110
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
76
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.1k
Google's AI Overviews - The New Search
badams
0
880
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
0
51
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
140
Why Our Code Smells
bkeepers
PRO
340
58k
Transcript
PostgreSQL開発とテスト 吉田 侑弥 @フォルシア株式会社 2022.02.15 FORCIA Meetup#4
自己紹介 • 吉田 侑弥 (Yuya Yoshida) • ソフトウェアエンジニア@フォルシア株式会社 ◦ webアプリケーション
(TypeScript, Node.js, React, Next.js, NestJS, PostgreSQL) ◦ 大規模アプリ開発 ◦ パフォーマンスチューニング 2
DB関連のテストは(比較的)大変 • 一般的には ◦ アプリと比較して環境構築のコストが高い ◦ 作業者間の差異がない環境下のテスト(再現性の担保)が難しい • フォルシアでは以下のような工程が多い ◦
元のデータを検索用データに加工する(バッチSQL) ◦ データから必要なデータを高速に抽出する(オンラインSQL) ◦ 汎用的なモジュール開発(拡張機能やユーザー定義関数) →比較的テストの実施が容易な環境 3
テスト観点① • バッチSQL ◦ バッチ処理が正常終了するか ◦ 処理が意図した通りか • オンラインSQL ◦
正しいSQL文が生成されるか ◦ クエリが意図した通りか 4
テスト観点①…実施パターン • バッチSQL ◦ バッチ処理が正常終了するか → テストデータでバッチ実行 ◦ 処理が意図した通りか →
結合テスト • オンラインSQL ◦ 正しいSQL文が生成されるか → スナップショットテスト ◦ クエリが意図した通りか → 結合テスト 5
6 (補足)JSのテスト環境(Jest + Frisby) 6 • Jest: JSのテストフレームワーク • Frisby:
Jest上で動くAPIテスト フレームワーク • SQL文の生成はJest単体、結合テス トはJest + Frisbyで実施
拡張機能とは • postgreSQLは拡張性の高いRDBMS • フォルシアでも多くの拡張機能を活用 • 外部ツール ◦ pg_bigm, pg_bulkload
etc… • 自社ツール ◦ ユーザー定義関数(C言語) etc… 7
テスト観点② • 拡張機能・ユーザー定義関数 ◦ 正しく導入できるか ◦ 意図した結果を得られるか 8
テスト観点②…実施パターン • 拡張機能・ユーザー定義関数 ◦ 正しく導入できるか →仮想環境 (docker) でのビルド、インストール ◦ 意図した結果を得られるか
→リグレッションテスト 9
仮想環境 (docker) でのビルド • 新規プロジェクトの多くは仮想環境でDBサーバーを用意 →社内共通のpostgreSQLイメージを利用 • 汎用モジュール開発時 ◦ 共通イメージ環境下でのビルド、テスト(推奨)
10
pg_regress • postgreSQL標準のリグレッションテストツール • 実行すると一時的にサーバーが起動し、テスト用のDBが生成される • 予めSQL文と実行結果の準備が必要 11
DBテストとCI • これまで挙げたテストは全て手元だけでなくCIでも実行 ◦ DB周りの処理はどうしても環境の差異が出やすい CIでエラー検知するケースは体感かなり多い • ただし、ある程度マシンパワーと時間が必要 →時には実行タイミングをある程度制御することも e.g.
ビルドはmaster merge時のみ、バッチ処理は定時実行 等々… 12
現在議論中の内容 • SQLのsyntax check ◦ DBサーバーを介さずにチェックができると嬉しい ◦ pglast等を活用して実現できそう? • パフォーマンステスト
◦ 拡張や関数の効果を定量的に測定したい ◦ 実現方法を模索中 13
EOF