SlideShare uma empresa Scribd logo
1 de 27
Baixar para ler offline
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 から、カスタムツールでログ出力
用のコードを出力
ドキュメントとログ定義 XML を 1 ソースから生成
できると便利!
.
.
DSL
ドキュメント
ログ定義 XML
DSLの作り方
あくまで一例
1. 必要な情報の洗い出し
2. 型を作る
3. 値を作る方法を考える
4. 値を作る方法を提供する
5. 出力部分を提供する
余談:JSON の上に独自のルールを課して DSL
だぜ!
は、よほど単純なものでないとつらいのでは?
DSLの作り方:必要な情報の洗い出し
まずは、DSL がどんな情報を含まなければならな
いかを洗い出す
ドキュメントが必要としている情報
ID
ログレベル
ログ本文 (概要と詳細)
パラメータ (名前、説明)
ログの説明 (自明なログには書かない)
ログ定義 XML が必要としている情報
ID
ログ出力用メソッド名
ログレベル
ログ本文 (概要と詳細)
パラメータ (名前、型)
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
}
DSLの作り方:値を作る方法を考える
内部 DSL でいいか外部 DSL にするかの分水嶺
関数等を組み合わせた良い感じの書き方で値
が作れる→内部 DSL
値を DSL に戻したい→外部 DSL
内部 DSL は Fの力がそのまま使えてしまう
→完全に元に戻すことは不可能 (条件分岐、ルー
プ、関数・・・)
今回は内部 DSL を採用
DSLの作り方:値を作る方法を提供する
こんな感じで書けるように関数等を定義
.
ログ定義用内部 DSL の例 (実際はこれのリスト)
..
.
define 1 Error InvalidHeader
| parameters
[ header =
typeofstring | withComment 不正なヘッダ
value = typeofstring | withComment 値 ]
| summary ヘッダ不正
| format ヘッダ{header}(値:{value}) が不正です。
| withComment ヘッダが不正な場合に出力されます。
ちなみに、この書き方を実現するために FsControl
を使ってます
DSLの作り方:出力部分を提供する
出力先に必要な情報はすべて値に含んでいるの
で、あとはこれを元にごにょれば OK
Excel の出力には EPPlus を使用
COM と違って Excel 不要
NPOI と違って生成したファイルが壊れにくい
ライセンス (LGPL) と xls には対応していない点
に注意
XML は無難に XDocument
XML の構築が Cよりはるかに楽なの、もっと
言っていくべきかも?
ここに完成図を貼る
外部DSLの例:テーブル仕様書
テーブルに対するドキュメントが必要
CREATE TABLE 文では情報が足りない
ドキュメントから CREATE TABLE を生成?
どうせプログラマが書くのなら、Excel を入力に
する意味はない
DSL で書いた定義からドキュメントと CREATE
TABLE 文を吐けばいい!
外部DSLを選んだ理由
今後、テーブル変更 DSL を作りたい
今回の DSL +テーブル変更 DSL で、今回の
DSL を生成し直したい
内部 DSL として、いい表現が思い浮かばな
かったというのもある
内部DSLとの違い
再掲:DSL の作り方の一例
1. 必要な情報の洗い出し
2. 型を作る
3. 値を作る方法を考える
4. 値を作る方法を提供する
5. 出力部分を提供する
3 で外部 DSL の文法を考え、4 でそれを実装する
気に入らなければ 3 に戻ってやり直す
文法・機能
文法は好きなように
あまり機能を詰め込まない
汎用的にしすぎると、ドメイン特化とはいった
い何だったのか、となる
パーサジェネレータとパーサコンビネータ
パーサコンビネータは単なるライブラリなの
で、手軽に始めれる
パーサジェネレータはコードを生成するの
で、面倒
とりあえずはパーサコンビネータでいいのではな
いだろうか
Fのパーサコンビネータ
FParsec
XParsec(ない)
ParsecClone
FsAttoparsec
FParsec が機能的にも速度的にも無難
デモ
まとめ
Excel 方眼紙はプログラマが触るべきもので
はない
Excel 方眼紙の生成をプロセスに組み込んで
しまう
DSL どんどん作って、Excel 書く仕事なくして
いこう!
おわり

