SlideShare una empresa de Scribd logo
1 de 35
Descargar para leer sin conexión
No more Legacy
Excel方眼紙でプレゼン
bleis-tift
2016年04月16日
自己紹介
・id:bleis-tift / @bleis
・株式会社オンザロード
・F#が好き
・Excel方眼紙は嫌い
・応用例の紹介
・まとめ
今日話すこと
・関数型プログラミング言語を使おう!
・関数型プログラミング言語による身近な問題の解決
・あいつを倒す・・・倒したい
・ざっくり仕組みの説明
関数型プログラミング言語を使おう!
・(静的な型を持っている場合)パターンマッチ等々
関数型プログラミング言語?
・手続きを書くのではなく、関数を組み合わせる
・関数を値として使える
・ループより再帰
・再帰よりも高階関数
何に使えるの?
・なんにでも使える
・JavaやC#でできることはできる
・この問いは適切ではない
より適切な問い
・何が得意なの?
・構文木の走査、変換
・テスト容易性の確保のしやすさ
・副作用をなくす方向に力が働く
・金融系
・やったことないのでノーコメント
得意なこと(一例)
・言語処理系
・F#のコンパイラはF#で書かれている
・木構造の分解と再構築
・木の回転
関数型プログラミング言語による身近な問題の解決
身近な問題の解決
・関数型プログラミング言語をより身近に感じてもらう
・わかりやすさ
・説得力
・(インパクト)
身近な問題の例
身近な問題の例
・Excel方眼紙
身近な問題の例
・Excel方眼紙
・Excel方眼紙!
身近な問題の例
・Excel方眼紙
・Excel方眼紙!
・Excel方眼紙!!
身近な問題の例
・Excel方眼紙
・Excel方眼紙!
・Excel方眼紙!!
・Excel方眼紙!!!
ニッポンの素敵なExcel方眼紙
・SIer御用達
・Webの人はごめんなさい
・表計算ではなくレイアウトツールとしてのExcel
・倒したい
Excel方眼紙の何が悪いか
・バージョン管理が面倒
・差分が見れない
・編集が面倒
Excel方眼紙の何が悪いか
・バージョン管理が面倒
・差分が見れない
・編集が面倒
・Esc押すと入力したものが消える
・汎用のExcel操作は不要
・読み込みも不要
・モデルを構築したら後は書き出すだけ
Excel方眼紙を倒す前提
・Excel方眼紙は最終出力と割り切る
・生成されたファイルを弄ってはいけない
・弄ったら(弄られたら)負け
・最終出力なので・・・
この資料を出力したツール
・Sdm / Edm / Sdm2Edm
・最終的にはEPPlus
・木構造をごにょごにょして最終的にExcel方眼紙を出力
・当然(?)F#製
ざっくり
専用データ構造 SDM EDM 方眼紙
登場人物
・Sdm : 構造化された文書のモデル。抽象度高い
・Edm : Excel文書のモデル。セルと一対一対応
・Edm.Writer.EPPlus : EdmをEPPlusを使ってExcel
ファイルに出力。
・Sdm2Edm : SdmをEdmに変換する仕組みを提供。
・Sdm2Edmがある程度やってくれる
・論理的なページ機能もある
EPPlus直接使うんじゃダメ?
・抽象度を分ける
・文書の構造と表現を分ける
・HTMLとCSSみたいな?
・セルのアドレス計算からの解放
Sdm概要
// 今のところ画像には非対応
type Component =
| Heading of TextStyleGroup list * Level:int * Value:Text
| Paragraph of TextStyleGroup list * Lines: Text list
| List of ListStyleGroup list * Items: Component list
| Table of TableStyleGroup list * TableContents
type Page = { Name: string; Components: Component list }
Edm概要
type Cell =
{ Row: int; Column: int
// マージもカンタン
MergedRows: int; MergedColumns: int
Format: FormatInfo
Data: Data }
type Sheet =
{ Name: string
Cells: Cell list
Drawings: Drawing list }
Sdm2Edm概要
// 実際はデフォルト実装付きのクラスを継承する方が便利
// Textだけを実装すればいいConvertionRule抽象クラスと、
// 何も実装しなくていいSimpleConvertionRuleクラスが用意されている
type IConvertionRule =
abstract Text:
ComponentRange * TextStyleGroup list * Text -> ConvertedResult
abstract ArroundHeading:
ComponentRange * TextStyleGroup list * int * Cell list ->
ConvertedResult
(* snip *)
abstract Drawing:
groups:TextStyleGroup list -> Drawing list
・Edm to Edm
・あふれたら新しいシートを作るPager
・他のPagerも簡単に作れる
Sdm2Edmでできること
・SdmからEdmに変換
・何も実装しなくてもOK
・カスタマイズもある程度可能
・Edmのページ処理
応用例の紹介
・などなど
応用例
・プレゼン資料作成
・内部DSLからのメッセージ仕様書作成
・外部DSLからのデータベース仕様書生成
・Markdownから仕様書作成
プレゼン資料作成
・発表のための一発ネタ
・ただ、PowerPointより優れた点も・・・
・コードの色付け
・テキストで管理できる
DSLから仕様書作成
・社内のツールとして
・SIerなら何かしらあるのでは?
・提出形式としてのExcel方眼紙
・万が一提出形式が変わっても何とかなる(多分)
Markdownから仕様書作成
・(未完)
・あまりやる気はない
・え、本当にMarkdownで仕様書書きたいですか?
・もっと特化したものから変換したほうがいい
まとめ
まとめ
・関数型プログラミング言語は実用的!
・身のまわりのExcel方眼紙を倒していこう!
・テキスト等からExcel方眼紙を生成!
まとめ
・関数型プログラミング言語は実用的!
・身のまわりのExcel方眼紙を倒していこう!
・テキスト等からExcel方眼紙を生成!
・Excelはプレゼンソフトじゃない!

