加藤大受(かとう だいじゅ)

 日立製作所ソフトウェア事業部勤務。データベースの奥深さに興味を持ち,個人活動ではオープンソースのRDBMSのプロジェクトにて日本語化や記事執筆などを行っている。仕事では,組み込みDBである「Entier」のエバンジャリストとして組み込み開発者にDBの重要性を理解してもらうための活動を積極的に推進中。

 前回は,組み込み分野でもデータベースの利用が多くなってきたということをお話ししました。今回からは実際に組み込みデータベースを利用しながら解説していきたいと思います。最初は,オープンソースの組み込みデータベースを取り上げます。

オープンソースの組み込みデータベース

 前回も主要な組み込みデータベースについて紹介しましたが,組み込み分野で利用できるオープンソースのデータベースとしては表1のようなものがあります。

表1●組み込みで利用できるオープンソースのデータベース
製品名 開発元 ライセンス サポートOS
Oracle Berkeley DB 米Oracle オープンソース(Dual License) Linux,Windows, BSD UNIX,Solaris, Mac OS/X,VxWorks,POSIX準拠のOS
Oracle Barkeley DB Java Edition 米Oracle オープンソース(Dual License) J2SE 1.4.2以降
SQLite D. Richard Hipp氏 Public Domain Windows,Mac,Linuxなど
Apache Derby Apache Software Foundation オープンソース (Apache License V2.0) JDK 1.3/1.4/1.5,J2ME/CDC/Foundation Profile
Firebird Embedded Server Firebird Project オープンソース(InterBase Public License) Windows,Linux,AIX,MacOS X

 組み込み開発を行っている方々がすぐに思い浮かぶのがSQLiteでしょう。スタティックリンクも可能になっているSQLパーサーを持つライブラリと言ってもいいでしょう。

 Oracle Berkeley DBおよびOracle Barkeley DB Java Editionは,欧米ではネットワーク機器や携帯電話などで利用されている実績があります。ただし,この製品はオープンソースのデータベースですが,ライセンスがデュアルライセンスであるため,実際にデバイスに組み込んでデバイスを販売するときにはライセンス料金が発生します。

 Firebirdは,基本的にはエンタープライズ向けのデータベースですが,Embedded Serverというシングルサーバー構成のものがあり,それはX86ベースの組み込み機器でも利用されています。同様に,MySQLも組み込み分野で利用されています。ただし,こちらもOracle Berkeley DBと同様にデュアルライセンスであるため,実際にデバイスに組み込む場合にはライセンス料金が発生します。

 Apache Derbyは,Javaで書かれたデータベースです。まだ組み込み分野ではJavaの利用は少ないですが,Javaによるプログラミングが増えていくとDerbyを利用するケースも増えてくるでしょう。現状では,エンタープライズ環境のキャッシュ・データベースとして利用されるのが一般的です。

 オープンソースといってもライセンスによって費用が発生するものもあります。利用する場合は,ライセンス条項をよく確認してください。

SQLiteを使ってみよう

 今回は,組み込みでも利用できるオープンソースのデータベースとしてSQLiteを取り上げます。SQLiteは,SQL92のサブセットをサポートするCライブラリです。直接プログラムからファイルを読み取るタイプなので,一般的なデータベースの構成であるサーバーを必要としません。イメージ的にはファイル操作をSQLで行うことができるライブラリであると言ってもいいでしょう。

 ライセンスはパブリックドメインであるために,様々な用途で利用可能です。PHPやRubyなどのプログラミング・インタフェースも用意されています。PHPではバージョン5から,Pythonではバージョン2.5から標準で組み込まれています。また,perlでもDBD::SQLiteをCPANから導入することで使用できます。このように多くの言語でサポートされているため,組み込みだけでなく,エンタープライズ分野でも省スペースのデータベースとして利用されています。

 SQLiteの特徴をあげると次のようになります。

  • SQL92をサポート
  • データベースは,単一のファイルに格納
  • トランザクション機能をサポートし,データの完全性を保護
  • データベース・ファイルの構成はバイトオーダーに依存しないため,ファイル・コピーでマシンも移動可能
  • 消費メモリーが少ない
  • ユーザーという概念はない
  • 対応するデータ型はINTEGER型,REAL型,TEXT型,BLOB型
  • パブリックドメインとして提供されており,無償であるだけでなく,ソースコードの改変や第三者への再配布も自由に行うことが可能
  • 対応する文字コードはUTF8,UCS2(UTF16)

 上にもあるように,大きな特徴の一つとして,データベースで一般的なユーザーという概念がありません。ユーザーの概念を持ち込むためには,OSのアクセス制御などを利用する必要があります。また,完全にライブラリ形式の製品なので,マルチユーザーに対応するためには自前で排他処理を実装する必要があります。

SQLiteのライブラリ作成

 では,実際にSQLiteを使用していきましょう。次のような使い方があります。

(1)バイナリをダウンロードしてコマンドラインで利用する
(2)ソースコードをダウンロードし,ライブラリを作成して,自作プログラムにスタティックリンクする

 ここでは,両方の使い方を説明をします。まず,WebサイトのDownloadページからSQLiteを入手します(図1)。ここでは,ソースコード(sqlite-source-3_3_17.zip)と,Windowsのバイナリ(sqlite-3_3_17.zip)をダウンロードします(それぞれのファイル名は,記事執筆時点のバージョンに基づいています)。

図1●SQLiteのWebサイト
図1●SQLiteのWebサイト
[画像のクリックで拡大表示]

 ソースコードを解凍すると,sqlite3.cとsqlite3.hという二つのファイルが出来ます。この二つからまずはライブラリを作成しましょう。Visual Studio 2005を起動し,新規プロジェクトを選択し,Win32プロジェクトを作成します(図2)。ここでは「sqlite3」というプロジェクト名とします。

図2●新規Win32プロジェクトの作成
図2●新規Win32プロジェクトの作成
[画像のクリックで拡大表示]

 [次へ]ボタンを押し,アプリケーションの設定を行います。今回はスタティックライブラリを選択し,プリコンパイルヘッダーのチェックは外します(図3)。

図3●アプリケーションの設定
図3●アプリケーションの設定
[画像のクリックで拡大表示]

 [完了]ボタンを押すと,スタティックライブラリ用のプロジェクトが作成されます。このプロジェクトにsqliteの二つのソースコード(sqlite3.cとsqlite3.h)を追加します(図4)。あとはソリューションのビルドを実行すれば,sqlite3.libが作成されます。たくさんの警告が発生しますが,ここでは特に気にすることはありません。

図4●プロジェクトに追加したところ
図4●プロジェクトに追加したところ
[画像のクリックで拡大表示]

 スタティックライブラリの作成ができたら,続いてSQLiteを使用するプログラムを作成しましょう。