SlideShare une entreprise Scribd logo
1  sur  21
ちょっとしたオレオレDSLも
抽象構文木っぽくしておくと
後からの拡張に対応しやすいよねっていう
ちょっとしたお話
2017/02/21
和田潤也
Copyright © 2014 Sansan, Inc. All rights reserved.
> 自己紹介
Sansan事業部 開発部
和田潤也
@chocolamint
某 SIer で Web 系のフロントエンド寄り基盤の開発をメインに従事
2015年12月より に JOIN
• 壁を登ってた時代がありました……
• 最近の週末は女性声優のイベントで忙しいとのこと
Copyright © 2014 Sansan, Inc. All rights reserved.
> オレオレDSLってなんのこと?
田中 太郎 OR 次郎
田中 太郎 次郎ORAND
Copyright © 2014 Sansan, Inc. All rights reserved.
> 実際にあった事例
- https://github.com/eightcard/lk-linkknowledge/pull/6781
public class Token
{
public TokenType Type { get; }
public IList<string> Words { get; }
public Token(TokenType type, IList<string> words)
{
Type = type;
Words = words;
}
}
public enum TokenType
{
AndAlso,
OrElse
}
むむむ?
Copyright © 2014 Sansan, Inc. All rights reserved.
> なるほど、こういう想定
AndAlso
["田中"]
OrElse
["太郎", "次郎"]
パーサーが
IEnumerable<Token> を返す
Copyright © 2014 Sansan, Inc. All rights reserved.
> データ構造の修正はコストがデカい
括弧で優先順位をつけられるようになったら?
田中 OR (山田 太郎)
引用符で「完全一致」が指定できるようになったら?
"田中 太郎"
Copyright © 2014 Sansan, Inc. All rights reserved.
> 本来の構造に忠実にいこう
あ お
い う え
AND
OR
MultinaryExpression
多項式
LiteralExpression
リテラル式
Copyright © 2014 Sansan, Inc. All rights reserved.
> データ構造に落としてみました
Copyright © 2014 Sansan, Inc. All rights reserved.
> ついでに Visitor パターン使ってみました
Copyright © 2014 Sansan, Inc. All rights reserved.
> なおパーサーは愚直な模様
「パーサーコンビネーター」とか
言ってみたい
Copyright © 2014 Sansan, Inc. All rights reserved.
> YAGNI≠拡張性への考慮を捨てる
You ain't gonna need it
「作らない」⇒ あとから作れるように!
Copyright © 2014 Sansan, Inc. All rights reserved.
> 「拡張しやすい」とは何なのか
Copyright © 2014 Sansan, Inc. All rights reserved.
> 現実に即しておく=シンプル
• 現実のモデルとの差異を埋める必要がない
• 現実との乖離から生じるリスクが少ない
• 現実的に起こり得る将来の変更に対応しやすい
Copyright © 2014 Sansan, Inc. All rights reserved.
> もう一つの例
SQS
IThrottlingPolicy
Copyright © 2014 Sansan, Inc. All rights reserved.
> 同時実行するメッセージの数を制限する
interface IThrottlingPolicy
{
Task<IDisposable> EnterAsync(
CancellationToken cancellationToken);
}
• SemaphoreThrottle で単純な上限数制御
• IntervalThrottle でスループット制御
Copyright © 2014 Sansan, Inc. All rights reserved.
> とりあえず差し込めるようにしておく?
- ✓ DO provide at least one type that is an
implementation of an interface.
https://msdn.microsoft.com/ja-jp/library/ms229022(v=vs.110).aspx
理想的には 2 つ以上作ってみるのがオススメ
(実利用するかはともかく脳内で)
適切に抽象化できていれば
複数の実装が提供され得るはず
Copyright © 2014 Sansan, Inc. All rights reserved.
> 設計が全て
- そのインターフェースは何故必要ですか?
- 「あってもなくてもいい」インターフェースは要らない
- そのインターフェースは何をしますか?
- 明確な 1 つの責務を持つべき
- そのインターフェースにはどのような実装が想定されますか?
- 実装が 1 つしか考えられないインターフェースは要らない
Copyright © 2014 Sansan, Inc. All rights reserved.
> 必要になったら作れるようにしておく
- 最初の検索の例
- パーサーは括弧を想定していない状態
> なので入れ子構造の式ツリーは返ってこない
- パーサーが対応されれば Visitor は勝手に対応される
- ○○が起こったタイミングで△△する
- Publisher は○○が起こったことを知らせる
- Subscriber は通知を受けて△△をする
- ☆☆というルールで■■をする
- ■■をする方法(戦略)は☆☆以外にも考えられる
Copyright © 2014 Sansan, Inc. All rights reserved.
> ソースはシンプルに・想定は複雑に
- いま「やりたいこと」は何か
- 将来変わらない「やりたいこと」は何か
Copyright © 2014 Sansan, Inc. All rights reserved.
> どちらがシンプルか
メッセージを同時に4つずつしか取り出さないように
制御しながら、順次取り出して処理する
メッセージを
順次取り出して処理する
同時に4つずつまでしか
取り出さないように
制御する
Copyright © 2014 Sansan, Inc. All rights reserved.
> Make it simple

