型プロバイダー

F# 型プロバイダーは、プログラムで使用する型、プロパティ、およびメソッドを指定するコンポーネントです。 型プロバイダーは、F# コンパイラによって生成され、外部データ ソースに基づく、指定型と呼ばれるものを生成します。

たとえば、SQL 向けの F# 型プロバイダーは、リレーショナル データベース内のテーブルと列を表す型を生成できます。 実際、SQLProvider 型プロバイダーはこのような処理を行います。

指定型は、型プロバイダーの入力パラメーターに依存します。 このような入力には、サンプル データ ソース (JSON スキーマ ファイルなど)、外部サービスを直接指す URL、データ ソースへの接続文字列などがあります。 また、型プロバイダーは、必要なときにのみ型のグループを展開することができます。つまり、実際にプログラムが型を参照したときに型が展開されます。 これにより、オンライン データ マーケットのような大規模な情報空間の直接的な、必要に応じた統合を厳密に型指定された方法で実現できます。

ジェネレーティブおよび消去済みの型プロバイダー

型プロバイダーには、次の 2 つの形式があります。ジェネレーティブと消去済みです。

ジェネレーティブな型プロバイダーは、生成されるアセンブリに .NET 型として書き込むことができる型を生成します。 これにより、他のアセンブリのコードからそれらを使用できるようになります。 これは、通常、データソースの型指定された表現が、必ず .NET 型で表現できるものになることを意味します。

消去型のプロバイダーでは、生成元のアセンブリまたはプロジェクトでのみ使用できる型が生成されます。 型は一過性のものです。つまり、アセンブリには書き込まれず、他のアセンブリのコードでは使用できません。 これらには "遅延" メンバーを含めることができます。これにより、指定型を無限の (可能性がある) 情報領域から使用できるようになります。 これらは、大規模で相互接続されたデータ ソースの小さなサブセットを使用する場合に便利です。

一般的に使用される型プロバイダー

広く使用されている次のライブラリには、さまざまな用途の型プロバイダーが含まれています。

  • FSharp.Data には、JSON、XML、CSV、HTML のドキュメント形式とリソースの型プロバイダーが含まれています。
  • SQLProvider は、これらのデータ ソースに対するオブジェクト マッピングと F# LINQ クエリを通じて、リレーショナル データベースへの厳密に型指定されたアクセスを提供します。
  • FSharp.Data.SqlClient には、F# の T-SQL のコンパイル時チェック埋め込み用の型プロバイダーのセットがあります。
  • Azure Storage 型プロバイダーは、Azure BLOB、テーブル、およびキューの型を提供します。これにより、プログラム全体で、リソース名を文字列として指定しなくても、これらのリソースにアクセスできるようになります。
  • FSharp.Data.GraphQL には、URL で指定された GraphQL サーバーに基づいて型を指定する GraphQLProvider が含まれています。

必要に応じて、独自のカスタム型プロバイダーを作成することも、他のユーザーが作成した型プロバイダーを参照することもできます。 たとえば、組織に 1 つのデータ サービスを用意し、そのデータ サービスにより、増加し続ける名前付きデータセット群と各データセットの安定したデータ スキーマを提供するとします。 スキーマを読み取り、利用可能な最新のデータセットを厳密に型指定してプログラマに提示する型プロバイダーを作成することもできます。

関連項目