PR

簡単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のWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

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