Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

SQLiteとPHPで軽快なWebアプリケーションを作る

軽量データベースで作成するWebアプリケーション

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2007/08/22 14:00

ダウンロード サンプルソース (5.1 KB)

すべてのアプリケーションにエンタープライズ規模の多機能データベースが必要なわけではありません。単純な機能だけで用が足りる場合は、軽量データベースを使ってコストとリソースを節約しましょう。

目次

はじめに

 ここ最近のうちにオープンソースデータベース開発を行った人ならば、アプリケーションで使うデータベースを選ぼうとすると選択肢が山ほどあるということをご存知でしょう。現在では、Microsoft SQL ServerやOracleなどの商用製品だけでなく、MySQLやPostgreSQLのように、同等の機能を何分の一かのコストで提供するオープンソース製品も実用的な代替手段として利用できます。

 ただ、これらの製品は多数の堅牢な機能を備え、コストの削減にも貢献しますが、小さくはありません。PostgreSQLおよびMySQLの最新のダウンロード版は、それぞれ12MBと57MBもあります。最低限のデータベース機能だけを必要とする小規模のアプリケーションでは、機能豊富な大型データベース製品を使用するのは不釣合いであり、多くの場合、軽量データベースの方が適しています。軽量データベースはトリガ、ビュー、ストアドプロシージャなどの洗練された機能を備えていないかもしれませんが、その代わり、最小限のリソースとディスク領域で済むというメリットがあります。

 では、実際にどのような軽量データベースがあり、プロジェクト内でどのように利用できるのでしょうか? 本稿では、この質問に答えるために、いくつかの選択肢を紹介し、サンプルアプリケーションを作成してみます。本稿で紹介するサンプルWebアプリケーションは個人用の仕事リスト(TODOリスト)で、個人ユーザが自分の「するべき仕事」をデータベースに記録するためのものです。ブラウザベースのインターフェイスで、仕事リストの項目を追加、編集、削除し、完了項目および保留項目のリストを表示することができます。

必要なもの
 このサンプルアプリケーションを実行するには、Apache WebサーバーでPHPを実行できる環境が必要です。どちらもオープンソースプロジェクトであり、無料でダウンロードして開発環境にインストールできます。

データベースの選択

 ここで、現在利用できる6種類の軽量データベースを簡単に紹介します。いずれも小規模から中規模のアプリケーションに適した軽量オープンソース製品です。

  • Apache Derby
  • Apache Derbyは、おそらく最も有名な軽量Javaデータベースエンジンです。オープンソースプロジェクトであるため無料でダウンロードでき、Apache Licenseの下で個人プロジェクトまたは商用プロジェクトに利用できます。DerbyはACID完全対応で、ANSI SQL標準に準拠し、Javaアプリケーションへの直接埋め込みを前提として設計されています。このデータベースはソースアプリケーションと同じJVM上で動作し、データベース通信には埋め込みJDBCドライバを使用します。複数の同時実行ユーザに対応し(埋め込みモードでも可)、EclipseやNetBeansなどの統合開発環境ならびにTomcatやWebSphereなどのサーバー環境にスムーズに統合でき、データベース操作のためのJavaベースの対話型コマンドラインツールを数多く含んでいます。
  • H2
  • H2は、もう1つの軽量・高速のJavaベースのデータベースエンジンであり、JDBCとODBCの両APIを使って利用できます。埋め込みモードでもサーバーモードでも利用でき、トリガ、結合、ビュー、ストアドプロシージャ、暗号化に対応しています。H2は同時実行ユーザをサポートし、さらに簡単なクラスタリングメカニズムをサポートしているので、厳しいアップタイム要件が求められる基幹アプリケーションにも適しています。H2はMozilla Public Licenseの下、オンラインで無料で入手できます。
  • Ocelot
  • Ocelotは、SQL-92およびSQL-99に完全に準拠するWindows用データベースエンジンです。32ビットWindows DLLとしてパッケージ化されており、Windowsアプリケーションに簡単に統合でき、シングルユーザーモードでもマルチユーザーモードでも標準のODBC APIを通じてアクセスできます。Ocelotはトリガ、ストアドプロシージャ、ビューを完全サポートしており、データベースの保守とクエリ作成を行うためのグラフィカルな管理ツールを備えています。
  • Firebird
  • Firebirdは、Windowsおよび*NIXプラットフォームで利用できる高機能のクライアント/サーバーRDBMSです。Borlandのオープンソース版InterBaseデータベースをベースにしています。Firebirdでは、シングルユーザーデータベースエンジンを、WindowsまたはLinuxアプリケーションに直接統合できるライブラリファイルとして実現することができます(Linux版では一部制約があります)。この埋め込みエンジンはSQL-92に完全準拠し、SQL-99にほぼ準拠しています。ACID対応のトランザクション、シーケンス、トリガ、サブセレクト、参照整合性制約をサポートし、データベース操作を行うための各種コマンドラインツールを含んでいます。埋め込みFirebirdエンジンは、Mozilla Public Licenseと同等のライセンスの下で利用できます。
  • One$DB
  • One$DBは、DaffodilDBという商用Java RDBMSのオープンソース版であり、あらゆるJavaアプリケーションに埋め込み可能です。SQL-99に準拠し、JDBCを通じてアクセスできます(PHP拡張も利用できます)。暗号化テーブル、トリガ、ビュー、ストアドプロシージャをサポートしており、LGPLの下で個人目的にも商用目的にも利用できます。
  • SQLite
  • SQLiteは、スタンドアロンのCライブラリとして実装されている無料の埋め込み可能なシングルユーザーデータベースエンジンです。1つのデータベースにつき1つのディスクファイルを使用します。ドキュメントでは「SQL-92にほぼ準拠」とされていますが、外部キー制約、トリガ、ストアドプロシージャのサポートは含みません。また、限定バージョンのALTER TABLEコマンドと、フィールドデータ型のごく一部だけをサポートしています。しかし、SQLiteはここで紹介した中で最も小さく軽いデータベースエンジンであり、SQLite固有のドライバとPDOデータ抽象化レイヤの両方を通じてPHP 5.xでネイティブにサポートされています。

 これから開発するサンプルアプリケーションに最も適しているのはどのデータベースでしょうか? その答えは、各自のニーズによって異なります。オープンソースのLAMPスタックは最もコストが安く、コストの安さを優先するならば、Windows専用のOcelotはすぐに選択肢から除外されます。残る選択肢の中から、私は今回のアプリケーションのためにSQLiteを選びました。これにはいくつか理由があります。第一に、SQLiteはPHPでネイティブにサポートされているため、PHP開発者ならば特別な設定やインストールを行わなくてもすぐに開発に利用できます。第二に、SQLiteは他のデータベースとは異なりトリガ、ストアドプロシージャ、外部キー制約などの洗練された機能を備えていませんが、軽量でリソース効率が良く、高いパフォーマンスを期待できます。第三に、個人的な理由ですが、私はあまりJavaに詳しくないので、JavaベースのRDBMSエンジンよりもSQLiteの方が使いやすいと思ったからです。