Contenu connexe

Tendances

あのスタートアップもさくら!?さくらのクラウドでサービスローンチしてみよう(スタートアップのサーバーインフラを考えよう!Vol.2)
あのスタートアップもさくら!?さくらのクラウドでサービスローンチしてみよう(スタートアップのサーバーインフラを考えよう!Vol.2)あのスタートアップもさくら!?さくらのクラウドでサービスローンチしてみよう(スタートアップのサーバーインフラを考えよう!Vol.2)
あのスタートアップもさくら!?さくらのクラウドでサービスローンチしてみよう(スタートアップのサーバーインフラを考えよう!Vol.2)さくらインターネット株式会社
 
サイバーエージェント様 発表「OpenStackのNWと物理の話」
サイバーエージェント様 発表「OpenStackのNWと物理の話」サイバーエージェント様 発表「OpenStackのNWと物理の話」
サイバーエージェント様 発表「OpenStackのNWと物理の話」VirtualTech Japan Inc.
 
○ヶ月でできた!?さくらのクラウド開発秘話(【ヒカ☆ラボ】さくらインターネットとMilkcocoa!年末イベント:ここだけのウラ話)
○ヶ月でできた!?さくらのクラウド開発秘話(【ヒカ☆ラボ】さくらインターネットとMilkcocoa!年末イベント:ここだけのウラ話)○ヶ月でできた!?さくらのクラウド開発秘話(【ヒカ☆ラボ】さくらインターネットとMilkcocoa!年末イベント:ここだけのウラ話)
○ヶ月でできた!?さくらのクラウド開発秘話(【ヒカ☆ラボ】さくらインターネットとMilkcocoa!年末イベント:ここだけのウラ話)さくらインターネット株式会社
 
とある AWS サービスの運用移管〜データストア編〜 #jawsmeguro
とある AWS サービスの運用移管〜データストア編〜 #jawsmeguroとある AWS サービスの運用移管〜データストア編〜 #jawsmeguro
とある AWS サービスの運用移管〜データストア編〜 #jawsmeguroIKEDA Kiyoshi
 
クラウド運用のベストプラクティスを考える - OpenStack最新情報セミナー(2016年12月)
クラウド運用のベストプラクティスを考える - OpenStack最新情報セミナー(2016年12月)クラウド運用のベストプラクティスを考える - OpenStack最新情報セミナー(2016年12月)
クラウド運用のベストプラクティスを考える - OpenStack最新情報セミナー(2016年12月)VirtualTech Japan Inc.
 
Ansible はじめてみました
Ansible はじめてみましたAnsible はじめてみました
Ansible はじめてみましたTakeshi Kuramochi
 
さくらのクラウド活用事例 - 構成と運用のご紹介(Innovation EGG 第5回 『クラウド運用の本音』)
さくらのクラウド活用事例 - 構成と運用のご紹介(Innovation EGG 第5回 『クラウド運用の本音』)さくらのクラウド活用事例 - 構成と運用のご紹介(Innovation EGG 第5回 『クラウド運用の本音』)
さくらのクラウド活用事例 - 構成と運用のご紹介(Innovation EGG 第5回 『クラウド運用の本音』)さくらインターネット株式会社
 
