SlideShare a Scribd company logo
Submit Search
Upload
Login
Signup
PHPカンファレンス関西2017 PHPにおけるDSL
Report
Hideharu MATSUFUJI
Follow
Jul. 15, 2017
•
0 likes
•
1,335 views
1
of
20
PHPカンファレンス関西2017 PHPにおけるDSL
Jul. 15, 2017
•
0 likes
•
1,335 views
Download Now
Download to read offline
Report
Engineering
PHPカンファレンス関西2017 PHPにおけるDSL
Hideharu MATSUFUJI
Follow
Recommended
Gulpで学ぶSassとPug
シオリ ショウノ
849 views
•
24 slides
KOF2017 東海道らぐLT
Masataka Kondo
323 views
•
22 slides
Geek women japanのロゴをhtmlとcssで作る
Lina Katayose
364 views
•
17 slides
Geek women japanのロゴをhtmlとcssで作る2
Lina Katayose
987 views
•
17 slides
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
parrotstudio
1.4K views
•
77 slides
簡単!低コスト!楽しい!レスポンシブ デザイン ディレクション
Yuji Nojima
5.3K views
•
48 slides
More Related Content
Similar to PHPカンファレンス関西2017 PHPにおけるDSL
今から始めるDocument db
Kazunori Hamamoto
2.7K views
•
47 slides
RESTを使ってDRUPAL8のNODE情報を取得してみた
iPride Co., Ltd.
79 views
•
33 slides
PFIセミナー 2013/02/28 「プログラミング言語の今」
Preferred Networks
11.4K views
•
65 slides
あと一つプログラミング言語を 覚えたら死ぬ! 脳みそがパンクしそうな あなたのための nodeJSことはじめ
文樹 高橋
545 views
•
26 slides
Cumiki - エンジニアのための、ちょっといい感じのドキュメント作成ツール
Ryo Suzuki
16.2K views
•
32 slides
簡単なものこそBDDで! (LTSpiral02)
Ryo Nagai
604 views
•
19 slides
Similar to PHPカンファレンス関西2017 PHPにおけるDSL
(20)
今から始めるDocument db
Kazunori Hamamoto
•
2.7K views
RESTを使ってDRUPAL8のNODE情報を取得してみた
iPride Co., Ltd.
•
79 views
PFIセミナー 2013/02/28 「プログラミング言語の今」
Preferred Networks
•
11.4K views
あと一つプログラミング言語を 覚えたら死ぬ! 脳みそがパンクしそうな あなたのための nodeJSことはじめ
文樹 高橋
•
545 views
Cumiki - エンジニアのための、ちょっといい感じのドキュメント作成ツール
Ryo Suzuki
•
16.2K views
簡単なものこそBDDで! (LTSpiral02)
Ryo Nagai
•
604 views
レスポンシブ+α 第12回WordBench大阪
Junko Nukaga
•
1.8K views
Mongo db勉強会
otmb
•
2.5K views
Aiming study#6pdf
Koutaro Chikuba
•
21.7K views
Macで快適にプログラミング
Yusuke Sakurai
•
2.7K views
ITの開発現場における最近の当たり前これからの当たり前(主観)
小川 昌吾
•
510 views
141115 making web site
Himi Sato
•
277 views
WEBページを表示するまで
Shoichi Kakizaki
•
9K views
Code Anything
Yoshitaka Kawashima
•
5.5K views
フルリモート2ヶ月 やって編み出した コミュニケーションのコツ
Tomoyuki Sugita
•
473 views
Webセミナー「RAD Studio 10.1 Berlin Update 2 Anniversary Edition 新機能ガイド」
Kaz Aiso
•
624 views
Xtext 紹介
Akira Tanaka
•
1.6K views
グリッドレイアウトを簡単に行うJavaScript!Masonry.js
Yoshinori Kobayashi
•
4.1K views
Drupal on bluemix20150902
Yasushi Osonoi
•
6.3K views
Web講座 第1回
nanametown
•
478 views
PHPカンファレンス関西2017 PHPにおけるDSL
1.
PHPにおける DSL PHPカンファレンス関西 2017 松藤 秀治
(2017-7-15)
2.
じこしょうかい ● 松藤 秀治(まつふじ ひではる) ● matsu_hide ●
フリーエンジニア/ND&I
3.
はじめに ● 「PHPでDSLを使ってみるための一例」です。 ● 「他にもこんな実装があるよー」という方はぜひ教えてく ださい! ●
いろいろ抜けているトピックが多々多々多々あると思いま すが、生暖かい目で見ていただけると助かります(_ _)
4.
DSLの例 SQL → RDBへの問い合わせ言語 シェルスクリプト
→ Unixなどで利用 CSS → HTMLの体裁を表現する
5.
PHPはDSL? 「PHPは、最初の時点ではWebページ作成に使うツールを集 めたフレームワークであり、作者としても「スクリプト言語を作 るなどといった考えはまったくなかった」のであるが・・・」 (Wikipedia) DSLから汎用のプログラミング言語に発展
6.
DSLってなに? Domain Specific Language
(ドメイン特化(固有)言語) 「DSLとは、小さな問題領域に的を絞ったカスタム言語であ る。DSLは、その領域に固有の表現で記述し、検証する。」 (ドメイン特化型開発 p.12)
7.
それがない世界 RDBへの問い合わせをSQLを使わずに書く? WebページをHTMLだけでデザインする? 問題領域に適した表現で記述することで理解しやすくなり、 生産性が上がる。⇒変化に強くなる
8.
今回の問題領域(サンプル) ECサイトである条件を満たすとき割引する。 「キャンペーン商品を含んでいる場合は合計金額から10%値 下げしたい。」 「合計金額が1000円を超えたら、送料無料にしたい。」
9.
実践!DSL パーサー(構文解析) エンジン エディター
10.
実践!DSL orz
11.
実践!DSL パーサー ⇒ YAML エンジン
⇒ ExpressionLanguage (Symfony) エディター ⇒ あきらめる (or Xtext)
12.
ExpressionLanguage Component 式をコンパイルして、評価するエンジン。 ワンライナー(戻り値はbooleanでなくても可) Symfonyが提供しているコンポーネント。
13.
今回のDSL キャンペーン商品の割引: 条件: カート.キャンペーン商品を含む() 割引: カート.商品合計()
* 0.1 全体はYAMLで記述 「条件」と「割引」に ExpressionLanguageを 使う
14.
Cartクラス ... public function 送料() { return
$this->getShippingCost(); } public function キャンペーン商品を含む () { return $this->existsCampaignProduct(); } public function 商品合計() { return $this->getProductTotalPrice(); } ...
15.
ExpressionLanguageを使う部分(抜粋) $el = new
ExpressionLanguage(); foreach ($config as $name => $values) { $isSatisfied = $el->evaluate($values['条件'], ['カート' => $cart]); if (! $isSatisfied) continue; $price = $el->evaluate($values['割引'], ['カート' => $cart]); $cart->addDiscount(new Discount($name, $price)); }
16.
デモ
17.
オブジェクト指向で実装すると・・・ 条件・割引をインターフェイスで抽象化したり。 DIコンテナで注入できるようにしたり。 などなど。 いずれにしても条件・割引のルールが変更されるたびに実 装が必要になる。
18.
DSLのデメリット 設計が難しい。 ・問題領域の特定 ・想定外の要求に対してどう対応するか DSLを使うかどうかに関わらず、難しい問題なので、設計力 が重要になってくる。
19.
まとめ ● DSLは小さな問題領域にフォーカスしたものである。 ● PHPでもライブラリなどを利用することによってDSLを定義 できる。 ●
DSLの設計は難しいがメリットも大きい。 ● コードで実装することだけが解決策ではない。
20.
参考 サンプル: https://github.com/matsufuji/phpck2017-dsl ExpressionLanguage: http://symfony.com/doc/current/components/expression_ language.html