Más contenido relacionado

La actualidad más candente

線形型のある言語でLEDを光らせる
線形型のある言語でLEDを光らせる線形型のある言語でLEDを光らせる
線形型のある言語でLEDを光らせる
啓 小笠原
 

La actualidad más candente (20)

「ワープロソフト」のセオリーを押さえよう! Writer 編
「ワープロソフト」のセオリーを押さえよう! Writer 編「ワープロソフト」のセオリーを押さえよう! Writer 編
「ワープロソフト」のセオリーを押さえよう! Writer 編
 
TalknoteとGolang
TalknoteとGolangTalknoteとGolang
TalknoteとGolang
 
業務アプリにおける VB との付き合い方
業務アプリにおける VB との付き合い方業務アプリにおける VB との付き合い方
業務アプリにおける VB との付き合い方
 
楽しいプログラミング
楽しいプログラミング楽しいプログラミング
楽しいプログラミング
 
20170114 lod challenge
20170114 lod challenge20170114 lod challenge
20170114 lod challenge
 
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
 
PHPやVBAでMovable Typeを操作しようData API Library for PHP/VBAのご紹介
PHPやVBAでMovable Typeを操作しようData API Library for PHP/VBAのご紹介PHPやVBAでMovable Typeを操作しようData API Library for PHP/VBAのご紹介
PHPやVBAでMovable Typeを操作しようData API Library for PHP/VBAのご紹介
 
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRubyKanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
 
2012-07-07 Sapporo.r #1 LT発表資料 「仕事で使うR」
2012-07-07 Sapporo.r #1 LT発表資料 「仕事で使うR」2012-07-07 Sapporo.r #1 LT発表資料 「仕事で使うR」
2012-07-07 Sapporo.r #1 LT発表資料 「仕事で使うR」
 
自前言語を仕事に使う話
自前言語を仕事に使う話自前言語を仕事に使う話
自前言語を仕事に使う話
 
関数型を盲信するその前に
関数型を盲信するその前に関数型を盲信するその前に
関数型を盲信するその前に
 
DocFXで脱Excel方眼紙!
DocFXで脱Excel方眼紙!DocFXで脱Excel方眼紙!
DocFXで脱Excel方眼紙!
 
C# コンパイラーの書き換え作業の話
C# コンパイラーの書き換え作業の話C# コンパイラーの書き換え作業の話
C# コンパイラーの書き換え作業の話
 
線形型のある言語でLEDを光らせる
線形型のある言語でLEDを光らせる線形型のある言語でLEDを光らせる
線形型のある言語でLEDを光らせる
 
クラウド温泉への誘い 2015-08-01 「第48回データマイニング+WEB@東京」版
クラウド温泉への誘い 2015-08-01 「第48回データマイニング+WEB@東京」版クラウド温泉への誘い 2015-08-01 「第48回データマイニング+WEB@東京」版
クラウド温泉への誘い 2015-08-01 「第48回データマイニング+WEB@東京」版
 