Soft layerと運用管理の自動化・省力化あれこれ
Soft layerと運用管理の自動化・省力化あれこれSoft layerと運用管理の自動化・省力化あれこれ
Soft layerと運用管理の自動化・省力化あれこれNHN テコラス株式会社
 
クラウド運用3足の草鞋151102
クラウド運用3足の草鞋151102クラウド運用3足の草鞋151102
クラウド運用3足の草鞋151102Keiichi Hashimoto
 
障害を防ぎ、サービスを守るために #gotandapm
障害を防ぎ、サービスを守るために #gotandapm障害を防ぎ、サービスを守るために #gotandapm
障害を防ぎ、サービスを守るために #gotandapmIKEDA Kiyoshi
 
re:Inventの振り返りで学ぶAWSを利用したデータ活用戦略と、サバカン屋の新作缶づめ戦略
re:Inventの振り返りで学ぶAWSを利用したデータ活用戦略と、サバカン屋の新作缶づめ戦略re:Inventの振り返りで学ぶAWSを利用したデータ活用戦略と、サバカン屋の新作缶づめ戦略
re:Inventの振り返りで学ぶAWSを利用したデータ活用戦略と、サバカン屋の新作缶づめ戦略株式会社スカイアーチネットワークス
 
20210925_jazug_azure_what_to_do_first
20210925_jazug_azure_what_to_do_first20210925_jazug_azure_what_to_do_first
20210925_jazug_azure_what_to_do_firstTomoakiOno
 
エキスパートから失敗を学べ ~SoftLayerアンチパターン・デザイン~
エキスパートから失敗を学べ  ~SoftLayerアンチパターン・デザイン~エキスパートから失敗を学べ  ~SoftLayerアンチパターン・デザイン~
エキスパートから失敗を学べ ~SoftLayerアンチパターン・デザイン~softlayerjp
 
meet the author「ひと目でわかるAzure 基本から学ぶサーバー&ネットワーク構築 第3版」
meet the author「ひと目でわかるAzure 基本から学ぶサーバー&ネットワーク構築 第3版」meet the author「ひと目でわかるAzure 基本から学ぶサーバー&ネットワーク構築 第3版」
meet the author「ひと目でわかるAzure 基本から学ぶサーバー&ネットワーク構築 第3版」Tetsuya Yokoyama
 
SoftLayerを使ってみよう
SoftLayerを使ってみようSoftLayerを使ってみよう
SoftLayerを使ってみようAtsushi Hanaki
 
JAWS FESTA KANSAI アンカン 関西のおっちゃんの口説き方
JAWS FESTA KANSAI アンカン 関西のおっちゃんの口説き方JAWS FESTA KANSAI アンカン 関西のおっちゃんの口説き方
JAWS FESTA KANSAI アンカン 関西のおっちゃんの口説き方Toshiyuki Konparu
 

Tendances (20)

あのスタートアップもさくら!?さくらのクラウドでサービスローンチしてみよう(スタートアップのサーバーインフラを考えよう!Vol.2)
あのスタートアップもさくら!?さくらのクラウドでサービスローンチしてみよう(スタートアップのサーバーインフラを考えよう!Vol.2)あのスタートアップもさくら!?さくらのクラウドでサービスローンチしてみよう(スタートアップのサーバーインフラを考えよう!Vol.2)
あのスタートアップもさくら!?さくらのクラウドでサービスローンチしてみよう(スタートアップのサーバーインフラを考えよう!Vol.2)
 
サイバーエージェント様 発表「OpenStackのNWと物理の話」
サイバーエージェント様 発表「OpenStackのNWと物理の話」サイバーエージェント様 発表「OpenStackのNWと物理の話」
サイバーエージェント様 発表「OpenStackのNWと物理の話」
 
