SlideShare a Scribd company logo
型プロバイダー開発
ハンズオン
【第五回】 Fun Fan Fsharp 発表資料
自己紹介
京德 優希 (きょうとく ゆうき)
1994年12月20日生まれ(現在27歳)
Twitter : ゆきあん@snowapricot47
F#は2017年からかな
現在休職中(2月~6月?)
復職、転職の決断をする
背景
型プロバイダー面白そう
自分がインプットしたことをアウトプットしたい
調べていくうち、私の言いたいことをほとんど言わ
れているという気持ち
型プロバイダーとは
メタデータを与えて型を生成できる
・ローカルにあるCSVのファイルから型を作ったり
・ネットワークからJsonを受け取って型を作ったり
IDEと組み合わせるとコード補完が効く
コンパイル時計算としても使える
今回のスコープ
1. 型プロバイダーのテンプレートの使い方
2. 型プロバイダーの作り方
3. 実際にやってみる
型プロバイダーのテンプレートの使い方
dotnet new -i FSharp.TypeProviders.Templates
dotnet new typeprovider –o [プロジェクト名]
cd [プロジェクト名]
いくつかのファイルを修正する
dotnet tool restore
dotnet paket update
dotnet build
ProvidedTypes.fs/fsi をプロジェクトに追加したいっぽい
paket を使っていい感じに解決してくれている
型プロバイダーのテンプレートの使い方
以下のファイルを修正した方がいいかも
global.json
sdkのバージョンを「5.0.400」から変更
paket.dependencies
Fsharp.Coreのバージョンを「4.7.2」から変更
src/[パッケージ名].Runtime
Fsharp.Coreのバージョンを「4.7.2」から変更
自分で型プロバイダーを作成する
主にDesignTime.fsを触ることになる
TypeProviderForNamespacesを継承したクラスを作る
TypeProvider属性を付ける
TypeProviderConfigとassemblyReplacementMapについては、
今回はおまじないと思ってもらって(今回は使わないので
後々使うものをついでに定義しておく(ns, asm)
[<TypeProvider>]
type SampleProvider (config : TypeProviderConfig) as this =
inherit TypeProviderForNamespaces (config,
assemblyReplacementMap=[("SampleProvider.DesignTime", "SampleProvider.Runtime")])
let ns = "SampleNamespace"
let asm = Assembly.GetExecutingAssembly()
自分で型プロバイダーを作成する
1. 型を作る関数を作る
1. 型名と引数を受け取れるようにする
2. 型を作る
3. 型にメンバーを追加する
4. 型を返す
2. 静的パラメータを受け取る処理を作る
3. 名前空間に追加する
型を作る
ProvidedTypeDefinitionで定義する
必要そうなものだけピックアップ
引数名 型名 指定内容
assembly Assembly 型を含めるアセンブリ
namespaceName string 名前空間名
className string クラス名
baseType Type option 基底クラス
hideObjectMethods bool option Objectクラスのメソッドを使わないならtrue
isErased bool option 消去型ならtrue 生成型ならfalse
型にメンバーを追加する
以下の型を作成し、AddMemberで加える
よく使うものをピックアップ
型名(Provided) 名称指定 引数指定 型指定 コード指定
Constructor なし parameters なし invokeCode
Property propertyName なし propertyType getterCode
setterCode
Method methodName parameters returnType invokeCode
型にメンバーを追加する
コード指定はExpr型を利用している
コードクォートとスプライス演算子の知識が必要
Exprを作るときは <@@ @@> で囲む
Exprから取り出すときは %% を前につける
let expr1: Expr = <@@ 3 :> obj @@>
let expr2: Expr = <@@ %%expr1 @@>
let f (expr: Expr): Expr = <@@ (%%expr :> obj) :?> int @@>
静的パラメータを受け取る処理を作る
型を作り、DefineStaticParametersを呼び出す
基本的には型を作る関数を呼び出すだけ
静的パラメータはobjのため、キャストして渡す
let provider = ProvidedTypeDefinition(asm, ns, “MyProvider”,
Some typeof<obj>, isErased=false)
provider.DefineStaticParameters(
[ProvidedStaticParameter("count", typeof<int>)],
fun typeName args -> createType typeName (args[0] :?> int)
)
名前空間に追加する
this.AddNamespaceを呼び出すだけ
名前空間、作成した型のリストを渡す
Provided~はAddXmlDocでコメントを付けられる
provider.AddXmlDoc("<sammary> ドキュメント</sammary>")
do this.AddNamespace(ns, [provider])
ハンズオン!
さすがにブラウザ環境ではできないのVSCodeで
以下の流れで行きます
1. 自分で作ったものを実演
2. プロジェクト作成から完成まで
参考になるページ
The F# Type Provider SDK (fsprojects.github.io)
https://fsprojects.github.io/FSharp.TypeProviders.SDK/
Type Providers From the Ground Up - Mavnn's blog
https://blog.mavnn.co.uk/type-providers-from-the-ground-up/
なごやまつりでF# Type Providerについて(?)話してきた - ぐるぐ
る~ (hatenablog.com)
https://bleis-tift.hatenablog.com/entry/ngmatsuri
型プロバイダー(TypeProviders)のちょっとしたアレコレ - Bug
Catharsis (hatenablog.com)
https://zecl.hatenablog.com/entry/TypeProvderArekore
ご視聴ありがとうございました
感想とかもらえると嬉しいです(励みになります)

More Related Content

What's hot

BERT+XLNet+RoBERTa
BERT+XLNet+RoBERTaBERT+XLNet+RoBERTa
BERT+XLNet+RoBERTa
禎晃 山崎
 
統計的係り受け解析入門
統計的係り受け解析入門統計的係り受け解析入門
統計的係り受け解析入門Yuya Unno
 
OCamlでWebアプリケーションを作るn個の方法
OCamlでWebアプリケーションを作るn個の方法OCamlでWebアプリケーションを作るn個の方法
OCamlでWebアプリケーションを作るn個の方法Hiroki Mizuno
 
[自己PR]12/23 エンジニア"1on1"面談会
[自己PR]12/23 エンジニア"1on1"面談会[自己PR]12/23 エンジニア"1on1"面談会
[自己PR]12/23 エンジニア"1on1"面談会
Toshi Matsumoto
 
今から始める Lens/Prism
今から始める Lens/Prism今から始める Lens/Prism
今から始める Lens/Prism
Naoki Aoyama
 
[DL輪読会]ODT: Online Decision Transformer
[DL輪読会]ODT: Online Decision Transformer[DL輪読会]ODT: Online Decision Transformer
[DL輪読会]ODT: Online Decision Transformer
Deep Learning JP
 
ゼロから始める自然言語処理 【FIT2016チュートリアル】
ゼロから始める自然言語処理 【FIT2016チュートリアル】ゼロから始める自然言語処理 【FIT2016チュートリアル】
ゼロから始める自然言語処理 【FIT2016チュートリアル】
Yuki Arase
 
トランザクションをSerializableにする4つの方法
トランザクションをSerializableにする4つの方法トランザクションをSerializableにする4つの方法
トランザクションをSerializableにする4つの方法
Kumazaki Hiroki
 
Angle-Based Outlier Detection周辺の論文紹介
Angle-Based Outlier Detection周辺の論文紹介Angle-Based Outlier Detection周辺の論文紹介
Angle-Based Outlier Detection周辺の論文紹介
Naotaka Yamada
 
Obsのプラグイン作ってみた
Obsのプラグイン作ってみたObsのプラグイン作ってみた
Obsのプラグイン作ってみた
Yoshimura Soichiro
 
Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法
Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法
Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法
Sho Yoshida
 
PostgreSQLアーキテクチャ入門
PostgreSQLアーキテクチャ入門PostgreSQLアーキテクチャ入門
PostgreSQLアーキテクチャ入門
Uptime Technologies LLC (JP)
 
マルチコアを用いた画像処理
マルチコアを用いた画像処理マルチコアを用いた画像処理
マルチコアを用いた画像処理
Norishige Fukushima
 
MLflowによる機械学習モデルのライフサイクルの管理
MLflowによる機械学習モデルのライフサイクルの管理MLflowによる機械学習モデルのライフサイクルの管理
MLflowによる機械学習モデルのライフサイクルの管理
Takeshi Yamamuro
 
C++ マルチスレッド 入門
C++ マルチスレッド 入門C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
 
トランザクションの並行実行制御 rev.2
トランザクションの並行実行制御 rev.2トランザクションの並行実行制御 rev.2
トランザクションの並行実行制御 rev.2
Takashi Hoshino
 
Portacle : Common Lispのオールインワン開発環境
Portacle : Common Lispのオールインワン開発環境Portacle : Common Lispのオールインワン開発環境
Portacle : Common Lispのオールインワン開発環境
Satoshi imai
 
RedisConf17- durable_rules
RedisConf17- durable_rulesRedisConf17- durable_rules
RedisConf17- durable_rules
Redis Labs
 
NetworkXによる語彙ネットワークの可視化
NetworkXによる語彙ネットワークの可視化NetworkXによる語彙ネットワークの可視化
NetworkXによる語彙ネットワークの可視化
Shintaro Takemura
 
Sqlアンチパターン(メタデータトリブル)
Sqlアンチパターン(メタデータトリブル)Sqlアンチパターン(メタデータトリブル)
Sqlアンチパターン(メタデータトリブル)Tomoaki Uchida
 

What's hot (20)

BERT+XLNet+RoBERTa
BERT+XLNet+RoBERTaBERT+XLNet+RoBERTa
BERT+XLNet+RoBERTa
 
統計的係り受け解析入門
統計的係り受け解析入門統計的係り受け解析入門
統計的係り受け解析入門
 
OCamlでWebアプリケーションを作るn個の方法
OCamlでWebアプリケーションを作るn個の方法OCamlでWebアプリケーションを作るn個の方法
OCamlでWebアプリケーションを作るn個の方法
 
[自己PR]12/23 エンジニア"1on1"面談会
[自己PR]12/23 エンジニア"1on1"面談会[自己PR]12/23 エンジニア"1on1"面談会
[自己PR]12/23 エンジニア"1on1"面談会
 
今から始める Lens/Prism
今から始める Lens/Prism今から始める Lens/Prism
今から始める Lens/Prism
 
[DL輪読会]ODT: Online Decision Transformer
[DL輪読会]ODT: Online Decision Transformer[DL輪読会]ODT: Online Decision Transformer
[DL輪読会]ODT: Online Decision Transformer
 
ゼロから始める自然言語処理 【FIT2016チュートリアル】
ゼロから始める自然言語処理 【FIT2016チュートリアル】ゼロから始める自然言語処理 【FIT2016チュートリアル】
ゼロから始める自然言語処理 【FIT2016チュートリアル】
 
トランザクションをSerializableにする4つの方法
トランザクションをSerializableにする4つの方法トランザクションをSerializableにする4つの方法
トランザクションをSerializableにする4つの方法
 
Angle-Based Outlier Detection周辺の論文紹介
Angle-Based Outlier Detection周辺の論文紹介Angle-Based Outlier Detection周辺の論文紹介
Angle-Based Outlier Detection周辺の論文紹介
 
Obsのプラグイン作ってみた
Obsのプラグイン作ってみたObsのプラグイン作ってみた
Obsのプラグイン作ってみた
 
Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法
Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法
Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法
 
PostgreSQLアーキテクチャ入門
PostgreSQLアーキテクチャ入門PostgreSQLアーキテクチャ入門
PostgreSQLアーキテクチャ入門
 
マルチコアを用いた画像処理
マルチコアを用いた画像処理マルチコアを用いた画像処理
マルチコアを用いた画像処理
 
MLflowによる機械学習モデルのライフサイクルの管理
MLflowによる機械学習モデルのライフサイクルの管理MLflowによる機械学習モデルのライフサイクルの管理
MLflowによる機械学習モデルのライフサイクルの管理
 
C++ マルチスレッド 入門
C++ マルチスレッド 入門C++ マルチスレッド 入門
C++ マルチスレッド 入門
 
トランザクションの並行実行制御 rev.2
トランザクションの並行実行制御 rev.2トランザクションの並行実行制御 rev.2
トランザクションの並行実行制御 rev.2
 
Portacle : Common Lispのオールインワン開発環境
Portacle : Common Lispのオールインワン開発環境Portacle : Common Lispのオールインワン開発環境
Portacle : Common Lispのオールインワン開発環境
 
RedisConf17- durable_rules
RedisConf17- durable_rulesRedisConf17- durable_rules
RedisConf17- durable_rules
 
NetworkXによる語彙ネットワークの可視化
NetworkXによる語彙ネットワークの可視化NetworkXによる語彙ネットワークの可視化
NetworkXによる語彙ネットワークの可視化
 
Sqlアンチパターン(メタデータトリブル)
Sqlアンチパターン(メタデータトリブル)Sqlアンチパターン(メタデータトリブル)
Sqlアンチパターン(メタデータトリブル)
 

Recently uploaded

Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
tazaki1
 
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
azuma satoshi
 
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
嶋 是一 (Yoshikazu SHIMA)
 
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
Yuki Miyazaki
 
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
osamut
 
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
Osaka University
 
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
sugiuralab
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
harmonylab
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
Toru Tamaki
 

Recently uploaded (9)

Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
 
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
 
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
 
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
 
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
 
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
 
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
 

型プロバイダー開発ハンズオン.pptx