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
uroboroSQLをきっかけに、責務の在り方を考えてみた
Search
Sudo Mayu
July 29, 2026
31
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
uroboroSQLをきっかけに、責務の在り方を考えてみた
2026.07.26 【札幌7/26】JPUG-Ezo#1 北海道支部リブート勉強会
Sudo Mayu
July 29, 2026
More Decks by Sudo Mayu
See All by Sudo Mayu
留年・ニート・ 内定取り消しの危機!?~こんな私が、未来は明るいと思えるようになるまで~
sudom
0
91
道民学生ボランティアスタッフ体験記 in 東京
sudom
0
8
私流 エントリー先の選び方 ~技術イベントが好きな方向け~
sudom
0
7
公立千歳科学技術大学 修士2年生、私の近況
sudom
0
16
大学×環境構築
sudom
0
38
大学生活から見えたラフなアジャイルの形
sudom
0
38
テストコードってすごい!
sudom
0
51
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
270
Why Our Code Smells
bkeepers
PRO
340
58k
Utilizing Notion as your number one productivity tool
mfonobong
4
550
Designing Experiences People Love
moore
143
24k
Skip the Path - Find Your Career Trail
mkilby
1
190
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
210
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
530
Transcript
uroboroSQLをきっかけに、 責務の在り方を考えてみた Sudo Mayu
自己紹介 須藤 真由(Sudo Mayu) 普段はJavaDoのスタッフ、山川研究室の研究員 学生時代はドメイン駆動設計を研究にしたくらいモデリングが好き 内定先のFuture株式会社でシステム開発アルバイト中 最近、SQLを読むときに参考にしてるもの →postgreSQLユーザー会のドキュメント
uroboroSQLとは 2Way-SQLが利用可能なJava製のシンプルなSQL実行ライブラリ フューチャーアーキテクト社内にて、2006-2007年頃に開発 S2Daoを参考にしている 【設計思想】 SQLに足りないところをJavaで補う
2WaySQLってほんとに便利 インピーダンスミスマッチ: DBとアプリケーションはレイヤーが異なる データモデルとドメインモデル間には不整合が発生
2WaySQLってほんとに便利 インピーダンスミスマッチの解決策 : O/Rマッピング周辺の手法 ・Dynamic SQL ・Query Builder(jOOQ、Querydslなど) ・Specificationパターン/Criteriaスタイル ・一般的なSQL
Template ・2WaySQL(uroboroSQL、Domaなど)
それぞれの責務の在処を比べてみたい
6パターン作ってみた
題材 登録されているメンバーから絞り込む アプリケーションはJavaで構築 対象テーブル
JDBCのDynamic SQL SQL文字列そのものをJavaコード内で少 しずつ組み立て SQL実行、ResultSetからMemberへの 変換までがJava側に集まっている
JDBCのSQLを極力ファイルに切り分け SQLファイルはある 任意条件の有無、IN句の ? 生成、 LIKE値加工、バインド値の順番管理は Java側に残っている
Query Builder SQL断片とバインド値の対応を SqlQueryBuilderに寄せて、 Repository側は 「条件があれば追加する」という呼び出しに集中
Specificationパターン/Criteriaスタイル 検索条件や業務条件をJavaの 部品として表現 SQLへの反映は Repository側に 寄せる
SQL Template Java側は「使うSQLファイ ル」と「渡すパラメータ」を指 定するだけ、 条件分岐やIN句は SQLテンプレート側に寄る。 LIKE用の値加工は 実装方式によってJava側に 残ることもある
2WaySQL バインドコメントと ダミー値 (バインドパラメーター) により、 SQLクライアントに 貼り付けて通常のSQL として試しやすい
色んな方法があることが 分かりました (勉強になりました。使い方間違ってるとかあったら教えていただきたいです)
使い比べてみた感想 ・皆さんどう使い分けてるのか気になる! ・アプリケーション側とデータベース側、 どっちにどんなドメイン知識を置いてどんな責務を担わせるのか プロジェクトやシステムの規模によって様々で答えはないと思うけど、 2WaySQLでその選択肢が増えている!
uroboroSQL使ってみた感想 最初にアルバイトのプロジェクトのSQLに触れた時 SQL長い!読むの大変(でも今考えるとuroboroSQLのせいじゃない) グレーアウトしてるのに実行に影響するの不思議 数ヶ月経った後… 3ヶ月くらいから読み慣れてきた感覚 4ヶ月目の今、一番見やすくなってる(最近も500行くらいの書けた) 「書けてもJava」みたいな状態からスタートした私、とてもびっくり
増田亨さん:ソフトウェア設計の実践的な考え方 - Speaker Deck
それぞれどの領域に合う? Specification/ Criteria SQLTemplate(2WaySQL) 処理を細分化して ドメインモデルを表現可能 複雑な検索・一覧などを、 既存の型やSQLで堅実に表現 JDBC Dynamic
SQL、 QueryBuilder 凝った設計よりも 小さく早く済ませることが可能
uroboroSQLには便利機能が
REPL(Read-Eval-Print Loop) CLIで対話しながらSQLを実行できる 確認できる項目 ・実行するSQL ・バインドパラメータ ・SQL文の中の評価式とその評価結果 ・検索結果 ・実行時間
SQLカバレッジ 条件分岐がアプリケーション側にある →アプリケーションのテストで カバレッジ計測 条件分岐がSQLにある →uroboroSQLで測れる! 2WaySQLならではの困りごとに対応
uroboroSQL-fmt
uroboroSQL-fmt VSCodeの拡張機能
uroboroSQL-fmt Web上でデモれる インストール不要
モデリングによっても変わるのでは? アプリケーション側のドメインモデリング インピーダンスミスマッチにも程度がありそう DB側のデータモデリング
8月29日(土)、JavaDoやります! テーマ:バックエンドのモデリング手法 ゲスト会
ありがとうございました アンカンファレンスでもお話しましょう