○ヶ月でできた!?さくらのクラウド開発秘話(【ヒカ☆ラボ】さくらインターネットとMilkcocoa!年末イベント:ここだけのウラ話)
○ヶ月でできた!?さくらのクラウド開発秘話(【ヒカ☆ラボ】さくらインターネットとMilkcocoa!年末イベント:ここだけのウラ話)○ヶ月でできた!?さくらのクラウド開発秘話(【ヒカ☆ラボ】さくらインターネットとMilkcocoa!年末イベント:ここだけのウラ話)
○ヶ月でできた!?さくらのクラウド開発秘話(【ヒカ☆ラボ】さくらインターネットとMilkcocoa!年末イベント:ここだけのウラ話)
 
とある AWS サービスの運用移管〜データストア編〜 #jawsmeguro
とある AWS サービスの運用移管〜データストア編〜 #jawsmeguroとある AWS サービスの運用移管〜データストア編〜 #jawsmeguro
とある AWS サービスの運用移管〜データストア編〜 #jawsmeguro
 
クラウド運用のベストプラクティスを考える - OpenStack最新情報セミナー(2016年12月)
クラウド運用のベストプラクティスを考える - OpenStack最新情報セミナー(2016年12月)クラウド運用のベストプラクティスを考える - OpenStack最新情報セミナー(2016年12月)
クラウド運用のベストプラクティスを考える - OpenStack最新情報セミナー(2016年12月)
 
Ansible はじめてみました
Ansible はじめてみましたAnsible はじめてみました
Ansible はじめてみました
 
Questetra meet up_swx
Questetra meet up_swxQuestetra meet up_swx
Questetra meet up_swx
 
【さくらのクラウド】サービス概要カタログ2017年3月号
【さくらのクラウド】サービス概要カタログ2017年3月号 【さくらのクラウド】サービス概要カタログ2017年3月号
【さくらのクラウド】サービス概要カタログ2017年3月号
 
さくらのクラウド活用事例 - 構成と運用のご紹介(Innovation EGG 第5回 『クラウド運用の本音』)
さくらのクラウド活用事例 - 構成と運用のご紹介(Innovation EGG 第5回 『クラウド運用の本音』)さくらのクラウド活用事例 - 構成と運用のご紹介(Innovation EGG 第5回 『クラウド運用の本音』)
さくらのクラウド活用事例 - 構成と運用のご紹介(Innovation EGG 第5回 『クラウド運用の本音』)
 
Soft layerと運用管理の自動化・省力化あれこれ
Soft layerと運用管理の自動化・省力化あれこれSoft layerと運用管理の自動化・省力化あれこれ
Soft layerと運用管理の自動化・省力化あれこれ
 
クラウド運用3足の草鞋151102
クラウド運用3足の草鞋151102クラウド運用3足の草鞋151102
クラウド運用3足の草鞋151102
 
障害を防ぎ、サービスを守るために #gotandapm
障害を防ぎ、サービスを守るために #gotandapm障害を防ぎ、サービスを守るために #gotandapm
障害を防ぎ、サービスを守るために #gotandapm
 
re:Inventの振り返りで学ぶAWSを利用したデータ活用戦略と、サバカン屋の新作缶づめ戦略
re:Inventの振り返りで学ぶAWSを利用したデータ活用戦略と、サバカン屋の新作缶づめ戦略re:Inventの振り返りで学ぶAWSを利用したデータ活用戦略と、サバカン屋の新作缶づめ戦略
re:Inventの振り返りで学ぶAWSを利用したデータ活用戦略と、サバカン屋の新作缶づめ戦略
 
20210925_jazug_azure_what_to_do_first
20210925_jazug_azure_what_to_do_first20210925_jazug_azure_what_to_do_first
20210925_jazug_azure_what_to_do_first
 
【さくらのクラウド】サービス概要カタログ2016年12月号
【さくらのクラウド】サービス概要カタログ2016年12月号 【さくらのクラウド】サービス概要カタログ2016年12月号
【さくらのクラウド】サービス概要カタログ2016年12月号
 