Mais conteúdo relacionado

Mais procurados

WordPressでExcelインポート - Word Fes 2015 -
WordPressでExcelインポート - Word Fes 2015 -WordPressでExcelインポート - Word Fes 2015 -
WordPressでExcelインポート - Word Fes 2015 -Yuusuke Yoshida
 
実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜
実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜
実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜Chihiro Fukazawa
 
もがいているエンジニア集まれ~今度こそ英語をモノにしよう~
もがいているエンジニア集まれ~今度こそ英語をモノにしよう~もがいているエンジニア集まれ~今度こそ英語をモノにしよう~
もがいているエンジニア集まれ~今度こそ英語をモノにしよう~Kiyotaka Kunihira
 
最新 Office アプリの自動保存に関わる小ネタ
最新 Office アプリの自動保存に関わる小ネタ最新 Office アプリの自動保存に関わる小ネタ
最新 Office アプリの自動保存に関わる小ネタTeruchika Yamada
 
初心者がまなぶExcel vba
初心者がまなぶExcel vba初心者がまなぶExcel vba
初心者がまなぶExcel vba安藤 良人
 
Overview of PowerApps, PowerPlatform, CDS and CDM etc.
Overview of PowerApps, PowerPlatform, CDS and CDM etc.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 -WordPressでExcelインポート - Word Fes 2015 -
WordPressでExcelインポート - Word Fes 2015 -
 
実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜
実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜
実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜
 
もがいているエンジニア集まれ~今度こそ英語をモノにしよう~
もがいているエンジニア集まれ~今度こそ英語をモノにしよう~もがいているエンジニア集まれ~今度こそ英語をモノにしよう~
もがいているエンジニア集まれ~今度こそ英語をモノにしよう~
 
TalknoteとGolang
TalknoteとGolangTalknoteとGolang
TalknoteとGolang
 
最新 Office アプリの自動保存に関わる小ネタ
最新 Office アプリの自動保存に関わる小ネタ最新 Office アプリの自動保存に関わる小ネタ
最新 Office アプリの自動保存に関わる小ネタ
 
初心者がまなぶExcel vba
初心者がまなぶExcel vba初心者がまなぶExcel vba
初心者がまなぶExcel vba
 
Overview of PowerApps, PowerPlatform, CDS and CDM etc.
Overview of PowerApps, PowerPlatform, CDS and CDM etc.Overview of PowerApps, PowerPlatform, CDS and CDM etc.
Overview of PowerApps, PowerPlatform, CDS and CDM etc.
 
「自分でやる」という快感を追い続ける - あるプログラマーの成長戦略 -
「自分でやる」という快感を追い続ける - あるプログラマーの成長戦略 -「自分でやる」という快感を追い続ける - あるプログラマーの成長戦略 -
「自分でやる」という快感を追い続ける - あるプログラマーの成長戦略 -
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
 

Mais de bleis tift

PCさえあればいい。
PCさえあればいい。PCさえあればいい。
PCさえあればいい。bleis tift
 
F#の基礎(?)
F#の基礎(?)F#の基礎(?)
F#の基礎(?)bleis tift
 
解説?FSharp.Quotations.Compiler
解説?FSharp.Quotations.Compiler解説?FSharp.Quotations.Compiler
解説?FSharp.Quotations.Compilerbleis tift
 
効果の低いテストの話
効果の低いテストの話効果の低いテストの話
効果の低いテストの話bleis tift
 
テストの自動化を考える前に
テストの自動化を考える前にテストの自動化を考える前に
テストの自動化を考える前にbleis tift
 
.NET系開発者から見たJava
.NET系開発者から見たJava.NET系開発者から見たJava
.NET系開発者から見たJavableis tift
 
F#事例発表
F#事例発表F#事例発表
F#事例発表bleis tift
 
yield and return (poor English ver)
yield and return (poor English ver)yield and return (poor English ver)
yield and return (poor English ver)bleis tift
 