俺と Ha4go と さくらクラウド
俺と Ha4go と さくらクラウド俺と Ha4go と さくらクラウド
俺と Ha4go と さくらクラウド
 
2014 08-30 life with roslyn
2014 08-30 life with roslyn2014 08-30 life with roslyn
2014 08-30 life with roslyn
 
201903 のの会@関数Talk 10th
201903 のの会@関数Talk 10th201903 のの会@関数Talk 10th
201903 のの会@関数Talk 10th
 
2014 1-19
2014 1-192014 1-19
2014 1-19
 
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.
 

Destacado

仕事で使うF#
仕事で使うF#仕事で使うF#
仕事で使うF#
bleis tift
 

Destacado (13)

Better C#の脱却を目指して
Better C#の脱却を目指してBetter C#の脱却を目指して
Better C#の脱却を目指して
 
とことんF#よぷよ! F# + XNA ゲームプログラミング入門
とことんF#よぷよ!  F# + XNA ゲームプログラミング入門とことんF#よぷよ!  F# + XNA ゲームプログラミング入門
とことんF#よぷよ! F# + XNA ゲームプログラミング入門
 
効果の低いテストの話
効果の低いテストの話効果の低いテストの話
効果の低いテストの話
 
JSX / Haxe / TypeScript
JSX / Haxe / TypeScriptJSX / Haxe / TypeScript
JSX / Haxe / TypeScript
 
モナドハンズオン前座
モナドハンズオン前座モナドハンズオン前座
モナドハンズオン前座
 
解説?FSharp.Quotations.Compiler
解説?FSharp.Quotations.Compiler解説?FSharp.Quotations.Compiler
解説?FSharp.Quotations.Compiler
 
F#事例発表
F#事例発表F#事例発表
F#事例発表
 
Spring “BigData”
Spring “BigData”Spring “BigData”
Spring “BigData”
 
Springを使ったwebアプリにリファクタリングしよう
Springを使ったwebアプリにリファクタリングしようSpringを使ったwebアプリにリファクタリングしよう
Springを使ったwebアプリにリファクタリングしよう
 
基礎からのベイズ統計学 2章 勉強会資料
基礎からのベイズ統計学 2章 勉強会資料基礎からのベイズ統計学 2章 勉強会資料
基礎からのベイズ統計学 2章 勉強会資料
 
基礎からのベイズ統計学 輪読会資料 第1章 確率に関するベイズの定理
基礎からのベイズ統計学 輪読会資料 第1章 確率に関するベイズの定理基礎からのベイズ統計学 輪読会資料 第1章 確率に関するベイズの定理
基礎からのベイズ統計学 輪読会資料 第1章 確率に関するベイズの定理
 
統計学の基礎の基礎
統計学の基礎の基礎統計学の基礎の基礎
統計学の基礎の基礎
 
仕事で使うF#
仕事で使うF#仕事で使うF#
仕事で使うF#
 

Similar a No more Legacy documents

PFPファシグラ(2009/07/03)
PFPファシグラ(2009/07/03)PFPファシグラ(2009/07/03)
PFPファシグラ(2009/07/03)
nishikawa_makoto7
 
正規表現入門
正規表現入門正規表現入門
正規表現入門
thinca
 
2012.11.03 #odstudy Excel方眼紙に魂を削られない為のoffice講座
2012.11.03 #odstudy Excel方眼紙に魂を削られない為のoffice講座 2012.11.03 #odstudy Excel方眼紙に魂を削られない為のoffice講座
2012.11.03 #odstudy Excel方眼紙に魂を削られない為のoffice講座
真乙 九龍
 

Similar a No more Legacy documents (20)

実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜
実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜
実録『すぐわかるPerl』〜社内ツール悲喜こもごも〜
 
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
 
Flang kkd1
Flang kkd1Flang kkd1
Flang kkd1
 
Erlang
ErlangErlang
Erlang
 
Erlang
ErlangErlang
Erlang
 
正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?
 
PFPファシグラ(2009/07/03)
PFPファシグラ(2009/07/03)PFPファシグラ(2009/07/03)
PFPファシグラ(2009/07/03)
 
議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」
 
