基礎から学ぶデータベースプログラミング

[2022-06] 第18章で制作するショッピングカートのサンプルプログラムについて、同じ内容を現代の技術で作り直しました。rails7/Book2SampleShop · main · netsphere / rails-examples · GitLab Ruby 3.1, Ruby on Rails 7.

Recommendation 機能まで付いていてビックリしましたが、実装があまりに naive (未熟) に過ぎるので、そこは作り直そうと思います。

概要

書名 基礎から学ぶWebデータベースプログラミング
著者 堀川 久
判型 B5変形・336ページ
発行所オーム社
ISBN 4-274-06529-4
定価 本体 2,600円+消費税

Google ブックスにて、70ページほどを読むことができるようになりました。基礎から学ぶWebデータベースプログラミング - Google Books

本書は、データベースを活用したWebアプリケーションを製作するための入門書です。本書では、次のことに注目します。

1. データベースを使いこなす -- SQLは手書きで練習
まず、データベースについては、重要な概念や、データベースの設計の初歩も含めて、基礎的なところから解説しています。

データベースの操作(データの追加、検索、更新など)にはSQL言語を使います。私はSQLのラッパ (O/Rマッパ) であるActiveRecord (Ruby on Rails) も使いますが、その場合でもSQLの知識が不要になるわけではありません。効率のよいデータベース操作のためには、ActiveRecordが内部でどのようなSQLを内部で生成するか、意識する必要があります。

本書は、幅広く活用できるように、データベース管理システム(DBMS;OracleやPostgreSQLなど)に依存しない標準SQLに準拠しました。DBMSの差異はつど脚注しています。Webアプリケーションの開発にとって重要なものに内容を絞り、その分、実際的な表や図を多用して理解しやすくしています。

DBMSとしてPostgreSQL、MySQL、また軽量SQLライブラリであるSQLiteで動作確認しています。

2. 品質の高いWebアプリケーションを開発する -- 動くプログラムを書いてこそ
データベースの設計をして終わり、という書籍が多くあります。しかし私は、何を格納するか決めただけではまったく片手落ち(仕事が不十分)だと思います。クラス図だけではプログラムではないのと同様。

本書では、第3部で、実際的なWebアプリケーションとして、ショッピングカートとタスク管理サービスを製作します。いずれもデータベースを活用し、関連商品の提案を行ったり、ユーザー権限の管理・タスクの履歴の管理を行ったりします。

さらに、効率的なセッション管理、Webアプリケーションのセキュリティなどについてもページを割き、品質の高いWebアプリケーションを製作するために注意すべき点などを盛り込みました。

3. HTMLとプログラムを分離する
ところで、Webアプリケーションを開発する場合、デザイン(HTMLデータ)とロジック(プログラム)の混在による保守性の低下という問題が付き纏います。この問題は、PHPなどHTMLページにプログラムを埋め込むタイプの言語でも避けることができません。

本書では、「テンプレートエンジン」と呼ばれる、HTMLデータとプログラムとを分離するライブラリを活用し、この問題を解消しています。テンプレートエンジンとしては、Amritaを使っています。

読者の声

メールなどで頂いたご感想などです。有難うございます。

●2003.10.02、ruby-listメーリングリストにて。

|書店にモノが届いても分類とかがありますから、実際に並ぶのは来週になるの
|では、と思います。

 先々日再び出撃して無事見つけて買ってきました。

 SQLの入門,Rubyの入門,CGIの入門ができちゃう本です。rubyでDBを利用す
るcgiを書くとき(オレの仕事じゃん!)は,これ一冊あれば済んでしまいま
す。セッションやセキュリティに関する解説があるのも助かります。

 これに続く中級編,上級編を読みたくなりました。

●2003.09.26、とあるメーリングリストにて。

 一通り目を通しました。私は、今、グループウェアを WEB 上で