yieldとreturnの話
yieldとreturnの話yieldとreturnの話
yieldとreturnの話bleis tift
 
F#の基礎(嘘)
F#の基礎(嘘)F#の基礎(嘘)
F#の基礎(嘘)bleis tift
 
現実(えくせる)と戦う話
現実(えくせる)と戦う話現実(えくせる)と戦う話
現実(えくせる)と戦う話bleis tift
 
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)bleis tift
 
async/await不要論
async/await不要論async/await不要論
async/await不要論bleis tift
 
F#によるFunctional Programming入門
F#によるFunctional Programming入門F#によるFunctional Programming入門
F#によるFunctional Programming入門bleis tift
 
Better C#の脱却を目指して
Better C#の脱却を目指してBetter C#の脱却を目指して
Better C#の脱却を目指してbleis tift
 
モナドハンズオン前座
モナドハンズオン前座モナドハンズオン前座
モナドハンズオン前座bleis tift
 
JSX / Haxe / TypeScript
JSX / Haxe / TypeScriptJSX / Haxe / TypeScript
JSX / Haxe / TypeScriptbleis tift
 
F#で始めるスマートフォンアプリ
F#で始めるスマートフォンアプリF#で始めるスマートフォンアプリ
F#で始めるスマートフォンアプリbleis tift
 
ぼくのかんがえたさいきょうのLL
ぼくのかんがえたさいきょうのLLぼくのかんがえたさいきょうのLL
ぼくのかんがえたさいきょうのLLbleis tift
 

Mais de bleis tift (20)

PCさえあればいい。
PCさえあればいい。PCさえあればいい。
PCさえあればいい。
 
F#の基礎(?)
F#の基礎(?)F#の基礎(?)
F#の基礎(?)
 
解説?FSharp.Quotations.Compiler
解説?FSharp.Quotations.Compiler解説?FSharp.Quotations.Compiler
解説?FSharp.Quotations.Compiler
 
効果の低いテストの話
効果の低いテストの話効果の低いテストの話
効果の低いテストの話
 
テストの自動化を考える前に
テストの自動化を考える前にテストの自動化を考える前に
テストの自動化を考える前に
 
.NET系開発者から見たJava
.NET系開発者から見たJava.NET系開発者から見たJava
.NET系開発者から見たJava
 
F#事例発表
F#事例発表F#事例発表
F#事例発表
 
yield and return (poor English ver)
yield and return (poor English ver)yield and return (poor English ver)
yield and return (poor English ver)
 
yieldとreturnの話
yieldとreturnの話yieldとreturnの話
yieldとreturnの話
 
F#の基礎(嘘)
F#の基礎(嘘)F#の基礎(嘘)
F#の基礎(嘘)
 
現実(えくせる)と戦う話
現実(えくせる)と戦う話現実(えくせる)と戦う話
現実(えくせる)と戦う話
 
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
 
async/await不要論
async/await不要論async/await不要論
async/await不要論
 
F#によるFunctional Programming入門
F#によるFunctional Programming入門F#によるFunctional Programming入門
F#によるFunctional Programming入門
 
Better C#の脱却を目指して
Better C#の脱却を目指してBetter C#の脱却を目指して
Better C#の脱却を目指して
 
モナドハンズオン前座
モナドハンズオン前座モナドハンズオン前座
モナドハンズオン前座
 
JSX / Haxe / TypeScript
JSX / Haxe / TypeScriptJSX / Haxe / TypeScript
JSX / Haxe / TypeScript
 
自分戦略
自分戦略自分戦略
自分戦略
 
F#で始めるスマートフォンアプリ
F#で始めるスマートフォンアプリF#で始めるスマートフォンアプリ
F#で始めるスマートフォンアプリ
 
ぼくのかんがえたさいきょうのLL
ぼくのかんがえたさいきょうのLLぼくのかんがえたさいきょうのLL
ぼくのかんがえたさいきょうのLL
 

Último

AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 

Último (8)

AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 

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