社内勉強会 2014/10/08
社内勉強会 2014/10/08社内勉強会 2014/10/08
社内勉強会 2014/10/08
 
正規表現入門
正規表現入門正規表現入門
正規表現入門
 
three.jsによる一歩進めたグラフィカルな表現
three.jsによる一歩進めたグラフィカルな表現three.jsによる一歩進めたグラフィカルな表現
three.jsによる一歩進めたグラフィカルな表現
 
なでしこ開発記録
なでしこ開発記録なでしこ開発記録
なでしこ開発記録
 
クイズ・Python勝ち抜きバトル pycon jp_2017
クイズ・Python勝ち抜きバトル pycon jp_2017クイズ・Python勝ち抜きバトル pycon jp_2017
クイズ・Python勝ち抜きバトル pycon jp_2017
 
今さらながらRSpecに入門してみた
今さらながらRSpecに入門してみた今さらながらRSpecに入門してみた
今さらながらRSpecに入門してみた
 
サポーターズ勉強会スライド 2018/2/27
サポーターズ勉強会スライド 2018/2/27サポーターズ勉強会スライド 2018/2/27
サポーターズ勉強会スライド 2018/2/27
 
Rubyのenum系高階関数を elixirでも使いたい
Rubyのenum系高階関数を elixirでも使いたいRubyのenum系高階関数を elixirでも使いたい
Rubyのenum系高階関数を elixirでも使いたい
 
Elm overview
Elm overviewElm overview
Elm overview
 
2012.11.03 #odstudy Excel方眼紙に魂を削られない為のoffice講座
2012.11.03 #odstudy Excel方眼紙に魂を削られない為のoffice講座 2012.11.03 #odstudy Excel方眼紙に魂を削られない為のoffice講座
2012.11.03 #odstudy Excel方眼紙に魂を削られない為のoffice講座
 
Excelマクロ・vbaについて
Excelマクロ・vbaについてExcelマクロ・vbaについて
Excelマクロ・vbaについて
 
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイドYAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
 

Más de 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
 
F#で始めるスマートフォンアプリ
F#で始めるスマートフォンアプリF#で始めるスマートフォンアプリ
F#で始めるスマートフォンアプリ
bleis tift
 
ぼくのかんがえたさいきょうのLL
ぼくのかんがえたさいきょうのLLぼくのかんがえたさいきょうのLL
ぼくのかんがえたさいきょうのLL
bleis tift
 
SCMBC Git入門セッション発表資料
SCMBC Git入門セッション発表資料SCMBC Git入門セッション発表資料
SCMBC Git入門セッション発表資料
bleis tift
 
輪るビングドラム.NET
輪るビングドラム.NET輪るビングドラム.NET
輪るビングドラム.NET
bleis tift
 
CIのその先へ
CIのその先へCIのその先へ
CIのその先へ
bleis tift
 

Más de bleis tift (19)

PCさえあればいい。
PCさえあればいい。PCさえあればいい。
PCさえあればいい。
 
テストの自動化を考える前に
テストの自動化を考える前にテストの自動化を考える前に
テストの自動化を考える前に
 
.NET系開発者から見たJava
.NET系開発者から見たJava.NET系開発者から見たJava
.NET系開発者から見たJava
 
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入門
 
自分戦略
自分戦略自分戦略
自分戦略
 
F#で始めるスマートフォンアプリ
F#で始めるスマートフォンアプリF#で始めるスマートフォンアプリ
F#で始めるスマートフォンアプリ
 
ぼくのかんがえたさいきょうのLL
ぼくのかんがえたさいきょうのLLぼくのかんがえたさいきょうのLL
ぼくのかんがえたさいきょうのLL
 
SCMBC闇LT資料
SCMBC闇LT資料SCMBC闇LT資料
SCMBC闇LT資料
 
SCMBC Git入門セッション発表資料
SCMBC Git入門セッション発表資料SCMBC Git入門セッション発表資料
SCMBC Git入門セッション発表資料
 
輪るビングドラム.NET
輪るビングドラム.NET輪るビングドラム.NET
輪るビングドラム.NET
 
SCM Boot Camp
SCM Boot CampSCM Boot Camp
SCM Boot Camp
 
Vim再入門
Vim再入門Vim再入門
Vim再入門
 
CIのその先へ
CIのその先へCIのその先へ
CIのその先へ
 

No more Legacy documents