【さくらのクラウド】VPCルータ
【さくらのクラウド】VPCルータ 【さくらのクラウド】VPCルータ
【さくらのクラウド】VPCルータ
 
エキスパートから失敗を学べ ~SoftLayerアンチパターン・デザイン~
エキスパートから失敗を学べ  ~SoftLayerアンチパターン・デザイン~エキスパートから失敗を学べ  ~SoftLayerアンチパターン・デザイン~
エキスパートから失敗を学べ ~SoftLayerアンチパターン・デザイン~
 
meet the author「ひと目でわかるAzure 基本から学ぶサーバー&ネットワーク構築 第3版」
meet the author「ひと目でわかるAzure 基本から学ぶサーバー&ネットワーク構築 第3版」meet the author「ひと目でわかるAzure 基本から学ぶサーバー&ネットワーク構築 第3版」
meet the author「ひと目でわかるAzure 基本から学ぶサーバー&ネットワーク構築 第3版」
 
SoftLayerを使ってみよう
SoftLayerを使ってみようSoftLayerを使ってみよう
SoftLayerを使ってみよう
 
JAWS FESTA KANSAI アンカン 関西のおっちゃんの口説き方
JAWS FESTA KANSAI アンカン 関西のおっちゃんの口説き方JAWS FESTA KANSAI アンカン 関西のおっちゃんの口説き方
JAWS FESTA KANSAI アンカン 関西のおっちゃんの口説き方
 

Similaire à ちょっとしたオレオレDSLも抽象構文木っぽくしておくと後からの拡張に対応しやすいよねっていうちょっとしたお話

SANsymphony-Vを使ったSoftLayerへの簡単データ移行
SANsymphony-Vを使ったSoftLayerへの簡単データ移行SANsymphony-Vを使ったSoftLayerへの簡単データ移行
SANsymphony-Vを使ったSoftLayerへの簡単データ移行Hironori Tanaka
 
Sparkをノートブックにまとめちゃおう。Zeppelinでね!(Hadoopソースコードリーディング 第19回 発表資料)
Sparkをノートブックにまとめちゃおう。Zeppelinでね!(Hadoopソースコードリーディング 第19回 発表資料)Sparkをノートブックにまとめちゃおう。Zeppelinでね!(Hadoopソースコードリーディング 第19回 発表資料)
Sparkをノートブックにまとめちゃおう。Zeppelinでね!(Hadoopソースコードリーディング 第19回 発表資料)NTT DATA OSS Professional Services
 
【B-1】kintoneでお手軽コールセンター!
【B-1】kintoneでお手軽コールセンター!【B-1】kintoneでお手軽コールセンター!
【B-1】kintoneでお手軽コールセンター!Sakae Saito
 
Ansibleで構成管理始める人のモチベーションをあげたい! (Cloudera World Tokyo 2014LT講演資料)
Ansibleで構成管理始める人のモチベーションをあげたい! (Cloudera World Tokyo 2014LT講演資料)Ansibleで構成管理始める人のモチベーションをあげたい! (Cloudera World Tokyo 2014LT講演資料)
Ansibleで構成管理始める人のモチベーションをあげたい! (Cloudera World Tokyo 2014LT講演資料)NTT DATA OSS Professional Services
 
愛せよ、さもなくば捨てよ。
愛せよ、さもなくば捨てよ。愛せよ、さもなくば捨てよ。
愛せよ、さもなくば捨てよ。Sho Yoshida
 
おすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップおすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップKoichiro Sumi
 
Automation with SoftLayer and Zabbix
Automation with SoftLayer and ZabbixAutomation with SoftLayer and Zabbix
Automation with SoftLayer and Zabbixsoftlayerjp
 
2013/07/31 JAWS-UG熊本 データにまつわるエトセトラ
2013/07/31 JAWS-UG熊本 データにまつわるエトセトラ2013/07/31 JAWS-UG熊本 データにまつわるエトセトラ
2013/07/31 JAWS-UG熊本 データにまつわるエトセトラServerworks Co.,Ltd.
 
Introducing Sencha Space
Introducing Sencha SpaceIntroducing Sencha Space
Introducing Sencha Space久司 中村
 
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)NTT DATA OSS Professional Services
 
