Enviar pesquisa
Carregar
PHPカンファレンス関西2017 PHPにおけるDSL
•
1 gostou
•
1,348 visualizações
Hideharu MATSUFUJI
Seguir
PHPカンファレンス関西2017 PHPにおけるDSL
Leia menos
Leia mais
Engenharia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 20
Baixar agora
Baixar para ler offline
Recomendados
Gulpで学ぶSassとPug
Gulpで学ぶSassとPug
シオリ ショウノ
KOF2017 東海道らぐLT
KOF2017 東海道らぐLT
Masataka Kondo
Geek women japanのロゴをhtmlとcssで作る
Geek women japanのロゴをhtmlとcssで作る
Lina Katayose
Geek women japanのロゴをhtmlとcssで作る2
Geek women japanのロゴをhtmlとcssで作る2
Lina Katayose
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
parrotstudio
簡単!低コスト!楽しい!レスポンシブ デザイン ディレクション
簡単!低コスト!楽しい!レスポンシブ デザイン ディレクション
Yuji Nojima
ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!
ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!
Toshiaki Maki
#nds34 LT
#nds34 LT
Kazumune Katagiri
Recomendados
Gulpで学ぶSassとPug
Gulpで学ぶSassとPug
シオリ ショウノ
KOF2017 東海道らぐLT
KOF2017 東海道らぐLT
Masataka Kondo
Geek women japanのロゴをhtmlとcssで作る
Geek women japanのロゴをhtmlとcssで作る
Lina Katayose
Geek women japanのロゴをhtmlとcssで作る2
Geek women japanのロゴをhtmlとcssで作る2
Lina Katayose
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
parrotstudio
簡単!低コスト!楽しい!レスポンシブ デザイン ディレクション
簡単!低コスト!楽しい!レスポンシブ デザイン ディレクション
Yuji Nojima
ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!
ShibuyalispTT#4 LT 他言語で作ったWEBページをLispでも!
Toshiaki Maki
#nds34 LT
#nds34 LT
Kazumune Katagiri
今から始めるDocument db
今から始めるDocument db
Kazunori Hamamoto
RESTを使ってDRUPAL8のNODE情報を取得してみた
RESTを使ってDRUPAL8のNODE情報を取得してみた
iPride Co., Ltd.
PFIセミナー 2013/02/28 「プログラミング言語の今」
PFIセミナー 2013/02/28 「プログラミング言語の今」
Preferred Networks
あと一つプログラミング言語を 覚えたら死ぬ! 脳みそがパンクしそうな あなたのための nodeJSことはじめ
あと一つプログラミング言語を 覚えたら死ぬ! 脳みそがパンクしそうな あなたのための nodeJSことはじめ
文樹 高橋
Cumiki - エンジニアのための、ちょっといい感じのドキュメント作成ツール
Cumiki - エンジニアのための、ちょっといい感じのドキュメント作成ツール
Ryo Suzuki
簡単なものこそBDDで! (LTSpiral02)
簡単なものこそBDDで! (LTSpiral02)
Ryo Nagai
レスポンシブ+α 第12回WordBench大阪
レスポンシブ+α 第12回WordBench大阪
Junko Nukaga
Mongo db勉強会
Mongo db勉強会
otmb
Aiming study#6pdf
Aiming study#6pdf
Koutaro Chikuba
Macで快適にプログラミング
Macで快適にプログラミング
Yusuke Sakurai
ITの開発現場における最近の当たり前これからの当たり前(主観)
ITの開発現場における最近の当たり前これからの当たり前(主観)
小川 昌吾
141115 making web site
141115 making web site
Himi Sato
WEBページを表示するまで
WEBページを表示するまで
Shoichi Kakizaki
Code Anything
Code Anything
Yoshitaka Kawashima
フルリモート2ヶ月 やって編み出した コミュニケーションのコツ
フルリモート2ヶ月 やって編み出した コミュニケーションのコツ
Tomoyuki Sugita
Webセミナー「RAD Studio 10.1 Berlin Update 2 Anniversary Edition 新機能ガイド」
Webセミナー「RAD Studio 10.1 Berlin Update 2 Anniversary Edition 新機能ガイド」
Kaz Aiso
Xtext 紹介
Xtext 紹介
Akira Tanaka
グリッドレイアウトを簡単に行うJavaScript!Masonry.js
グリッドレイアウトを簡単に行うJavaScript!Masonry.js
Yoshinori Kobayashi
Drupal on bluemix20150902
Drupal on bluemix20150902
Yasushi Osonoi
Web講座 第1回
Web講座 第1回
nanametown
Mais conteúdo relacionado
Semelhante a PHPカンファレンス関西2017 PHPにおけるDSL
今から始めるDocument db
今から始めるDocument db
Kazunori Hamamoto
RESTを使ってDRUPAL8のNODE情報を取得してみた
RESTを使ってDRUPAL8のNODE情報を取得してみた
iPride Co., Ltd.
PFIセミナー 2013/02/28 「プログラミング言語の今」
PFIセミナー 2013/02/28 「プログラミング言語の今」
Preferred Networks
あと一つプログラミング言語を 覚えたら死ぬ! 脳みそがパンクしそうな あなたのための nodeJSことはじめ
あと一つプログラミング言語を 覚えたら死ぬ! 脳みそがパンクしそうな あなたのための nodeJSことはじめ
文樹 高橋
Cumiki - エンジニアのための、ちょっといい感じのドキュメント作成ツール
Cumiki - エンジニアのための、ちょっといい感じのドキュメント作成ツール
Ryo Suzuki
簡単なものこそBDDで! (LTSpiral02)
簡単なものこそBDDで! (LTSpiral02)
Ryo Nagai
レスポンシブ+α 第12回WordBench大阪
レスポンシブ+α 第12回WordBench大阪
Junko Nukaga
Mongo db勉強会
Mongo db勉強会
otmb
Aiming study#6pdf
Aiming study#6pdf
Koutaro Chikuba
Macで快適にプログラミング
Macで快適にプログラミング
Yusuke Sakurai
ITの開発現場における最近の当たり前これからの当たり前(主観)
ITの開発現場における最近の当たり前これからの当たり前(主観)
小川 昌吾
141115 making web site
141115 making web site
Himi Sato
WEBページを表示するまで
WEBページを表示するまで
Shoichi Kakizaki
Code Anything
Code Anything
Yoshitaka Kawashima
フルリモート2ヶ月 やって編み出した コミュニケーションのコツ
フルリモート2ヶ月 やって編み出した コミュニケーションのコツ
Tomoyuki Sugita
Webセミナー「RAD Studio 10.1 Berlin Update 2 Anniversary Edition 新機能ガイド」
Webセミナー「RAD Studio 10.1 Berlin Update 2 Anniversary Edition 新機能ガイド」
Kaz Aiso
Xtext 紹介
Xtext 紹介
Akira Tanaka
グリッドレイアウトを簡単に行うJavaScript!Masonry.js
グリッドレイアウトを簡単に行うJavaScript!Masonry.js
Yoshinori Kobayashi
Drupal on bluemix20150902
Drupal on bluemix20150902
Yasushi Osonoi
Web講座 第1回
Web講座 第1回
nanametown
Semelhante a PHPカンファレンス関西2017 PHPにおけるDSL
(20)
今から始めるDocument db
今から始めるDocument db
RESTを使ってDRUPAL8のNODE情報を取得してみた
RESTを使ってDRUPAL8のNODE情報を取得してみた
PFIセミナー 2013/02/28 「プログラミング言語の今」
PFIセミナー 2013/02/28 「プログラミング言語の今」
あと一つプログラミング言語を 覚えたら死ぬ! 脳みそがパンクしそうな あなたのための nodeJSことはじめ
あと一つプログラミング言語を 覚えたら死ぬ! 脳みそがパンクしそうな あなたのための nodeJSことはじめ
Cumiki - エンジニアのための、ちょっといい感じのドキュメント作成ツール
Cumiki - エンジニアのための、ちょっといい感じのドキュメント作成ツール
簡単なものこそBDDで! (LTSpiral02)
簡単なものこそBDDで! (LTSpiral02)
レスポンシブ+α 第12回WordBench大阪
レスポンシブ+α 第12回WordBench大阪
Mongo db勉強会
Mongo db勉強会
Aiming study#6pdf
Aiming study#6pdf
Macで快適にプログラミング
Macで快適にプログラミング
ITの開発現場における最近の当たり前これからの当たり前(主観)
ITの開発現場における最近の当たり前これからの当たり前(主観)
141115 making web site
141115 making web site
WEBページを表示するまで
WEBページを表示するまで
Code Anything
Code Anything
フルリモート2ヶ月 やって編み出した コミュニケーションのコツ
フルリモート2ヶ月 やって編み出した コミュニケーションのコツ
Webセミナー「RAD Studio 10.1 Berlin Update 2 Anniversary Edition 新機能ガイド」
Webセミナー「RAD Studio 10.1 Berlin Update 2 Anniversary Edition 新機能ガイド」
Xtext 紹介
Xtext 紹介
グリッドレイアウトを簡単に行うJavaScript!Masonry.js
グリッドレイアウトを簡単に行うJavaScript!Masonry.js
Drupal on bluemix20150902
Drupal on bluemix20150902
Web講座 第1回
Web講座 第1回
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
Baixar agora