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
DSLの使い所
Search
disc99
March 27, 2017
Technology
0
49
DSLの使い所
disc99
March 27, 2017
Tweet
Share
More Decks by disc99
See All by disc99
120リポジトリを1つのMonorepoに統合した理由
disc99
1
400
モノリスとマイクロサービスを経てモジュラモノリスを導入した実践事例
disc99
24
12k
PaaS DX by Cloud Native Buildpacks
disc99
0
160
全てのAPIをProtocol Buffersで管理する / Manage all APIs with Protocol Buffers
disc99
2
4.4k
Serverless Application
disc99
1
2.3k
イベント駆動マイクロサービスアーキテクチャ / Event-Driven Microservices Architecture
disc99
4
2.2k
Event Sourcing 101
disc99
1
140
NGINX Blogから考えるマイクロサービスのProxy設計
disc99
0
770
アーキテクチャ決定のお供にLightweight Architecture Decision Records
disc99
1
340
Other Decks in Technology
See All in Technology
超アナログ中心な印刷会社で「エンジニアリング」を見直す
logica0419
4
150
IaCツールのいろいろ
takesection
0
200
EC2の脆弱性対応で何が使える? Inspector や SSM あたりを整理する #nakanoshima_dev
masahirokawahara
1
180
What's is Bluesky
shinoharata
0
130
最適化ソリューションサービスにおける VSM分析とチームトポロジー
muteua
3
2.4k
生成 AI の評価方法
asei
8
1.1k
テストコードの観点から見たSansanのアーキテクチャ変遷
sansantech
PRO
2
160
スクラムチームだけどエクセルで要件定義書を書くことにしました / Requirements-Specification-Document-in-Scrum
okamototakuyasr2
0
200
ベイジアンABテストってありなの? / Is Bayesian AB Testing Truly Effective?
ak_iyama
1
500
RDS for Db2 はじめの一歩・作り方編 #1 /20240628-RDSforDb2-dojo
mayumihirano
0
180
モノリスから小さなシステムへ / Chatworkシステム移行の現在地と今後について@開発生産性カンファレンス
tanakayuki
1
1.3k
Four Keysだけじゃ足りなくない? 〜俺たちだけのFour Keysを探して〜
rinchsan
2
1.5k
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
34
6.2k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
22
1.8k
Build your cross-platform service in a week with App Engine
jlugia
227
17k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
119
18k
StorybookのUI Testing Handbookを読んだ
zakiyama
14
4.8k
Agile that works and the tools we love
rasmusluckow
325
20k
Thoughts on Productivity
jonyablonski
62
4k
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3.2k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
323
21k
Product Roadmaps are Hard
iamctodd
PRO
46
10k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
359
22k
10 Git Anti Patterns You Should be Aware of
lemiorhan
650
58k
Transcript
DSLの使い所 #ShinjukuLT @disc99
もくじ • DSLとは • DSLの種類類 • DSLの利利⽤用例例 • まとめ
DSLとは • ドメイン特化⾔言語(Domain Specific Language) • <=> 汎⽤用⾔言語(JavaやRubyなど) • 特定の領域(ドメイン)の問題を解決
• ミニ⾔言語
なぜDSL? • ドメイン特化⾔言語 > コードは当該分野の専⾨門 家にとって読みやすく理理解 しやすくなります
DSLの種類類 • 内部DSL • 汎⽤用のプログラミング⾔言語の機能を利利⽤用 • 外部DSL • 汎⽤用のプログラミング⾔言語とは別の構⽂文
内部DSL • ホスト⾔言語(Java、Rubyなどの汎⽤用⾔言語) • ⾃自由度が⾼高い⾔言語が便便利利(シンタックスシュ ガー、フォーマット、AST変換、マクロなど) • ホスト⾔言語の機能を呼び出せるものもある • ホスト⾔言語の構⽂文の制約あり
内部DSLの利利⽤用例例 • Gradle: ビルドに特化(Groovy) • Vagrant: 仮想開発環境構築に特化(Ruby) • Gatling: 負荷テストに特化(Scala)
• Apache Camel: 様々な処理理を連結に特化 (Java)
外部DSL • ホスト⾔言語の制約がほとんど無い • 問題領域に対して最適な表現を選択できる • 構⽂文解析機能が必要
外部DSLの利利⽤用例例 • make: ビルド⾃自動化に特化 • 2Way-SQL: アプリ、ツール両⽅方からのSQLの 実⾏行行に特化 • SQLそのものやCSSなど分類類される場合も
My DSL • Hogan • https://github.com/disc99/hogan • DB操作を直感的に⾏行行うためのライブラリ • DB操作に特化
• Groovyの演算⼦子オーバーロードとAST変換を利利⽤用
Hoganの利利⽤用例例 • SQLテーブルっぽく構 造を定義 => INSERT実⾏行行
コントリビュート⼤大歓迎!!
まとめ • DSLは問題領域(ドメイン)に特化した⾔言語 • DSLには内部DSLと外部DSLが存在する • どちらを使うかはドメインをどのように表現し たいか次第 • DSLには⼀一定の学習コスト、メンテコストが発
⽣生するので適切な使い所を考える
参考 • プログラマが知るべき97のこと:ドメイン特化⾔言語 • http:// xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.co m/ %E3%82%A8%E3%83%83%E3%82%BB%E3% 82%A4/%E3%83%89%E3%83%A1%E3%82% A4%E3%83%B3%E7%89%B9%E5%8C%96%E
8%A8%80%E8%AA%9E