みそみそりんりんblog

勉強したことを書いていきます

Rubyのドメイン特化言語(DSL)

ドメイン特化言語(DSL: Domain-Specific Language)

問題領域に特化した言語を意味する
特定の作業の遂行や問題の解決に特化して設計されたコンピュータ言語。
Railsでは、Validations・ActiveRecord・Rake・RSpecなど幅広く使われている。

汎用語(GPL: General Purpose Language) ← DSLの反意語

通常は多種多様な問題に対応できるものを意味する

Rubyで簡単なDSLを書いてみる

DSL定義ファイル

def pay(souvenir)
  puts "結果: #{souvenir}" if yield
end
load 'event.rb'

DSLテスト用のイベントファイル(event.rb)

def souvenir_price
  500 # 実際は、標準入力とか、DBから読み込む
end

my_money = 400

pay "お土産買えた" do
  souvenir_price < my_money
end

pay "お土産買えない" do
  souvenir_price > my_money
end

実行結果

=>  "結果: お土産買えた"
まとめ

今回は初歩の初歩のDSLしか書いていないが、
DSLを書くことにより、非プログラマーの人でも
簡単にイベント定義をすることができる。

参考文献

https://e-words.jp/w/DSL.html

メタプログラミングRuby 第2版 | Paolo Perrotta, 角 征典 |本 | 通販 | Amazon

【Rubyによるデザインパターンまとめ14】DSL(ドメイン特化言語) - 銀行員からのRailsエンジニア