SlideShare a Scribd company logo
1 of 17
型プロバイダー開発
ハンズオン
【第五回】 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

組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya
 

What's hot (20)

グラフと木
グラフと木グラフと木
グラフと木
 
A3C解説
A3C解説A3C解説
A3C解説
 
新社会人が今すぐ使える、​ExcelでC#を使う方法
新社会人が今すぐ使える、​ExcelでC#を使う方法新社会人が今すぐ使える、​ExcelでC#を使う方法
新社会人が今すぐ使える、​ExcelでC#を使う方法
 
人工知能技術を用いた各医学画像処理の基礎 (2022/09/09)
人工知能技術を用いた各医学画像処理の基礎 (2022/09/09)人工知能技術を用いた各医学画像処理の基礎 (2022/09/09)
人工知能技術を用いた各医学画像処理の基礎 (2022/09/09)
 
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learninglispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learning
 
協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用
協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用
協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用
 
階層ディリクレ過程事前分布モデルによる画像領域分割
階層ディリクレ過程事前分布モデルによる画像領域分割階層ディリクレ過程事前分布モデルによる画像領域分割
階層ディリクレ過程事前分布モデルによる画像領域分割
 
四脚ロボットによる つくばチャレンジへの取り組み
四脚ロボットによるつくばチャレンジへの取り組み四脚ロボットによるつくばチャレンジへの取り組み
四脚ロボットによる つくばチャレンジへの取り組み
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
 
最適化超入門
最適化超入門最適化超入門
最適化超入門
 
Triplet Lossによる Person Re-identification
Triplet Lossによる Person Re-identificationTriplet Lossによる Person Re-identification
Triplet Lossによる Person Re-identification
 
Jetson TK1でSemi-Global Matching
Jetson TK1でSemi-Global MatchingJetson TK1でSemi-Global Matching
Jetson TK1でSemi-Global Matching
 
最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情
 
【LT資料】 Neural Network 素人なんだけど何とかご機嫌取りをしたい
【LT資料】 Neural Network 素人なんだけど何とかご機嫌取りをしたい【LT資料】 Neural Network 素人なんだけど何とかご機嫌取りをしたい
【LT資料】 Neural Network 素人なんだけど何とかご機嫌取りをしたい
 
変分ベイズ法の説明
変分ベイズ法の説明変分ベイズ法の説明
変分ベイズ法の説明
 
分散深層学習 @ NIPS'17
分散深層学習 @ NIPS'17分散深層学習 @ NIPS'17
分散深層学習 @ NIPS'17
 
エラーハンドリング
エラーハンドリングエラーハンドリング
エラーハンドリング
 
ChatGPTは思ったほど賢くない
ChatGPTは思ったほど賢くないChatGPTは思ったほど賢くない
ChatGPTは思ったほど賢くない
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
 

Recently uploaded

研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
atsushi061452
 
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
ssuserbefd24
 

Recently uploaded (12)

部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
 
情報を表現するときのポイント
情報を表現するときのポイント情報を表現するときのポイント
情報を表現するときのポイント
 
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
 
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
 
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
 
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
 
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers
 
Intranet Development v1.0 (TSG LIVE! 12 LT )
Intranet Development v1.0 (TSG LIVE! 12 LT )Intranet Development v1.0 (TSG LIVE! 12 LT )
Intranet Development v1.0 (TSG LIVE! 12 LT )
 
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
 
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
 
20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf
 
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
 

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