徳丸本ができるまで
徳丸本ができるまで徳丸本ができるまで
徳丸本ができるまでHiroshi Tokumaru
 
2016年2月4日 空間OSの設計コンセプトと先端IT
2016年2月4日 空間OSの設計コンセプトと先端IT2016年2月4日 空間OSの設計コンセプトと先端IT
2016年2月4日 空間OSの設計コンセプトと先端ITaitc_jp
 
AWS Summit San Francisco 2017 Werner Vogelsによる基調講演を徹底紹介
AWS Summit San Francisco 2017 Werner Vogelsによる基調講演を徹底紹介AWS Summit San Francisco 2017 Werner Vogelsによる基調講演を徹底紹介
AWS Summit San Francisco 2017 Werner Vogelsによる基調講演を徹底紹介Eiji Shinohara
 
[Osaka]AMIMOTO(HHVM) hands-on #cmsdou
[Osaka]AMIMOTO(HHVM) hands-on #cmsdou [Osaka]AMIMOTO(HHVM) hands-on #cmsdou
[Osaka]AMIMOTO(HHVM) hands-on #cmsdou Hiromichi Koga
 
Ncstudy#03 ニフティクラウドapiを利用して、何かつくってみよう slide
Ncstudy#03 ニフティクラウドapiを利用して、何かつくってみよう slideNcstudy#03 ニフティクラウドapiを利用して、何かつくってみよう slide
Ncstudy#03 ニフティクラウドapiを利用して、何かつくってみよう slideYoshifumi Hoda
 
Serfが面白いと俺の中で話題にwwwwww
Serfが面白いと俺の中で話題にwwwwwwSerfが面白いと俺の中で話題にwwwwww
Serfが面白いと俺の中で話題にwwwwwwMasahito Zembutsu
 
ジャストシステムJava100本ノックのご紹介
ジャストシステムJava100本ノックのご紹介ジャストシステムJava100本ノックのご紹介
ジャストシステムJava100本ノックのご紹介JustSystems Corporation
 
10分でわかる Cilium と XDP / BPF
10分でわかる Cilium と XDP / BPF10分でわかる Cilium と XDP / BPF
10分でわかる Cilium と XDP / BPFShuji Yamada
 

Similaire à ちょっとしたオレオレDSLも抽象構文木っぽくしておくと後からの拡張に対応しやすいよねっていうちょっとしたお話 (20)

SANsymphony-Vを使ったSoftLayerへの簡単データ移行
SANsymphony-Vを使ったSoftLayerへの簡単データ移行SANsymphony-Vを使ったSoftLayerへの簡単データ移行
SANsymphony-Vを使ったSoftLayerへの簡単データ移行
 
Sparkをノートブックにまとめちゃおう。Zeppelinでね!(Hadoopソースコードリーディング 第19回 発表資料)
Sparkをノートブックにまとめちゃおう。Zeppelinでね!(Hadoopソースコードリーディング 第19回 発表資料)Sparkをノートブックにまとめちゃおう。Zeppelinでね!(Hadoopソースコードリーディング 第19回 発表資料)
Sparkをノートブックにまとめちゃおう。Zeppelinでね!(Hadoopソースコードリーディング 第19回 発表資料)
 
【B-1】kintoneでお手軽コールセンター!
【B-1】kintoneでお手軽コールセンター!【B-1】kintoneでお手軽コールセンター!
【B-1】kintoneでお手軽コールセンター!
 
Ansibleで構成管理始める人のモチベーションをあげたい! (Cloudera World Tokyo 2014LT講演資料)
Ansibleで構成管理始める人のモチベーションをあげたい! (Cloudera World Tokyo 2014LT講演資料)Ansibleで構成管理始める人のモチベーションをあげたい! (Cloudera World Tokyo 2014LT講演資料)
Ansibleで構成管理始める人のモチベーションをあげたい! (Cloudera World Tokyo 2014LT講演資料)
 
愛せよ、さもなくば捨てよ。
愛せよ、さもなくば捨てよ。愛せよ、さもなくば捨てよ。
愛せよ、さもなくば捨てよ。
 
おすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップおすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップ
 
20150315 realmlt
20150315 realmlt20150315 realmlt
20150315 realmlt
 
Automation with SoftLayer and Zabbix
Automation with SoftLayer and ZabbixAutomation with SoftLayer and Zabbix
Automation with SoftLayer and Zabbix
 
2013/07/31 JAWS-UG熊本 データにまつわるエトセトラ
2013/07/31 JAWS-UG熊本 データにまつわるエトセトラ2013/07/31 JAWS-UG熊本 データにまつわるエトセトラ
2013/07/31 JAWS-UG熊本 データにまつわるエトセトラ
 
July techfesta2014 f30
July techfesta2014 f30July techfesta2014 f30
July techfesta2014 f30
 
Introducing Sencha Space
Introducing Sencha SpaceIntroducing Sencha Space
Introducing Sencha Space
 
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
 
徳丸本ができるまで
徳丸本ができるまで徳丸本ができるまで
徳丸本ができるまで
 
2016年2月4日 空間OSの設計コンセプトと先端IT
2016年2月4日 空間OSの設計コンセプトと先端IT2016年2月4日 空間OSの設計コンセプトと先端IT
2016年2月4日 空間OSの設計コンセプトと先端IT
 
AWS Summit San Francisco 2017 Werner Vogelsによる基調講演を徹底紹介
AWS Summit San Francisco 2017 Werner Vogelsによる基調講演を徹底紹介AWS Summit San Francisco 2017 Werner Vogelsによる基調講演を徹底紹介
AWS Summit San Francisco 2017 Werner Vogelsによる基調講演を徹底紹介
 
[Osaka]AMIMOTO(HHVM) hands-on #cmsdou
[Osaka]AMIMOTO(HHVM) hands-on #cmsdou [Osaka]AMIMOTO(HHVM) hands-on #cmsdou
[Osaka]AMIMOTO(HHVM) hands-on #cmsdou
 
Ncstudy#03 ニフティクラウドapiを利用して、何かつくってみよう slide
Ncstudy#03 ニフティクラウドapiを利用して、何かつくってみよう slideNcstudy#03 ニフティクラウドapiを利用して、何かつくってみよう slide
Ncstudy#03 ニフティクラウドapiを利用して、何かつくってみよう slide
 
Serfが面白いと俺の中で話題にwwwwww
Serfが面白いと俺の中で話題にwwwwwwSerfが面白いと俺の中で話題にwwwwww
Serfが面白いと俺の中で話題にwwwwww
 
ジャストシステムJava100本ノックのご紹介
ジャストシステムJava100本ノックのご紹介ジャストシステムJava100本ノックのご紹介
ジャストシステムJava100本ノックのご紹介
 
10分でわかる Cilium と XDP / BPF
10分でわかる Cilium と XDP / BPF10分でわかる Cilium と XDP / BPF
10分でわかる Cilium と XDP / BPF
 

