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
77
DSLの使い所
disc99
March 27, 2017
Tweet
Share
More Decks by disc99
See All by disc99
アーキテクチャ選択の裏側
disc99
0
40
120リポジトリを1つのMonorepoに統合した理由
disc99
1
960
モノリスとマイクロサービスを経てモジュラモノリスを導入した実践事例
disc99
25
14k
PaaS DX by Cloud Native Buildpacks
disc99
0
200
全てのAPIをProtocol Buffersで管理する / Manage all APIs with Protocol Buffers
disc99
2
5.1k
Serverless Application
disc99
1
2.7k
イベント駆動マイクロサービスアーキテクチャ / Event-Driven Microservices Architecture
disc99
4
2.6k
Event Sourcing 101
disc99
1
170
NGINX Blogから考えるマイクロサービスのProxy設計
disc99
0
860
Other Decks in Technology
See All in Technology
Javaの新しめの機能を知ったかぶれるようになる話 #kanjava
irof
3
4.9k
ソフトウェアプロジェクトの成功率が上がらない原因-「社会価値を考える」ということ-
ytanaka5569
0
130
スケールアップ企業のQA組織のバリューを最大限に引き出すための取り組み
tarappo
4
960
お問い合わせ対応の改善取り組みとその進め方
masartz
1
370
年末調整プロダクトの内部品質改善活動について
kaomi_wombat
0
210
移行できそうでやりきれなかった 10年超えのシステムを葬るための戦略
ryu955
2
490
アプリケーション固有の「ロジックの脆弱性」を防ぐ開発者のためのセキュリティ観点
flatt_security
32
12k
問題解決に役立つ数理工学
recruitengineers
PRO
7
2.2k
チームの性質によって変わる ADR との向き合い方と、生成 AI 時代のこれから / How to deal with ADR depends on the characteristics of the team
mh4gf
4
340
ウェブアクセシビリティとは
lycorptech_jp
PRO
0
280
SSH公開鍵認証による接続 / Connecting with SSH Public Key Authentication
kaityo256
PRO
2
220
Proxmox VE超入門 〜 無料で作れるご自宅仮想化プラットフォームブックマークする
devops_vtj
0
160
Featured
See All Featured
Embracing the Ebb and Flow
colly
85
4.6k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
30k
The Cost Of JavaScript in 2023
addyosmani
48
7.6k
Why You Should Never Use an ORM
jnunemaker
PRO
55
9.3k
Bash Introduction
62gerente
611
210k
Producing Creativity
orderedlist
PRO
344
40k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.2k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Build The Right Thing And Hit Your Dates
maggiecrowley
34
2.6k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Code Review Best Practice
trishagee
67
18k
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