作ることができないかと、考えていたので、とても役立ちます。
必要なことが一通り網羅されています。
 簡単なアプリケーションを作ってみようと思います。

 また、今まで eruby でサイトを作っていたのですが、
Amrita のようなテンプレート・エンジンを見てしまうと、
わくわくするものを感じます。

●Webサイトで紹介いただきました。

目次

第1部 データベースとSQLの基礎
第1章 データベースとは 
第2章 SQLの基礎 
第3章 データベースの設計 
第4章 正規化 
第5章 表の作成・変更・削除とデータ型 
第6章 整合性制約 
第7章 問い合わせ 
第8章 関数と演算子 
第9章 集計とグループ化 
第10章 データ操作 
第11章 表の結合 
第12章 ビュー 
第2部 Webプログラミング入門
第13章 Rubyの概要 
第14章 データベース操作 
第15章 ページ生成とフォームデータの扱い 
第16章 クッキーとセッション管理 
第17章 Webアプリケーションのセキュリティ 
第3部 実践的なアプリケーション例
第18章 顧客情報管理 
第19章 コラボレーションツール 

目次詳細

サンプルプログラムの配布はこちら; http://www.ohmsha.co.jp/data/link/4-274-06529-4/ [リンク切れ]

正誤表

ix (2003.09.23追加)
誤:また、第19章のショッピングカートの
正:また、第18章のショッピングカートの
p.69 (2003.11.17)
誤:リスト7.9はサブクエリの結果を
正:リスト7.8ではサブクエリの結果を
p.69 (2003.11.17)
誤:次のリスト7.10は、T_仕入表から
正:次のリスト7.9は、T_仕入表から
p.180 脚注 注2 (2003.09.26)
誤:inputタグなので因ることになります。
正:inputタグなどで困ることになります。
p.222 (2003.10.05)
誤: リスト17.8は、セッションIDを
正: リスト17.7は、セッションIDを
p.258 リスト18.21 (2004.01.02、2004.01.05修正)
サンプルプログラムの修正です。常に表の先頭の利用者の情報となっていました。
誤: row = @dbi.select_one "SELECT userid, 名前 FROM T_CR_User"
正: row = @dbi.select_one "SELECT userid, 名前 FROM T_CR_User WHERE userid = ?", userid
著者略歴 (2003.09.25)
誤:著書に、『Rudy de CGI』
正:著書に、『Ruby de CGI』
好評関連書籍 (2003.09.25)
誤:基礎から学ぶCGIプログラミング(左下の方)
正:Ruby de CGI

補遺

ページ数の関係で本書に収録できなかった資料を公開します。

SQLデータ型の一覧

環境の確認とサンプルプログラムのインストール方法

また、Ruby Centre にも文書があります。

その他

Ruby 1.8.1について

2003.12.26 この節追加。2004.01.05 修正。

Rubyバージョン1.8.1でCGIライブラリに非互換な変更があり、本書のサンプルプログラムでエラーになる箇所があることが判明しました。

Ruby 1.8.0では、CGI#[]の戻り値はStringの派生クラスであるCGI::QueryExtension::Valueのインスタンスでした。このクラスはRuby 1.8.1でStringの派生クラスではなくなりました。CGI#[]の戻り値が文字列(Stringインスタンス)であることを期待している部分で、軒並みエラーが発生したりします。

この変更は正しい理解から行われたとは思えません。

Ruby 1.6と1.8の両方でCGIスクリプトを動かすにはで、Ruby 1.6との差異も含めて修正を加えています。ご参照ください。

Amrita安定版について

本書では開発版であるAmrita 1.8.2を使いましたが、HTMLの解釈などでバグが多く、回避策を講じなければならない場面があります。

安定版であるAmrita 1.0.2に以下のパッチを当てることで、より安定した環境にすることができます。このパッチはバグ修正が主で、Amrita 1.8.2に動作を合わせる以外、既存のプログラムに対する副作用はありません。

amrita-altered