簡単Webプログラミング!

2008年5月30日(金)
吉田 裕美

SQLite3インストール!

 Gaucheは、RDB(リレーショナルデータベース)に依存しないデータベースインタフェース(dbi)モジュールを持っています。各RDB用にデータベースドライバ(dbd)モジュールを用意することで、GaucheからRDBを扱えます、現在、MySQL、PostgreSQL、SQLite3などのデータベースドライバモジュールがあります。

 今回使うSQLite(http://www.sqlite.org/)は組み込み型RDBで、サーバ管理などが不要なため、扱いやすいのが特徴です。

 Linuxでは、パッケージ管理ソフト(apt、yum、rpmなど)でインストールするのが良いでしょう。Mac OS/XにはSQLite3がプリインストールされてます。

 Windows(cygwin)では、第1回でGaucheをインストールしたcygwinインストーラーを使ってインストールできます。SelectPackages画面でDatabaseカテゴリにある「libsqlite3_0: Embeddate SQL database engine」「sqlite3: Embeddable SQL database engine」の2つを、Skipからインストール(バージョン番号が表示された)状態にしてインストールを実行してください。

 では、SQLite3用データベースドライバモジュールのインストールをしていきましょう。まず、SQLite3用データベースドライバ(7471.zip)をダウンロードします。このSQLite3用データベースドライバは「Gauche-dbd.sqlite3(http://uchizono.com/wiki/wiliki.cgi?Gauche-dbd.sqlite3)」に筆者が独自の改造を加えたものです。オリジナル版作者に感謝しています。

 ダウンロードしたファイルを展開し、以下の手順でインストールしてください。

1. cd gauche-dbd.sqlite3
2. ./configure
3. make
4. make install ※ 環境によっては sudo make install

 また、SQLite3で使うサンプルのデータを用意しました。(7402.zip)をダウンロードし、展開するとalih.sqlファイルができます。Cygwin Bash Shell、またはshellで「sqlite3 alih.db
 このデータはアジアリーグアイスホッケー(http://www.alhockey.jp/)の個人成績から引用させていただきました。

RDBプログラミング

 では、Gaucheを使った簡単なRDBプログラミングを行ってみます(図1)。図1のプログラムを実行すると、フォワード選手の一覧をゴール数の多い順に背番号、名前、ゴール数を表示します。プログラムについて解説していきましょう。

 1行目はdbiモジュールの読み込みです。2行目はコレクションモジュールの読み込みです。コレクションモジュールはJavaのコレクションフレームワーク(java.util.Listなど)と同様のもので、配列、リストなどを統一的に扱えます。

 「(define (print-goal)・・・」がフォワード選手の一覧を表示する関数の定義です。

 let*は第1引数でローカル変数を定義してから、第2引数以降の引数を実行する関数です。ここではconn,res getterが変数となります。これらの変数の後ろにある式の値が代入されます。その後、for-each、dbi-closeなどの式が評価されます。その際に、letで定義した変数が使えます。letという同じような関数もあります、letでは変数定義の順は不定ですが、let*は変数定義を最初から順に評価していきます。ですので最初に定義した変数を次の式の中で使えます。

 dbi-connはRDBへの接続を行う関数で、コネクションオブジェクトが戻ります。db-doはSQL文を実行する関数で、SELECT文を実行した場合は結果のコレクションが戻ります。

 relation-accessorは結果セットをカラム名でアクセスできる関数を戻してくれます。for-eachは第2引数のコレクションの各要素に対して、第1引数の関数を実行してくれます。ここではSELECT文の全結果を表示しています。

 lambdaは他の言語では無名関数などと呼ばれているものです(本連載ではSchemeの深淵な部分には立ち入りません)。ここでは引数rowを受け取り、(format...)式を評価しています。

 formatは書式を指定してきれいに表示する関数で、CやJavaのprintf関数と同様のものです、書式の詳細はGaucheのリファレンスマニュアルを参照してください。

 getter関数は1つのSELECT結果からカラム名を指定して値を取り出しています。dbi-closeはRDBへの接続を閉じます。

 最後に注意点として、本プログラムはエラー処理などを省略しています。実際のシステムに適用する場合は、guard(http://practical-scheme.net/gauche/man/?l=jp&p=guard)などで例外処理を追加してください。

CADのベンチャー企業を経て、独立し有限会社EY-Officeを設立。Java、Ruby、PerlなどでWebアプリを中心に開発を行ってきたが、現在は、教育に注力し「問題解決型の教育」に奮闘中。「Gauche-Trac(http://www.ey-office.com/gauche)」に今回の記事のサポートページを作りましたのでご活用下さい。HP:http://www.ey-office.com。Blog:http://d.hatena.ne.jp/yuum3

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています