SQLite の NuGet パッケージ
今回は以前に書いた『SQLite とメンテナンスツール』の続編です!
前のエントリでは SQLite の概要と SQLite の管理ツールの紹介を書いたので、今回は .NET 6(以降)のプロジェクトから SQLite にアクセスするためにインストールする NuGet パッケージについて紹介します。
目次
ここまでのあらすじ
最初にも書いた通り、このエントリは『SQLite とメンテナンスツール』の 続編です。
そして、『SQLite とメンテナンスツール』は『.NET6 で Generic Host を使った常駐アプリ』の続編でもあります。
最近公開したエントリは『.NET6 で Generic Host を使った常駐アプリ』を補完するために書いているので、このエントリは両方の続編と言う位置付けになっています。
続編と言っても、内容は独立しているので、両方読んでいなくても大丈夫です!(過去記事を読んでいただけるのはありがたいです!)
SQLite の Nuget パッケージ
.NET 6 のプロジェクトから SQLite にアクセスするにはまず、SQLite 用の ADO.NET プロパイダが必要なので、fig. 1 の [ソリューションの NuGet パッケージの管理]を開いて【sqlite】を検索してみます。
fig. 1 のように非常に多くのパッケージがヒットします。全パッケージの紹介はできませんが、公式パッケージに絞って簡単に紹介します。
公式パッケージ
公式のパッケージは以下のアイコンで 2 種類に大別できます。
アイコン | 内容 |
---|---|
SQLite 開発チームがリリースしている公式パッケージを表します。 | |
Microsoft 製の公式パッケージを表します。 |
両者で多少の違いはあるようですが、管理人は SQLite の公式パッケージしか使用したことがないので、Microsoft のパッケージについては触れません。SQL を発行して DB にアクセスするだけなら大きい差はないだろうと想像しています。Microsoft 製パッケージと SQLite 公式パッケージの違いは Microsoft Docs の『System.Data.SQLite との比較』で紹介されています。
管理人は上のサイトに書かれているような部分まで踏み込んで SQLite を使用した事が無いのであまりピンときませんでしたが、気になる方は読んでみてください。
System.Data.SQLite 系のパッケージ
SQLite 開発チームがリリースしている ADO.NET プロパイダは SQLite 本家サイトとは別の【System.Data.SQLite】で公開されています。
上の System.Data.SQLite サイトからダウンロードすることもできますが、NuGet を使用する方が簡単です。NuGet からインストールする場合、上では『sqlite』と書きましたが、fig. 2 のように【system.data.sqlite】で検索する方が見つけやすいと思います。
【system.data.sqlite】で検索しても多くのパッケージがヒットしますが、各パッケージの詳細は【System.Data.SQLite FAQ ページ】で紹介されています。
上の FAQ ページを翻訳した内容を以下に転記します。System.Data.SQLite からリリースされているパッケージは以下の 10 種類です。
パッケージ名 | 内容 |
---|---|
System.Data.SQLite | LINQ to SQL と Entity Framework(以降、EF)6 をサポートした ADO.NET プロバイダーと x86 / x64 に両対応した SQLite データベースエンジンを含むパッケージ。 ※ 詳細は後述 |
System.Data.SQLite.Core | ADO.NET プロバイダーと x86 / x64 に両対応した SQLite データベースエンジンを含むパッケージ。 |
System.Data.SQLite.Core.MSIL | SQLite のマネージ ADO.NET プロバイダーのみ含むパッケージ。SQLite データベースエンジンは含まれていないので、実行環境の CPU に合わせた SQLite.Interop.dll が別途必要。 |
System.Data.SQLite.EF6 | EF 6 のみサポートするパッケージ。EF 6 が依存するパッケージらしいので、EF 6 のインストール時に自動でインストールされると思います。単体でのインストールは不要だと思われます。 ※ 詳細は後述 |
System.Data.SQLite.Linq | LINQ to SQL のみをサポートするパッケージ。このパッケージ単体では動作しないようなので、別途 System.Data.SQLite 等が必要。 ※ 詳細は後述 |
Stub.System.Data.SQLite.Core.NetFramework | ADO.NET プロバイダーと x86 / x64 に両対応した SQLite データベースエンジンを含むパッケージ。 ※ 対応は .NET Framework のみ |
Stub.System.Data.SQLite.Core.NetStandard | ADO.NET プロバイダーと x86 / x64 に両対応した SQLite データベースエンジンを含むパッケージ。 ※ 対応は .NET Standard 2.x のみ |
System.Data.SQLite.MSIL | SQLite のマネージ ADO.NET プロバイダーのみ含むパッケージ。 ※ 但し、下位互換のために残されているようなので、新規アプリでの使用は非推奨。 |
System.Data.SQLite.x86 | ADO.NET プロバイダーと x86 に対応した SQLite データベースエンジンを含むパッケージ。 ※ 但し、下位互換のために残されているだけみたいなので、新規アプリでの使用は非推奨。 |
System.Data.SQLite.x64 | ADO.NET プロバイダーと x64 に対応した SQLite データベースエンジンを含むパッケージ。 ※ 但し、下位互換のために残されているだけみたいなので、新規アプリでの使用は非推奨。 |
上記に加えて、パッケージ名の末尾に『Beta』が付いているのはベータ版。『Test』が付いてるのはプレリリース版を表すようです。いくつかのパッケージについては別途調べたので、以降で簡単に紹介します。
System.Data.SQLite
System.Data.SQLite パッケージには『EF 6 対応』『.NET Framework と .NET Standard 2.1 に対応』と書かれているので、.NET Framework と .NET Standard をマルチターゲットにした EF 6 も使用するプロジェクト用のフルパッケージだと思われます。System.Data.SQLite の NuGet ページ には .NET Framework 4.0 以降には、System.Data.SQLite.EF6 に依存するとの記載があるので、.NET Framework と EF 6 を使用する場合に選択するパッケージだと思われます。
マルチターゲットのプロジェクトは作成しない、EF 6 も使用しない場合は別のパッケージを選択した方が良いと思います。
SQLite パッケージ
fig. 1 のように『sqlite』で検索した場合に検索結果の最上段に表示される【SQLite パッケージ】は何者なのか気になったので、とりあえずインストールだけしてみました。
このパッケージはデータベースエンジンのみ含むパッケージのようですが、.NET 6 のプロジェクトにインストールすると上の一覧にある【Stub.System.Data.SQLite.Core.NetStandard】も一緒にインストールされました。
SQLite パッケージ の NuGet ページ には .NET Standard 1.0 に対応の記載はありますが、それ以降の .NET Standard は記載がありません。又、最終更新日が『2016/10/18』なので(2022/8 月現在)インストールは避けた方が良いと思います。
ただ、試行結果の通り【Stub.System.Data.SQLite.Core.NetStandard】がインストールされるので、SQLite へのアクセスは可能だと思われます。(未確認)
System.Data.SQLite.Linq について
管理人は LINQ to SQL を使用した事はありませんが、『C#でSQLite3を使ってみる – 5.LINQ to SQL | Qiita』には System.Data.SQLite.Core だけで LINQ to SQL も実行できたと書かれているので、System.Data.SQLite.Linq は不要だと思われます。
NuGet の System.Data.SQLite.Linq ページ には【.NET Framework 2.0】と書かれているので、.NET Framework 2.0 で LINQ to SQL を使用するためのパッケージ?と思いましたが、詳細は分かりません。
ただ、上記 NuGet ページの【Frameworks】には .NET Core 以降の記載が無いので、.NET 6 以降で SQLite を使用する場合は気にしなくても良さそうです。(おそらく、System.Data.SQLite の依存関係としてインストールされるパッケージだと推測しています)
System.Data.SQLite.EF6
このパッケージについても簡単に調べただけなので間違えているかもしれませんが、EF 6(.NET Framework 版の EF)を使用する場合のみ、依存関係でインストールされるパッケージだと推測しています。(EF 6 をインストールしての確認はしていません)
現在(2022/8 現在)最新の .NET 6 用の EF は EF Core なので、試しに EF Core をインストールしてみましたが、System.Data.SQLite.EF6 はインストールされず『SQLitePCLRaw ~』で始まるパッケージがインストールされました。
.NET 6 以降で EF Core を使用する場合は無関係だと推測します。
.NET Standard について
ここまで普通に【.NET Standard】と書いてきましたが、【.NET Standard】とは?も簡単に紹介しておきます。検索すれば解説記事も見つかるので、そこに書かれている通りですが、『.NET Standard』と言う名前の SDK は存在しません。
.NET Standard とは、使用可能な API を定義した単なる規格名です。つまり、.NET Standard に定義された API のみ使用したアセンブリを指して『.NET Standard x.x に準拠したアプリ』と呼ばれるだけです。
但し、The future of .NET Standard – .NET Blog に書かれている通り、.NET Standard は【2.1】が最終バージョンとなり、.NET 5 → .NET 6… に統合されたようです。
つまり、『.NET Standard』と記載があれば【.NET 6(7、8…)に対応】と読み替えて構わないと言う事のようです。マルチプラットフォーム対応の過渡期に生まれた一時的な規格だと思います。
.NET 6 でインストールする NuGet パッケージ
結論から言うと、.NET 6 以降のプロジェクトにインストールする NuGet パッケージは【Stub.System.Data.SQLite.Core.NetStandard】のみで OK です。
ここまでの流れ的には【System.Data.SQLite.Core】で良さそうだと思うかもしれませんが、実は【System.Data.SQLite.Core パッケージ】は .NET Framework、.NET Standard に両対応なので、.NET 6 プロジェクトに【System.Data.SQLite.Core】をインストールすると【Stub.System.Data.SQLite.Core.NetStandard】も一緒にインストールされます。
つまり .NET Framework、.NET Standard の両方に対応したマルチターゲットなプロジェクトの場合は、【System.Data.SQLite.Core】でも構わないと思います(管理人はマルチターゲットなプロジェクトを作成した事が無いので、あくまでも予想ですが…)が、.NET 6 以降のみに対応するプロジェクトは【Stub.System.Data.SQLite.Core.NetStandard】で十分だと言えます。
実際『.NET6 で Generic Host を使った常駐アプリ』で紹介しているサンプルアプリは【Stub.System.Data.SQLite.Core.NetStandard】のみで、問題なく動作しています。
そして、上に書いた通り、EF Core を使用する場合は『SQLitePCLRaw ~』で始まるパッケージがインストールされるので、他は気にしなくても良いと思います。
【Stub.System.Data.SQLite.Core.NetStandard】をインストールしたら、『SQLite とメンテナンスツール』で紹介している DB Browser for SQLite や SQLiteStudio 等の管理ツールを使用して SQLite のデータベースファイルを作成すれば準備は完了です。
後は ADO.NET のお作法通りにコードを書けば、SQLite へのアクセスが可能になります。実際に SQLite にアクセスするサンプルソース等は、別記事で紹介する予定です!