Suche senden
Hochladen
現実(えくせる)と戦う話
•
6 gefällt mir
•
7,125 views
bleis tift
Folgen
なごやまつりの発表資料です。
Weniger lesen
Mehr lesen
Diashow-Anzeige
Melden
Teilen
Diashow-Anzeige
Melden
Teilen
1 von 42
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
F#によるFunctional Programming入門
F#によるFunctional Programming入門
bleis tift
.NET系開発者から見たJava
.NET系開発者から見たJava
bleis tift
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
Nobuhisa Koizumi
Better C#の脱却を目指して
Better C#の脱却を目指して
bleis tift
yieldとreturnの話
yieldとreturnの話
bleis tift
モナドハンズオン前座
モナドハンズオン前座
bleis tift
言語処理系入門3
言語処理系入門3
Kenta Hattori
templateとautoの型推論
templateとautoの型推論
MITSUNARI Shigeo
Empfohlen
F#によるFunctional Programming入門
F#によるFunctional Programming入門
bleis tift
.NET系開発者から見たJava
.NET系開発者から見たJava
bleis tift
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
Nobuhisa Koizumi
Better C#の脱却を目指して
Better C#の脱却を目指して
bleis tift
yieldとreturnの話
yieldとreturnの話
bleis tift
モナドハンズオン前座
モナドハンズオン前座
bleis tift
言語処理系入門3
言語処理系入門3
Kenta Hattori
templateとautoの型推論
templateとautoの型推論
MITSUNARI Shigeo
C++ Template Metaprogramming
C++ Template Metaprogramming
Akira Takahashi
Template Meta Programming入門から応用まで
Template Meta Programming入門から応用まで
yoshihikoozaki5
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会
Akihiko Matuura
Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4
Takashi Hoshino
C言語講習会2
C言語講習会2
odenhadengaku
C言語講習会3
C言語講習会3
odenhadengaku
C++ tips2 インクリメント編
C++ tips2 インクリメント編
道化師 堂華
C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編
道化師 堂華
君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない
digitalghost
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプ
Kohsuke Yuasa
C言語講習会4
C言語講習会4
odenhadengaku
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~
CHY72
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
Hideyuki Tanaka
C++ tips1 #include編
C++ tips1 #include編
道化師 堂華
闇魔術を触ってみた
闇魔術を触ってみた
Satoshi Sato
C++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みください
digitalghost
C言語講習会1
C言語講習会1
odenhadengaku
C++ tips4 cv修飾編
C++ tips4 cv修飾編
道化師 堂華
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
Preferred Networks
関数型志向Python - LLまつり2013
関数型志向Python - LLまつり2013
Esehara Shigeo
Swiftのこれまでの動向のまとめと 今後のさらなる発展の期待 - iOSDC 2016
Swiftのこれまでの動向のまとめと 今後のさらなる発展の期待 - iOSDC 2016
将之 小野
iOSアプリのライブラリ依存管理ツールとして Swift Package Managerを使うのは まだしばらく先かなと思った話
iOSアプリのライブラリ依存管理ツールとして Swift Package Managerを使うのは まだしばらく先かなと思った話
将之 小野
Weitere ähnliche Inhalte
Was ist angesagt?
C++ Template Metaprogramming
C++ Template Metaprogramming
Akira Takahashi
Template Meta Programming入門から応用まで
Template Meta Programming入門から応用まで
yoshihikoozaki5
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会
Akihiko Matuura
Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4
Takashi Hoshino
C言語講習会2
C言語講習会2
odenhadengaku
C言語講習会3
C言語講習会3
odenhadengaku
C++ tips2 インクリメント編
C++ tips2 インクリメント編
道化師 堂華
C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編
道化師 堂華
君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない
digitalghost
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプ
Kohsuke Yuasa
C言語講習会4
C言語講習会4
odenhadengaku
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~
CHY72
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
Hideyuki Tanaka
C++ tips1 #include編
C++ tips1 #include編
道化師 堂華
闇魔術を触ってみた
闇魔術を触ってみた
Satoshi Sato
C++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みください
digitalghost
C言語講習会1
C言語講習会1
odenhadengaku
C++ tips4 cv修飾編
C++ tips4 cv修飾編
道化師 堂華
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
Preferred Networks
関数型志向Python - LLまつり2013
関数型志向Python - LLまつり2013
Esehara Shigeo
Was ist angesagt?
(20)
C++ Template Metaprogramming
C++ Template Metaprogramming
Template Meta Programming入門から応用まで
Template Meta Programming入門から応用まで
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会
Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4
C言語講習会2
C言語講習会2
C言語講習会3
C言語講習会3
C++ tips2 インクリメント編
C++ tips2 インクリメント編
C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編
君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプ
C言語講習会4
C言語講習会4
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
C++ tips1 #include編
C++ tips1 #include編
闇魔術を触ってみた
闇魔術を触ってみた
C++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みください
C言語講習会1
C言語講習会1
C++ tips4 cv修飾編
C++ tips4 cv修飾編
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
関数型志向Python - LLまつり2013
関数型志向Python - LLまつり2013
Andere mochten auch
Swiftのこれまでの動向のまとめと 今後のさらなる発展の期待 - iOSDC 2016
Swiftのこれまでの動向のまとめと 今後のさらなる発展の期待 - iOSDC 2016
将之 小野
iOSアプリのライブラリ依存管理ツールとして Swift Package Managerを使うのは まだしばらく先かなと思った話
iOSアプリのライブラリ依存管理ツールとして Swift Package Managerを使うのは まだしばらく先かなと思った話
将之 小野
メタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらば
Kouji Matsui
HTTP/2, QUIC入門
HTTP/2, QUIC入門
shigeki_ohtsu
HTTP/2の現状とこれから
HTTP/2の現状とこれから
shigeki_ohtsu
Swift Package Manager ことはじめ #cswift
Swift Package Manager ことはじめ #cswift
Tomohiro Kumagai
Swift 3.0 で変わったところ - 厳選 13 項目 #love_swift #cswift
Swift 3.0 で変わったところ - 厳選 13 項目 #love_swift #cswift
Tomohiro Kumagai
Andere mochten auch
(7)
Swiftのこれまでの動向のまとめと 今後のさらなる発展の期待 - iOSDC 2016
Swiftのこれまでの動向のまとめと 今後のさらなる発展の期待 - iOSDC 2016
iOSアプリのライブラリ依存管理ツールとして Swift Package Managerを使うのは まだしばらく先かなと思った話
iOSアプリのライブラリ依存管理ツールとして Swift Package Managerを使うのは まだしばらく先かなと思った話
メタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらば
HTTP/2, QUIC入門
HTTP/2, QUIC入門
HTTP/2の現状とこれから
HTTP/2の現状とこれから
Swift Package Manager ことはじめ #cswift
Swift Package Manager ことはじめ #cswift
Swift 3.0 で変わったところ - 厳選 13 項目 #love_swift #cswift
Swift 3.0 で変わったところ - 厳選 13 項目 #love_swift #cswift
Ähnlich wie 現実(えくせる)と戦う話
やや関数型を意識した風Elixir/Phoenixご紹介
やや関数型を意識した風Elixir/Phoenixご紹介
fukuoka.ex
Xtext 紹介
Xtext 紹介
Akira Tanaka
PHP基礎勉強会
PHP基礎勉強会
Yuji Otani
Gensim
Gensim
saireya _
asm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web games
Noritada Shimizu
TypeScript と Visual Studio Code
TypeScript と Visual Studio Code
Akira Inoue
IdrisでWebアプリを書く
IdrisでWebアプリを書く
Hideyuki Tanaka
Cookpad Summer Intern 2015 - Programming Paradigm
Cookpad Summer Intern 2015 - Programming Paradigm
Minero Aoki
Small Basic を実務で使ってみませんか - CLR/H第56回勉強会ライトニングトーク
Small Basic を実務で使ってみませんか - CLR/H第56回勉強会ライトニングトーク
Jun-ichi Sakamoto
LastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめよう
Shinsuke Sugaya
初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)
Masahiro Hayashi
DEV-011_TypeScript ~Any browser. Any host. Any OS. Open Source~
DEV-011_TypeScript ~Any browser. Any host. Any OS. Open Source~
decode2016
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
和弘 井之上
Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)
Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)
Tetsu Yama
Powershell勉強会 v3 (もっと新しいバージョンがあります)
Powershell勉強会 v3 (もっと新しいバージョンがあります)
Tetsu Yama
Powershell勉強会 v2 (もっと新しいバージョンがあります)
Powershell勉強会 v2 (もっと新しいバージョンがあります)
Tetsu Yama
Lt 111119
Lt 111119
Tomoyuki Obi
Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道
Shinsuke Sugaya
Phpではじめるオブジェクト指向(公開用)
Phpではじめるオブジェクト指向(公開用)
VOYAGE GROUP
デザイナーのためのPHP講座 for WordPress (初級)
デザイナーのためのPHP講座 for WordPress (初級)
佑 小田垣佑
Ähnlich wie 現実(えくせる)と戦う話
(20)
やや関数型を意識した風Elixir/Phoenixご紹介
やや関数型を意識した風Elixir/Phoenixご紹介
Xtext 紹介
Xtext 紹介
PHP基礎勉強会
PHP基礎勉強会
Gensim
Gensim
asm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web games
TypeScript と Visual Studio Code
TypeScript と Visual Studio Code
IdrisでWebアプリを書く
IdrisでWebアプリを書く
Cookpad Summer Intern 2015 - Programming Paradigm
Cookpad Summer Intern 2015 - Programming Paradigm
Small Basic を実務で使ってみませんか - CLR/H第56回勉強会ライトニングトーク
Small Basic を実務で使ってみませんか - CLR/H第56回勉強会ライトニングトーク
LastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめよう
初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)
DEV-011_TypeScript ~Any browser. Any host. Any OS. Open Source~
DEV-011_TypeScript ~Any browser. Any host. Any OS. Open Source~
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)
Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)
Powershell勉強会 v3 (もっと新しいバージョンがあります)
Powershell勉強会 v3 (もっと新しいバージョンがあります)
Powershell勉強会 v2 (もっと新しいバージョンがあります)
Powershell勉強会 v2 (もっと新しいバージョンがあります)
Lt 111119
Lt 111119
Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道
Phpではじめるオブジェクト指向(公開用)
Phpではじめるオブジェクト指向(公開用)
デザイナーのためのPHP講座 for WordPress (初級)
デザイナーのためのPHP講座 for WordPress (初級)
Mehr von bleis tift
PCさえあればいい。
PCさえあればいい。
bleis tift
F#の基礎(?)
F#の基礎(?)
bleis tift
No more Legacy documents
No more Legacy documents
bleis tift
解説?FSharp.Quotations.Compiler
解説?FSharp.Quotations.Compiler
bleis tift
効果の低いテストの話
効果の低いテストの話
bleis tift
テストの自動化を考える前に
テストの自動化を考える前に
bleis tift
札束でExcelを殴る
札束でExcelを殴る
bleis tift
SI屋のためのF# ~DSL編~
SI屋のためのF# ~DSL編~
bleis tift
F#事例発表
F#事例発表
bleis tift
yield and return (poor English ver)
yield and return (poor English ver)
bleis tift
F#の基礎(嘘)
F#の基礎(嘘)
bleis tift
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
bleis tift
async/await不要論
async/await不要論
bleis tift
VBAを書きたくない話(Excel-DNAの紹介)
VBAを書きたくない話(Excel-DNAの紹介)
bleis tift
JSX / Haxe / TypeScript
JSX / Haxe / TypeScript
bleis tift
自分戦略
自分戦略
bleis tift
F#で始めるスマートフォンアプリ
F#で始めるスマートフォンアプリ
bleis tift
ぼくのかんがえたさいきょうのLL
ぼくのかんがえたさいきょうのLL
bleis tift
SCMBC闇LT資料
SCMBC闇LT資料
bleis tift
SCMBC Git入門セッション発表資料
SCMBC Git入門セッション発表資料
bleis tift
Mehr von bleis tift
(20)
PCさえあればいい。
PCさえあればいい。
F#の基礎(?)
F#の基礎(?)
No more Legacy documents
No more Legacy documents
解説?FSharp.Quotations.Compiler
解説?FSharp.Quotations.Compiler
効果の低いテストの話
効果の低いテストの話
テストの自動化を考える前に
テストの自動化を考える前に
札束でExcelを殴る
札束でExcelを殴る
SI屋のためのF# ~DSL編~
SI屋のためのF# ~DSL編~
F#事例発表
F#事例発表
yield and return (poor English ver)
yield and return (poor English ver)
F#の基礎(嘘)
F#の基礎(嘘)
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
async/await不要論
async/await不要論
VBAを書きたくない話(Excel-DNAの紹介)
VBAを書きたくない話(Excel-DNAの紹介)
JSX / Haxe / TypeScript
JSX / Haxe / TypeScript
自分戦略
自分戦略
F#で始めるスマートフォンアプリ
F#で始めるスマートフォンアプリ
ぼくのかんがえたさいきょうのLL
ぼくのかんがえたさいきょうのLL
SCMBC闇LT資料
SCMBC闇LT資料
SCMBC Git入門セッション発表資料
SCMBC Git入門セッション発表資料
現実(えくせる)と戦う話
1.
えくせる 現実と戦う話 bleis-tift August 24, 2013
2.
自己紹介 @bleis / id:bleis-tift なごやではたらくゆるふわ
C#1.2er 好きな関数型言語は F# Microsoft MVP for Visual F# いよちゃんかわいいよいよちゃん
3.
4.
わたしの思う な ご や 現実・・・ げ
ん じ つ Excel 方眼紙からは逃げられない。
5.
げ ん じ
つ Excel方眼紙から目をそらす? Excel は関数型言語だ! 目を覚ませ、目の前にあるのはた だのExcelじゃない、方眼紙だ!
6.
げ ん じ
つ Excel方眼紙と戦うための武器 VBA COM Excel-DNA POI(NPOI) Type Provider ← New!
7.
型 プ ロ
バ イ ダ ー Type Provider? F#3.0 からの新機能 コンパイル時計算のための仕組み メタデータから型を生成する機能 例えば、DB のスキーマから型を作ったり ネットワークから JSON を引っ張ってきて型を 作ったり それってコードの自動生成でいいのでは?
8.
TypeProviderとコードの自動生成の違い コンパイルフェーズだけで完結できるか バージョン管理上の問題 生成されたコードを含める?含めない? 基本的には含めない方がいい。でも、生成のた めのツールをみんなが持ってるかどうかを考え ると・・・ 見せる必要のないコードを隠せる T4 使うと見せる必要のないコードが大量に・・・ (例:LangExt 3000
行や 4000 行のファイルが・・・
9.
図解TypeProvider Type Provider (¡ ¢£ に¦§¤) ©¥ あなたのコード メタデータ ¨ ! # $ % '()'0123 ・直接(文字列とかで)渡す ・ローカルファイルから 読み込む ・ネットワークから 読み込む ・h4から読み込む
10.
TypeProviderで型を提供されてみる . hoge .. . type DB =
EdmxFileHoge.edmx // DB 型を使ったコード ...
11.
色々なTypeProvider DB 系 EdmxFile SqlEntityConnection データ形式系 AppSettings (FSharpx) XAML
(FSharpx) ExcelFile (FSharpx) XmlProvider (FSharp.Data) JsonProvider (FSharp.Data) その他 Regex (FSharpx) TypeScriptProvider (FunScript) などなど。 参考: http://sergeytihon.wordpress.com/2013/08/05/
12.
ExcelTypeProvider Excel を操作するための TypeProvider 「名前」を設定した
Excel ファイルを指定す るか、 対象の範囲を別に指定する 読み込みオンリー
13.
これじゃない・・・
14.
ExcelTypeProviderのココがダメ! 「名前」が上手く使える Excel 方眼紙とか ない 範囲だけ指定してうまく扱える
Excel 方眼紙 とかない Excel と範囲を指定するための単純な文字列 のみをメタデータとして使っており、柔軟性 がない 出来れば書き込みたい こ れ は 普 通 の E x c e l ファイ ル の た め の T y p e P r o v i d e r だ・・・! これで Excel 方眼紙に立ち向かうのは無理ぽ
15.
どういうTypeProviderが欲しいのか Excel 方眼紙は多種多様 ExcelTypeProvider が持っているような前提は置 けない カスタマイズ可能なよう、メタデータは外部化 されているべき 納品物に名前情報とか埋め込んじゃ駄目なとこ ろもあるかもしれませんしねー
(白目 メタデータもある程度事前に検証したい TypeProvider に渡して初めて記述ミスに気付く、 とかは避けたい ホスト言語 (F#) で書かれていると嬉しい 作りました (作りかけ)。
16.
その名も・・・ え く せ
る 方 眼 紙 タ イ プ プ ロ バ イ ダ ー ExcelHouganshiTypeProvider! . コードの入手方法 .. .git clone https://github.com/RealWorlds/ExcelHouganshi.TypeProvider.git 一部の dll を GAC に登録してるので、VS は管理者 で開いてビルドしてください。
17.
デモ
18.
仕組み(サンプルの構成) Sample Def.fs Program.fs ExcelHouganshi.TypeProvider Houganshi ExcelFile ExcelHouganshi.TypeProvider.Data ExcelBook ExcelSheet ExcelCell Definition
19.
仕組み(コンパイル時の挙動) Sample Def.fs Program.fs ExcelHouganshi.TypeProvider Houganshi ExcelFile
20.
仕組み(コンパイル時の挙動) Sample Def.fs Program.fs ExcelHouganshi.TypeProvider Houganshi ExcelFile
21.
仕組み(コンパイル時の挙動) Sample Def.fs Program.fs ExcelHouganshi.TypeProvider Houganshi ExcelFile ... type MyHouganshi =
HouganshiDef.fs ...
22.
仕組み(コンパイル時の挙動) Sample Def.fs Program.fs ExcelHouganshi.TypeProvider Houganshi ExcelFile ... type MyHouganshi =
HouganshiDef.fs ... こいつ
23.
仕組み(コンパイル時の挙動) Sample Def.fs Program.fs ExcelHouganshi.TypeProvider Houganshi ExcelFile ... type MyHouganshi =
HouganshiDef.fs ... ... [TypeProvider] type Houganshi (...) as this = inherit TypeProviderForNamespaces () ...
24.
仕組み(コンパイル時の挙動) Sample Def.fs Program.fs ExcelHouganshi.TypeProvider Houganshi ExcelFile ... type MyHouganshi =
HouganshiDef.fs ... ... [TypeProvider] type Houganshi (...) as this = inherit TypeProviderForNamespaces () ... ファイル読み込み
25.
仕組み(コンパイル時の挙動) Sample Def.fs Program.fs ExcelHouganshi.TypeProvider Houganshi ExcelFile ... type MyHouganshi =
HouganshiDef.fs ... ... [TypeProvider] type Houganshi (...) as this = inherit TypeProviderForNamespaces () ... ファイル読み込み ... [HougenDefinition] let myHouganshi = [ Define.field Title { Type = StringField Sheet = Sheet1 Address = A1 } Define.field SubTitle { Type = StringField Sheet = Sheet1 Address = A2 } ]
26.
仕組み(コンパイル時の挙動) Sample Def.fs Program.fs ExcelHouganshi.TypeProvider Houganshi ExcelFile ... type MyHouganshi =
HouganshiDef.fs ... ... [TypeProvider] type Houganshi (...) as this = inherit TypeProviderForNamespaces () ... ファイル読み込み ... [HougenDefinition] let myHouganshi = [ Define.field Title { Type = StringField Sheet = Sheet1 Address = A1 } Define.field SubTitle { Type = StringField Sheet = Sheet1 Address = A2 } ] 一時フォルダ dll コンパイル
27.
仕組み(コンパイル時の挙動) Sample Def.fs Program.fs ExcelHouganshi.TypeProvider Houganshi ExcelFile ... type MyHouganshi =
HouganshiDef.fs ... 一時フォルダ dll
28.
仕組み(コンパイル時の挙動) Sample Def.fs Program.fs ExcelHouganshi.TypeProvider Houganshi ExcelFile ... type MyHouganshi =
HouganshiDef.fs ... 一時フォルダ dll ロード
29.
仕組み(コンパイル時の挙動) Sample Def.fs Program.fs ExcelHouganshi.TypeProvider Houganshi ExcelFile ... type MyHouganshi =
HouganshiDef.fs ... 一時フォルダ dll ロード メタデータから 型の生成
30.
仕組み(コンパイル時の挙動) Sample Def.fs Program.fs ExcelHouganshi.TypeProvider Houganshi ExcelFile ... type MyHouganshi =
HouganshiDef.fs ... 一時フォルダ dll ロード メタデータから 型の生成 型の提供
31.
仕組み(実行時に必要なもの) Sample Def.fs Program.fs ExcelHouganshi.TypeProvider Houganshi ExcelFile 一時フォルダ dll ExcelHouganshi.TypeProvider.Data ExcelBook ExcelSheet ExcelCell Definition
32.
仕組み(実行時に必要なもの) Sample Def.fs Program.fs ExcelHouganshi.TypeProvider Houganshi ExcelFile 一時フォルダ dll ExcelHouganshi.TypeProvider.Data ExcelBook ExcelSheet ExcelCell Definition
33.
できること 扱う Excel 方眼紙の形式のユーザ定義 ユーザ定義部分の外部化 ユーザ定義の
F#による記述 セルの値の読み書き
34.
できないこと 非 Windows 環境の救済 でも、内部では
NPOI 使ってるし、mono で行け るかも? VS2010 以前 (2010 含む) ユーザの救済 TypeProvider が使えるのが VS2012 移行に搭載さ れている F# VS を入れなくても F#は使えるので・・・ その他機能的な問題 セル以外を扱う (今後実装予定) なぜか VS を再起動しないとインテリセンスが反 応しない GAC に登録せずに動かす
35.
まとめ Excel 方眼紙を倒す可能性を秘めた武器を手 に入れたかもしれない でもまだ負けてる いつか Excel
方眼紙に勝ちたい そもそも、この方向で進んで勝てるのか?という 話はある (ぉ
36.
おまけ
37.
TypeProviderのつくりかた 1. F#3.0 Sample
Pack 内の ProvidedTypes-head.fs をコピーしてくる 必須ではないが、全部自分で実装するのはだるい 色々なものが internal なので、プロジェクトにコ ピーするのがいい 2. ProvidedTypeDefinition オブジェクト (提供す る型) を生成する 3. 上で作ったオブジェクトにメソッドやプロパ ティなどを生やす 4. AddNamespace を呼び出す 3 を頑張る感じ
38.
TypeProviderのデバッグ 同一ソリューション内にデバッグ用プロジェクト を作ると、dll を握りっぱなしになってビルドでき なくなる ソリューションを分ける fsproj の
PropertyGroup に以下の定義を追加 する . . StartArgumentsSample.sln/StartArguments StartActionProgram/StartAction StartProgram$(DevEnvDir)devenv.exe/StartProgram StartWorkingDirectory$(SolutionDir)/StartWorkingDirectory これでデバッグ起動すると、新しい VS が立ち上 がってデバッグ可能に!
39.
小技 ProvidedTypeDefinition の HideObjectMethods プロパティを
true に設定すると、obj のメ ソッドが隠れる コンパイル時コンパイルがかなりの回数走る ので、Git 方式でファイル存在チェックを導入 全部式木で書くのはだるいので、書ける部分 はコード引用符を使った
40.
はまったところ(その1) コンパイル時コンパイルは問題がいっぱい F#CodeDom が古い → NuGet
から取ってくるのを諦め、ソリュー ション内に追加して修正 インメモリでやろうとするとエラーになる → 一時フォルダに出力するようにした 生成するアセンブリが他のアセンブリに依存 していると、実行時エラーが発生する → アセンブリを分割して、依存を無くした Data アセンブリが見つからない → Data アセンブリを GAC 登録
41.
はまったところ(その2) 式木は問題がいっぱい コード引用符の外側の変数が、使えないこと がある → 式木を自分で構築すればできるかも?面倒 なので色々諦めた スプライス (アンクォート)
の際に Type オブ ジェクトで型指定できない → コード引用符を諦めて、式木を自分で組 み立てて回避 式木上の型と、実行時の型が合わない → がんばって型を合わせる
42.
はまったところ(その3) 時間がない 仕事が!多い!!! → がんばって仕事を終わらせる 使える言語が C#1.2 →
OOPって、楽しいですよね・・・ でも、今回はかなーり余裕をもって資料作れま した!
Jetzt herunterladen