Enviar pesquisa
Carregar
SI屋のためのF# ~DSL編~
•
14 gostaram
•
5,705 visualizações
bleis tift
Seguir
函数型なんたらの集い 2014 in Tokyoでの発表資料です。
Leia menos
Leia mais
Tecnologia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 27
Baixar agora
Baixar para ler offline
Recomendados
VBAを書きたくない話(Excel-DNAの紹介)
VBAを書きたくない話(Excel-DNAの紹介)
bleis tift
札束でExcelを殴る
札束でExcelを殴る
bleis tift
C#でこなすexcel課題
C#でこなすexcel課題
tosaka 2
No more Legacy documents
No more Legacy documents
bleis tift
Dreamsparkからのクリスマスプレゼント
Dreamsparkからのクリスマスプレゼント
tosaka 2
誰も教えてくれない、Excelマクロ/VBAの使い方 先生:田中亨(Office TANAKA)
誰も教えてくれない、Excelマクロ/VBAの使い方 先生:田中亨(Office TANAKA)
schoowebcampus
Talknoteとgolangと私
Talknoteとgolangと私
Kenyu Miura
Talknoteとgolangと私
Talknoteとgolangと私
Kenyu Miura
Recomendados
VBAを書きたくない話(Excel-DNAの紹介)
VBAを書きたくない話(Excel-DNAの紹介)
bleis tift
札束でExcelを殴る
札束でExcelを殴る
bleis tift
C#でこなすexcel課題
C#でこなすexcel課題
tosaka 2
No more Legacy documents
No more Legacy documents
bleis tift
Dreamsparkからのクリスマスプレゼント
Dreamsparkからのクリスマスプレゼント
tosaka 2
誰も教えてくれない、Excelマクロ/VBAの使い方 先生:田中亨(Office TANAKA)
誰も教えてくれない、Excelマクロ/VBAの使い方 先生:田中亨(Office TANAKA)
schoowebcampus
Talknoteとgolangと私
Talknoteとgolangと私
Kenyu Miura
Talknoteとgolangと私
Talknoteとgolangと私
Kenyu Miura
WordPressでExcelインポート - Word Fes 2015 -
WordPressでExcelインポート - Word Fes 2015 -
Yuusuke Yoshida
実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜
実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜
Chihiro Fukazawa
もがいているエンジニア集まれ~今度こそ英語をモノにしよう~
もがいているエンジニア集まれ~今度こそ英語をモノにしよう~
Kiyotaka Kunihira
TalknoteとGolang
TalknoteとGolang
leverages_event
最新 Office アプリの自動保存に関わる小ネタ
最新 Office アプリの自動保存に関わる小ネタ
Teruchika Yamada
初心者がまなぶExcel vba
初心者がまなぶExcel vba
安藤 良人
Overview of PowerApps, PowerPlatform, CDS and CDM etc.
Overview of PowerApps, PowerPlatform, CDS and CDM etc.
Makoto Maeda
「自分でやる」という快感を追い続ける - あるプログラマーの成長戦略 -
「自分でやる」という快感を追い続ける - あるプログラマーの成長戦略 -
Isao Takahashi
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
Takafumi ONAKA
PCさえあればいい。
PCさえあればいい。
bleis tift
F#の基礎(?)
F#の基礎(?)
bleis tift
解説?FSharp.Quotations.Compiler
解説?FSharp.Quotations.Compiler
bleis tift
効果の低いテストの話
効果の低いテストの話
bleis tift
テストの自動化を考える前に
テストの自動化を考える前に
bleis tift
.NET系開発者から見たJava
.NET系開発者から見たJava
bleis tift
F#事例発表
F#事例発表
bleis tift
yield and return (poor English ver)
yield and return (poor English ver)
bleis tift
yieldとreturnの話
yieldとreturnの話
bleis tift
F#の基礎(嘘)
F#の基礎(嘘)
bleis tift
現実(えくせる)と戦う話
現実(えくせる)と戦う話
bleis tift
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
bleis tift
async/await不要論
async/await不要論
bleis tift
Mais conteúdo relacionado
Mais procurados
WordPressでExcelインポート - Word Fes 2015 -
WordPressでExcelインポート - Word Fes 2015 -
Yuusuke Yoshida
実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜
実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜
Chihiro Fukazawa
もがいているエンジニア集まれ~今度こそ英語をモノにしよう~
もがいているエンジニア集まれ~今度こそ英語をモノにしよう~
Kiyotaka Kunihira
TalknoteとGolang
TalknoteとGolang
leverages_event
最新 Office アプリの自動保存に関わる小ネタ
最新 Office アプリの自動保存に関わる小ネタ
Teruchika Yamada
初心者がまなぶExcel vba
初心者がまなぶExcel vba
安藤 良人
Overview of PowerApps, PowerPlatform, CDS and CDM etc.
Overview of PowerApps, PowerPlatform, CDS and CDM etc.
Makoto Maeda
「自分でやる」という快感を追い続ける - あるプログラマーの成長戦略 -
「自分でやる」という快感を追い続ける - あるプログラマーの成長戦略 -
Isao Takahashi
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
Takafumi ONAKA
Mais procurados
(9)
WordPressでExcelインポート - Word Fes 2015 -
WordPressでExcelインポート - Word Fes 2015 -
実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜
実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜
もがいているエンジニア集まれ~今度こそ英語をモノにしよう~
もがいているエンジニア集まれ~今度こそ英語をモノにしよう~
TalknoteとGolang
TalknoteとGolang
最新 Office アプリの自動保存に関わる小ネタ
最新 Office アプリの自動保存に関わる小ネタ
初心者がまなぶExcel vba
初心者がまなぶExcel vba
Overview of PowerApps, PowerPlatform, CDS and CDM etc.
Overview of PowerApps, PowerPlatform, CDS and CDM etc.
「自分でやる」という快感を追い続ける - あるプログラマーの成長戦略 -
「自分でやる」という快感を追い続ける - あるプログラマーの成長戦略 -
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
Mais de bleis tift
PCさえあればいい。
PCさえあればいい。
bleis tift
F#の基礎(?)
F#の基礎(?)
bleis tift
解説?FSharp.Quotations.Compiler
解説?FSharp.Quotations.Compiler
bleis tift
効果の低いテストの話
効果の低いテストの話
bleis tift
テストの自動化を考える前に
テストの自動化を考える前に
bleis tift
.NET系開発者から見たJava
.NET系開発者から見たJava
bleis tift
F#事例発表
F#事例発表
bleis tift
yield and return (poor English ver)
yield and return (poor English ver)
bleis tift
yieldとreturnの話
yieldとreturnの話
bleis tift
F#の基礎(嘘)
F#の基礎(嘘)
bleis tift
現実(えくせる)と戦う話
現実(えくせる)と戦う話
bleis tift
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
bleis tift
async/await不要論
async/await不要論
bleis tift
F#によるFunctional Programming入門
F#によるFunctional Programming入門
bleis tift
Better C#の脱却を目指して
Better C#の脱却を目指して
bleis tift
モナドハンズオン前座
モナドハンズオン前座
bleis tift
JSX / Haxe / TypeScript
JSX / Haxe / TypeScript
bleis tift
自分戦略
自分戦略
bleis tift
F#で始めるスマートフォンアプリ
F#で始めるスマートフォンアプリ
bleis tift
ぼくのかんがえたさいきょうのLL
ぼくのかんがえたさいきょうのLL
bleis tift
Mais de bleis tift
(20)
PCさえあればいい。
PCさえあればいい。
F#の基礎(?)
F#の基礎(?)
解説?FSharp.Quotations.Compiler
解説?FSharp.Quotations.Compiler
効果の低いテストの話
効果の低いテストの話
テストの自動化を考える前に
テストの自動化を考える前に
.NET系開発者から見たJava
.NET系開発者から見たJava
F#事例発表
F#事例発表
yield and return (poor English ver)
yield and return (poor English ver)
yieldとreturnの話
yieldとreturnの話
F#の基礎(嘘)
F#の基礎(嘘)
現実(えくせる)と戦う話
現実(えくせる)と戦う話
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
async/await不要論
async/await不要論
F#によるFunctional Programming入門
F#によるFunctional Programming入門
Better C#の脱却を目指して
Better C#の脱却を目指して
モナドハンズオン前座
モナドハンズオン前座
JSX / Haxe / TypeScript
JSX / Haxe / TypeScript
自分戦略
自分戦略
F#で始めるスマートフォンアプリ
F#で始めるスマートフォンアプリ
ぼくのかんがえたさいきょうのLL
ぼくのかんがえたさいきょうのLL
Último
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
Último
(8)
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
SI屋のためのF# ~DSL編~
1.
SI屋のためのF ∼DSL編∼ bleis-tift October 25, 2014
2.
自己紹介 id:bleis-tift / @bleis なごやではたらくゆるふわ
Fer 仕事で F使ってます!
3.
今日話すこと ざっくり: SI 屋が Fをどのように業務に使っているかの一例 もうちょい詳しく: 内部
DSL とか外部 DSL を Fで作って 1 ソースで ある特定のコードと仕様書を出力してハッピー!
4.
背景 弊社について・・・ 従業員数 20 人以下の小さい会社 とがった技術者が多いかも ちょっと特殊な
Web サービスを構築したりし ている . . クライアント ↑特殊 HTTP(S) 主に XML サーバ
5.
SI屋で働くプログラマの敵
6.
SI屋で働くプログラマの敵 今日のテーマは「Excel方眼紙をい かにして倒すか」です!
7.
Excel方眼紙の何が駄目か 印字切れとの闘い ヘッダ、フッタ、目次を手動更新 自動化しにくい そういうフォーマットを決めるのは結構だが、俺 に使わせるな!
8.
Excel方眼紙を触らないためには えらい人になって、Excel 方眼紙を禁止する Excel 方眼紙のない世界に移住する Excel
方眼紙は最終出力として割り切り、自動 生成
9.
Excel方眼紙を触らないためには 生成結果は完全でなければならない 微調整があっては駄目。人手が必要な部分がある と、生成物のみを編集されるようになって死ぬ。 他者をコントロールできなければならない 生成物を編集することは固く禁止しないと死ぬ。 他社もコントロールできなければならない 生成物を以下略。まずは自分たちで完結するド キュメントから始めるのが吉。
10.
Excel方眼紙を触らないためには(2) Excel 方眼紙だけではなく、プログラムに必要 なものも生成する ツールロックインさせてしまう 可能であれば開発プロセスに組み込んでし まう
11.
内部DSLの例:ログ一覧 システムが出力するログをまとめたドキュメ ントが必要 ログには.NET 標準の仕組み (トレース)
を拡 張したものを使用 ログ定義 XML から、カスタムツールでログ出力 用のコードを出力 ドキュメントとログ定義 XML を 1 ソースから生成 できると便利! . . DSL ドキュメント ログ定義 XML
12.
DSLの作り方 あくまで一例 1. 必要な情報の洗い出し 2. 型を作る 3.
値を作る方法を考える 4. 値を作る方法を提供する 5. 出力部分を提供する 余談:JSON の上に独自のルールを課して DSL だぜ! は、よほど単純なものでないとつらいのでは?
13.
DSLの作り方:必要な情報の洗い出し まずは、DSL がどんな情報を含まなければならな いかを洗い出す ドキュメントが必要としている情報 ID ログレベル ログ本文 (概要と詳細) パラメータ
(名前、説明) ログの説明 (自明なログには書かない) ログ定義 XML が必要としている情報 ID ログ出力用メソッド名 ログレベル ログ本文 (概要と詳細) パラメータ (名前、型)
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.
DSLの作り方:値を作る方法を考える 内部 DSL でいいか外部
DSL にするかの分水嶺 関数等を組み合わせた良い感じの書き方で値 が作れる→内部 DSL 値を DSL に戻したい→外部 DSL 内部 DSL は Fの力がそのまま使えてしまう →完全に元に戻すことは不可能 (条件分岐、ルー プ、関数・・・) 今回は内部 DSL を採用
16.
DSLの作り方:値を作る方法を提供する こんな感じで書けるように関数等を定義 . ログ定義用内部 DSL の例
(実際はこれのリスト) .. . define 1 Error InvalidHeader | parameters [ header = typeofstring | withComment 不正なヘッダ value = typeofstring | withComment 値 ] | summary ヘッダ不正 | format ヘッダ{header}(値:{value}) が不正です。 | withComment ヘッダが不正な場合に出力されます。 ちなみに、この書き方を実現するために FsControl を使ってます
17.
DSLの作り方:出力部分を提供する 出力先に必要な情報はすべて値に含んでいるの で、あとはこれを元にごにょれば OK Excel の出力には
EPPlus を使用 COM と違って Excel 不要 NPOI と違って生成したファイルが壊れにくい ライセンス (LGPL) と xls には対応していない点 に注意 XML は無難に XDocument XML の構築が Cよりはるかに楽なの、もっと 言っていくべきかも?
18.
ここに完成図を貼る
19.
外部DSLの例:テーブル仕様書 テーブルに対するドキュメントが必要 CREATE TABLE 文では情報が足りない ドキュメントから
CREATE TABLE を生成? どうせプログラマが書くのなら、Excel を入力に する意味はない DSL で書いた定義からドキュメントと CREATE TABLE 文を吐けばいい!
20.
外部DSLを選んだ理由 今後、テーブル変更 DSL を作りたい 今回の
DSL +テーブル変更 DSL で、今回の DSL を生成し直したい 内部 DSL として、いい表現が思い浮かばな かったというのもある
21.
内部DSLとの違い 再掲:DSL の作り方の一例 1. 必要な情報の洗い出し 2.
型を作る 3. 値を作る方法を考える 4. 値を作る方法を提供する 5. 出力部分を提供する 3 で外部 DSL の文法を考え、4 でそれを実装する 気に入らなければ 3 に戻ってやり直す
22.
文法・機能 文法は好きなように あまり機能を詰め込まない 汎用的にしすぎると、ドメイン特化とはいった い何だったのか、となる
23.
パーサジェネレータとパーサコンビネータ パーサコンビネータは単なるライブラリなの で、手軽に始めれる パーサジェネレータはコードを生成するの で、面倒 とりあえずはパーサコンビネータでいいのではな いだろうか
24.
Fのパーサコンビネータ FParsec XParsec(ない) ParsecClone FsAttoparsec FParsec が機能的にも速度的にも無難
25.
デモ
26.
まとめ Excel 方眼紙はプログラマが触るべきもので はない Excel 方眼紙の生成をプロセスに組み込んで しまう DSL
どんどん作って、Excel 書く仕事なくして いこう!
27.
おわり
Baixar agora