データベースのインストール

 データベースとしてSQLiteを選択したら、まずはインストールする必要があります。クライアント/サーバ方式のMySQLやPostgreSQLとは異なり、SQLiteでは、コマンドラインプログラムを使用してディスクベースのデータベースファイルを直接操作します。このプログラムの各プラットフォーム用のコンパイル済みバイナリは、こちらのサイトからダウンロードできます。現時点では、WindowsおよびLinuxのコンパイル済みバイナリと、Linux、Windows、Mac OS Xシステムに対応するクロスプラットフォームのスターキット(starkit)が用意されています。

 WindowsシステムでもLinuxシステムでも、SQLiteのインストールは非常に簡単です。必要な作業は、ダウンロードしたアーカイブ(単体のバイナリファイル)の内容を、自分の選んだディレクトリ(原則的にはデフォルトのシステムパスに指定済みのもの)に展開することだけです。これにより、このバイナリを使ってSQLiteデータベースを作成および操作できます。

 このプログラムをカスタマイズしたい、あるいはお使いのプラットフォーム用のコンパイル済みバイナリがないなどの理由でプログラムをソースコードからコンパイルしたい場合は、ソースコードアーカイブをシステムにダウンロードし、ビルド領域を作成し、次に示す標準的なconfigure/make/make installの手順を使ってコードをコンパイルします。

root@thor:/tmp# tar -xzvf sqlite-3.3.17.tar.gz
root@thor:/tmp# mkdir build
root@thor:/tmp# cd build
root@thor:/tmp# ../sqlite-3.3.17/configure
root@thor:/tmp# make
root@thor:/tmp# make install

 デフォルトでは、コンパイルしたSQLiteバイナリが/usr/local/binにインストールされます。

 SQLiteバイナリをインストールしたら、本稿の作業リストアプリケーションで使用するtodo.db3という名前の空のデータベースを初期化します。このデータベースは次のようにして定義します。

Windowsの場合
C:\Apache\Data> sqlite3.exe todo.db3
SQLite version 3.3.17
Enter ".help" for instructions
sqlite>
Linuxの場合
root@thor:/usr/local/apache/data# sqlite3 todo.db3
SQLite version 3.3.17
Enter ".help" for instructions
sqlite>

 ここでSQLiteのコマンドプロンプトが表示されます。コマンドを入力するときは、先頭にピリオドを指定します。たとえば、ヘルプを表示するには.helpというコマンドを入力します。このコマンドにより、次のようなコマンド一覧が表示されます。

sqlite> .help
.bail ON|OFF           Stop after hitting an error. Default is OFF
.databases             List names and files of attached databases
.dump ?TABLE? ...      Dump the database in an SQL text format
.echo ON|OFF           Turn command echo on or off
.exit                  Exit this program
.explain ON|OFF        Turn output mode for EXPLAIN on or off.
.header(s) ON|OFF      Turn display of headers on or off
.help                  Show this message
.import FILE TABLE     Import data from FILE into TABLE
.indices TABLE         Show names of all indices on TABLE
...

 SQLiteのコマンドラインプログラムを終了するには、.quitと入力します。SQLiteのコマンドプロンプトからOSのコマンドプロンプトに戻ります。

sqlite> .quit
C:\Apache\Data>

 セキュリティのために、todo.db3データベースファイルはWebサーバーのルート以外の場所に保存するとよいでしょう。そうすれば、リモートユーザーがこのファイルをHTTP経由でダウンロードできる可能性はなくなります。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

バックナンバー

連載:japan.internet.com翻訳記事

もっと読む

おすすめ記事

All contents copyright © 2006-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5