ちょっとしたオレオレDSLも抽象構文木っぽくしておくと後からの拡張に対応しやすいよねっていうちょっとしたお話

  • 2. Copyright © 2014 Sansan, Inc. All rights reserved. > 自己紹介 Sansan事業部 開発部 和田潤也 @chocolamint 某 SIer で Web 系のフロントエンド寄り基盤の開発をメインに従事 2015年12月より に JOIN • 壁を登ってた時代がありました…… • 最近の週末は女性声優のイベントで忙しいとのこと
  • 3. Copyright © 2014 Sansan, Inc. All rights reserved. > オレオレDSLってなんのこと? 田中 太郎 OR 次郎 田中 太郎 次郎ORAND
  • 4. Copyright © 2014 Sansan, Inc. All rights reserved. > 実際にあった事例 - https://github.com/eightcard/lk-linkknowledge/pull/6781 public class Token { public TokenType Type { get; } public IList<string> Words { get; } public Token(TokenType type, IList<string> words) { Type = type; Words = words; } } public enum TokenType { AndAlso, OrElse } むむむ?
  • 5. Copyright © 2014 Sansan, Inc. All rights reserved. > なるほど、こういう想定 AndAlso ["田中"] OrElse ["太郎", "次郎"] パーサーが IEnumerable<Token> を返す
  • 6. Copyright © 2014 Sansan, Inc. All rights reserved. > データ構造の修正はコストがデカい 括弧で優先順位をつけられるようになったら? 田中 OR (山田 太郎) 引用符で「完全一致」が指定できるようになったら? "田中 太郎"
  • 7. Copyright © 2014 Sansan, Inc. All rights reserved. > 本来の構造に忠実にいこう あ お い う え AND OR MultinaryExpression 多項式 LiteralExpression リテラル式
  • 8. Copyright © 2014 Sansan, Inc. All rights reserved. > データ構造に落としてみました
  • 9. Copyright © 2014 Sansan, Inc. All rights reserved. > ついでに Visitor パターン使ってみました
  • 10. Copyright © 2014 Sansan, Inc. All rights reserved. > なおパーサーは愚直な模様 「パーサーコンビネーター」とか 言ってみたい
  • 11. Copyright © 2014 Sansan, Inc. All rights reserved. > YAGNI≠拡張性への考慮を捨てる You ain't gonna need it 「作らない」⇒ あとから作れるように!
  • 12. Copyright © 2014 Sansan, Inc. All rights reserved. > 「拡張しやすい」とは何なのか
  • 13. Copyright © 2014 Sansan, Inc. All rights reserved. > 現実に即しておく=シンプル • 現実のモデルとの差異を埋める必要がない • 現実との乖離から生じるリスクが少ない • 現実的に起こり得る将来の変更に対応しやすい
  • 14. Copyright © 2014 Sansan, Inc. All rights reserved. > もう一つの例 SQS IThrottlingPolicy
  • 15. Copyright © 2014 Sansan, Inc. All rights reserved. > 同時実行するメッセージの数を制限する interface IThrottlingPolicy { Task<IDisposable> EnterAsync( CancellationToken cancellationToken); } • SemaphoreThrottle で単純な上限数制御 • IntervalThrottle でスループット制御
  • 16. Copyright © 2014 Sansan, Inc. All rights reserved. > とりあえず差し込めるようにしておく? - ✓ DO provide at least one type that is an implementation of an interface. https://msdn.microsoft.com/ja-jp/library/ms229022(v=vs.110).aspx 理想的には 2 つ以上作ってみるのがオススメ (実利用するかはともかく脳内で) 適切に抽象化できていれば 複数の実装が提供され得るはず
  • 17. Copyright © 2014 Sansan, Inc. All rights reserved. > 設計が全て - そのインターフェースは何故必要ですか? - 「あってもなくてもいい」インターフェースは要らない - そのインターフェースは何をしますか? - 明確な 1 つの責務を持つべき - そのインターフェースにはどのような実装が想定されますか? - 実装が 1 つしか考えられないインターフェースは要らない
  • 18. Copyright © 2014 Sansan, Inc. All rights reserved. > 必要になったら作れるようにしておく - 最初の検索の例 - パーサーは括弧を想定していない状態 > なので入れ子構造の式ツリーは返ってこない - パーサーが対応されれば Visitor は勝手に対応される - ○○が起こったタイミングで△△する - Publisher は○○が起こったことを知らせる - Subscriber は通知を受けて△△をする - ☆☆というルールで■■をする - ■■をする方法(戦略)は☆☆以外にも考えられる
  • 19. Copyright © 2014 Sansan, Inc. All rights reserved. > ソースはシンプルに・想定は複雑に - いま「やりたいこと」は何か - 将来変わらない「やりたいこと」は何か
  • 20. Copyright © 2014 Sansan, Inc. All rights reserved. > どちらがシンプルか メッセージを同時に4つずつしか取り出さないように 制御しながら、順次取り出して処理する メッセージを 順次取り出して処理する 同時に4つずつまでしか 取り出さないように 制御する
  • 21. Copyright © 2014 Sansan, Inc. All rights reserved. > Make it simple