Go 言語で SQLite を使う(Windows 向けの紹介)
今回はパッケージの紹介のみ。 つか, Windows で cgo を使うための覚え書きのようなものか。
SQLite はアプリケーションに組み込み可能な簡易 RDBMS で,公有(public domain)のソフトウェアとして公開されている。 C 言語で書かれているため多くのプラットフォームまたは(C 言語とバインド可能な)多くのプログラミング言語で利用可能である。 コア部分のコードが(他の製品に比べて)小さいため組込みソフトウェアで使われることもある。
mattn/go-sqlite3
Go 言語で利用可能な SQLite パッケージはいくつか存在するが,標準の database/sql に対応しているのは mattn/go-sqlite3 のみのようだ。
このパッケージを利用するには GCC が必要である(内部で C 言語コードのコンパイルを行うため)。
GCC がない状態で go get
しようとすると以下のようにエラーになる。
$ go get -v github.com/mattn/go-sqlite3
github.com/mattn/go-sqlite3
# github.com/mattn/go-sqlite3
exec: "gcc": executable file not found in %PATH%
なお,必要なコードは mattn/go-sqlite3 に組み込まれているため SQLite サイトからソースコードや DLL などのバイナリを別途取ってくる必要はない1。
GCC の導入
Linux などのプラットフォームには最初から GCC が入っているが, Windows 環境には残念ながら入ってないので別途用意する必要がある2。 Windows 環境で GCC のみ が必要なのであれば MinGW-w64 から Windows 用のバイナリを取得するのがお勧めである3。
サンプルをコンパイルしてみる
mattn/go-sqlite3 に _example/simple/simple.go
というサンプルファイルがあるので,これを動かして動作確認してみる。
$ go run simple.go
これで foo.db
ファイルができていたら成功だ。
適当なブラウザツールで中身を確認してみるといいだろう。
あぁ SQLite 用の SQL 方言を覚えないと。 なんで製品ごとに SQL の方言がこんなに微妙な感じなんだろうねぇ。 特定の製品にロックインさせるための陰謀なのだろうか(笑)
ブックマーク
- DB Browser for SQLite
- SQLiteのVACUUMメモ | Siguniang’s Blog : pragma を使って自動で vacuum できるらしい
-
mattn/go-sqlite3 に組み込まれている SQLite のバージョンは 2018-03-31 時点で 3.22.0 のようだ。 ↩︎
-
Windows 10 用の Linux 系サブシステムになら入ってると思うが,私は Windows 10 を使ったことがないのでよく知らない。 ↩︎
-
GCC だけでなく autotools などの周辺ツールも必要なら MSYS2 を導入するほうがいいかもしれない(参考: MSYS2 による gcc 開発環境の構築 ― gcc パッケージ群の導入)。今回は MinGW-w64 で全く問題ない。 ↩︎