no more legacy documents

35
No more Legacy Excel方眼紙でプレゼン bleis-tift 2016年04月16日

Upload: bleis-tift

Post on 11-Apr-2017

498 views

Category:

Technology


1 download

TRANSCRIPT

No more LegacyExcel方眼紙でプレゼン

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はプレゼンソフトじゃない!