Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
SI屋のためのF
∼DSL編∼
bleis-tift
October 25, 2014
自己紹介
id:bleis-tift / @bleis
なごやではたらくゆるふわ Fer
仕事で F使ってます!
今日話すこと
ざっくり:
SI 屋が Fをどのように業務に使っているかの一例
もうちょい詳しく:
内部 DSL とか外部 DSL を Fで作って 1 ソースで
ある特定のコードと仕様書を出力してハッピー!
背景
弊社について・・・
従業員数 20 人以下の小さい会社
とがった技術者が多いかも
ちょっと特殊な Web サービスを構築したりし
ている
.
.
クライアント
↑特殊
HTTP(S)
主に XML
サーバ
SI屋で働くプログラマの敵
SI屋で働くプログラマの敵
今日のテーマは「Excel方眼紙をい
かにして倒すか」です!
Excel方眼紙の何が駄目か
印字切れとの闘い
ヘッダ、フッタ、目次を手動更新
自動化しにくい
そういうフォーマットを決めるのは結構だが、俺
に使わせるな!
Excel方眼紙を触らないためには
えらい人になって、Excel 方眼紙を禁止する
Excel 方眼紙のない世界に移住する
Excel 方眼紙は最終出力として割り切り、自動
生成
Excel方眼紙を触らないためには
生成結果は完全でなければならない
微調整があっては駄目。人手が必要な部分がある
と、生成物のみを編集されるようになって死ぬ。
他者をコントロールできなければならない
生成物を編集することは固く禁止しないと死ぬ...
Excel方眼紙を触らないためには(2)
Excel 方眼紙だけではなく、プログラムに必要
なものも生成する
ツールロックインさせてしまう
可能であれば開発プロセスに組み込んでし
まう
内部DSLの例:ログ一覧
システムが出力するログをまとめたドキュメ
ントが必要
ログには.NET 標準の仕組み (トレース) を拡
張したものを使用
ログ定義 XML から、カスタムツールでログ出力
用のコードを出力
ドキュメントとログ定義 X...
DSLの作り方
あくまで一例
1. 必要な情報の洗い出し
2. 型を作る
3. 値を作る方法を考える
4. 値を作る方法を提供する
5. 出力部分を提供する
余談:JSON の上に独自のルールを課して DSL
だぜ!
は、よほど単純なものでない...
DSLの作り方:必要な情報の洗い出し
まずは、DSL がどんな情報を含まなければならな
いかを洗い出す
ドキュメントが必要としている情報
ID
ログレベル
ログ本文 (概要と詳細)
パラメータ (名前、説明)
ログの説明 (自明なログには書かな...
DSLの作り方:型を作る
Fなのでレコードとか判別共用体とか使う
.
ログ定義用 DSL の型の例
..
.
type Level =
Critical | Error | Warning | Information | Verbose
typ...
DSLの作り方:値を作る方法を考える
内部 DSL でいいか外部 DSL にするかの分水嶺
関数等を組み合わせた良い感じの書き方で値
が作れる→内部 DSL
値を DSL に戻したい→外部 DSL
内部 DSL は Fの力がそのまま使えてしまう...
DSLの作り方:値を作る方法を提供する
こんな感じで書けるように関数等を定義
.
ログ定義用内部 DSL の例 (実際はこれのリスト)
..
.
define 1 Error InvalidHeader
| parameters
[ heade...
DSLの作り方:出力部分を提供する
出力先に必要な情報はすべて値に含んでいるの
で、あとはこれを元にごにょれば OK
Excel の出力には EPPlus を使用
COM と違って Excel 不要
NPOI と違って生成したファイルが壊れにく...
ここに完成図を貼る
外部DSLの例:テーブル仕様書
テーブルに対するドキュメントが必要
CREATE TABLE 文では情報が足りない
ドキュメントから CREATE TABLE を生成?
どうせプログラマが書くのなら、Excel を入力に
する意味はない
DSL...
外部DSLを選んだ理由
今後、テーブル変更 DSL を作りたい
今回の DSL +テーブル変更 DSL で、今回の
DSL を生成し直したい
内部 DSL として、いい表現が思い浮かばな
かったというのもある
内部DSLとの違い
再掲:DSL の作り方の一例
1. 必要な情報の洗い出し
2. 型を作る
3. 値を作る方法を考える
4. 値を作る方法を提供する
5. 出力部分を提供する
3 で外部 DSL の文法を考え、4 でそれを実装する
気に入らな...
文法・機能
文法は好きなように
あまり機能を詰め込まない
汎用的にしすぎると、ドメイン特化とはいった
い何だったのか、となる
パーサジェネレータとパーサコンビネータ
パーサコンビネータは単なるライブラリなの
で、手軽に始めれる
パーサジェネレータはコードを生成するの
で、面倒
とりあえずはパーサコンビネータでいいのではな
いだろうか
Fのパーサコンビネータ
FParsec
XParsec(ない)
ParsecClone
FsAttoparsec
FParsec が機能的にも速度的にも無難
デモ
まとめ
Excel 方眼紙はプログラマが触るべきもので
はない
Excel 方眼紙の生成をプロセスに組み込んで
しまう
DSL どんどん作って、Excel 書く仕事なくして
いこう!
おわり
Upcoming SlideShare
Loading in …5
×

SI屋のためのF# ~DSL編~

4,932 views

Published on

函数型なんたらの集い 2014 in Tokyoでの発表資料です。

Published in: Technology
  • (Unlimited)....ACCESS WEBSITE Over for All Ebooks ................ accessibility Books Library allowing access to top content, including thousands of title from favorite author, plus the ability to read or download a huge selection of books for your pc or smartphone within minutes ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { https://urlzs.com/UABbn } ......................................................................................................................... Download Full EPUB Ebook here { https://urlzs.com/UABbn } ......................................................................................................................... Download Full PDF EBOOK here { https://urlzs.com/UABbn }
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

SI屋のためのF# ~DSL編~

  1. 1. SI屋のためのF ∼DSL編∼ bleis-tift October 25, 2014
  2. 2. 自己紹介 id:bleis-tift / @bleis なごやではたらくゆるふわ Fer 仕事で F使ってます!
  3. 3. 今日話すこと ざっくり: SI 屋が Fをどのように業務に使っているかの一例 もうちょい詳しく: 内部 DSL とか外部 DSL を Fで作って 1 ソースで ある特定のコードと仕様書を出力してハッピー!
  4. 4. 背景 弊社について・・・ 従業員数 20 人以下の小さい会社 とがった技術者が多いかも ちょっと特殊な Web サービスを構築したりし ている . . クライアント ↑特殊 HTTP(S) 主に XML サーバ
  5. 5. SI屋で働くプログラマの敵
  6. 6. SI屋で働くプログラマの敵 今日のテーマは「Excel方眼紙をい かにして倒すか」です!
  7. 7. Excel方眼紙の何が駄目か 印字切れとの闘い ヘッダ、フッタ、目次を手動更新 自動化しにくい そういうフォーマットを決めるのは結構だが、俺 に使わせるな!
  8. 8. Excel方眼紙を触らないためには えらい人になって、Excel 方眼紙を禁止する Excel 方眼紙のない世界に移住する Excel 方眼紙は最終出力として割り切り、自動 生成
  9. 9. Excel方眼紙を触らないためには 生成結果は完全でなければならない 微調整があっては駄目。人手が必要な部分がある と、生成物のみを編集されるようになって死ぬ。 他者をコントロールできなければならない 生成物を編集することは固く禁止しないと死ぬ。 他社もコントロールできなければならない 生成物を以下略。まずは自分たちで完結するド キュメントから始めるのが吉。
  10. 10. Excel方眼紙を触らないためには(2) Excel 方眼紙だけではなく、プログラムに必要 なものも生成する ツールロックインさせてしまう 可能であれば開発プロセスに組み込んでし まう
  11. 11. 内部DSLの例:ログ一覧 システムが出力するログをまとめたドキュメ ントが必要 ログには.NET 標準の仕組み (トレース) を拡 張したものを使用 ログ定義 XML から、カスタムツールでログ出力 用のコードを出力 ドキュメントとログ定義 XML を 1 ソースから生成 できると便利! . . DSL ドキュメント ログ定義 XML
  12. 12. DSLの作り方 あくまで一例 1. 必要な情報の洗い出し 2. 型を作る 3. 値を作る方法を考える 4. 値を作る方法を提供する 5. 出力部分を提供する 余談:JSON の上に独自のルールを課して DSL だぜ! は、よほど単純なものでないとつらいのでは?
  13. 13. DSLの作り方:必要な情報の洗い出し まずは、DSL がどんな情報を含まなければならな いかを洗い出す ドキュメントが必要としている情報 ID ログレベル ログ本文 (概要と詳細) パラメータ (名前、説明) ログの説明 (自明なログには書かない) ログ定義 XML が必要としている情報 ID ログ出力用メソッド名 ログレベル ログ本文 (概要と詳細) パラメータ (名前、型)
  14. 14. DSLの作り方:型を作る Fなのでレコードとか判別共用体とか使う . ログ定義用 DSL の型の例 .. . type Level = Critical | Error | Warning | Information | Verbose type Parameter = string * Type * string option type Log = { Id: int Level: Level Name: string Summary: string Format: string Parameters: Parameter list Description: string option }
  15. 15. DSLの作り方:値を作る方法を考える 内部 DSL でいいか外部 DSL にするかの分水嶺 関数等を組み合わせた良い感じの書き方で値 が作れる→内部 DSL 値を DSL に戻したい→外部 DSL 内部 DSL は Fの力がそのまま使えてしまう →完全に元に戻すことは不可能 (条件分岐、ルー プ、関数・・・) 今回は内部 DSL を採用
  16. 16. DSLの作り方:値を作る方法を提供する こんな感じで書けるように関数等を定義 . ログ定義用内部 DSL の例 (実際はこれのリスト) .. . define 1 Error InvalidHeader | parameters [ header = typeofstring | withComment 不正なヘッダ value = typeofstring | withComment 値 ] | summary ヘッダ不正 | format ヘッダ{header}(値:{value}) が不正です。 | withComment ヘッダが不正な場合に出力されます。 ちなみに、この書き方を実現するために FsControl を使ってます
  17. 17. DSLの作り方:出力部分を提供する 出力先に必要な情報はすべて値に含んでいるの で、あとはこれを元にごにょれば OK Excel の出力には EPPlus を使用 COM と違って Excel 不要 NPOI と違って生成したファイルが壊れにくい ライセンス (LGPL) と xls には対応していない点 に注意 XML は無難に XDocument XML の構築が Cよりはるかに楽なの、もっと 言っていくべきかも?
  18. 18. ここに完成図を貼る
  19. 19. 外部DSLの例:テーブル仕様書 テーブルに対するドキュメントが必要 CREATE TABLE 文では情報が足りない ドキュメントから CREATE TABLE を生成? どうせプログラマが書くのなら、Excel を入力に する意味はない DSL で書いた定義からドキュメントと CREATE TABLE 文を吐けばいい!
  20. 20. 外部DSLを選んだ理由 今後、テーブル変更 DSL を作りたい 今回の DSL +テーブル変更 DSL で、今回の DSL を生成し直したい 内部 DSL として、いい表現が思い浮かばな かったというのもある
  21. 21. 内部DSLとの違い 再掲:DSL の作り方の一例 1. 必要な情報の洗い出し 2. 型を作る 3. 値を作る方法を考える 4. 値を作る方法を提供する 5. 出力部分を提供する 3 で外部 DSL の文法を考え、4 でそれを実装する 気に入らなければ 3 に戻ってやり直す
  22. 22. 文法・機能 文法は好きなように あまり機能を詰め込まない 汎用的にしすぎると、ドメイン特化とはいった い何だったのか、となる
  23. 23. パーサジェネレータとパーサコンビネータ パーサコンビネータは単なるライブラリなの で、手軽に始めれる パーサジェネレータはコードを生成するの で、面倒 とりあえずはパーサコンビネータでいいのではな いだろうか
  24. 24. Fのパーサコンビネータ FParsec XParsec(ない) ParsecClone FsAttoparsec FParsec が機能的にも速度的にも無難
  25. 25. デモ
  26. 26. まとめ Excel 方眼紙はプログラマが触るべきもので はない Excel 方眼紙の生成をプロセスに組み込んで しまう DSL どんどん作って、Excel 書く仕事なくして いこう!
  27. 27. おわり

×