連載
» 2003年11月11日 00時00分 公開

DB2マイスター養成講座(3):DB2アプリケーション開発環境の整備

データベースにはアプリケーション開発がつきものだ。今回は、各種言語でDB2アプリケーションを開発する環境の構築方法を紹介する。(編集局)

[小林慶彦,@IT]

 今回は、アプリケーション開発の環境整備について解説します。アプリケーションといってもさまざまな形態が考えられますが、LinuxというとやはりWebアプリケーションでしょうか。WebアプリケーションとなるとJava、PHP、Perlの3つの開発環境を押さえておけば十分でしょう。

DB2 for Linuxで使用できる開発言語

 DB2でアプリケーションを作成する際に、IBMが正式にサポートしている開発言語およびバージョンは以下のとおりです(2003年11月3日現在)。

C GNU/Linux gcc versions 2.95.3 and 2.96
C++ GNU/Linux g++ versions 2.95.3 and 2.96
Java IBM Developer Kit and Runtime Environment for Linux, Java 2 Technology Edition, Version 1.3.1, 32-bit version
Perl Perl 5.004_04 or later, DBI 0.93 or later
REXX Object REXX Interpreter for Linux Version 2.1
注:最新の情報は、IBMのサイト(http://www.ibm.com/software/data/db2/udb/ad/)で調べることができます。

 Javaについては、IBMのJDK 1.3.1しか正式にサポートしていないので注意が必要です。IBMのJDK 1.3.1はDB2本体と同時にインストールされます。ただし、日本語のフォントはインストールされないので、DB2のインストール後に手動でコピーする必要があります。

参考:「Kylix 3とDB2で作るWebサービス・アプリケーション」第1回 開発環境の用意とテストアプリの作成

 上記のサイトにはPHPが見当たりませんが、PHPもサポートされます。

■どの言語で開発するか?

 では、何を使ったらよいのでしょうか? フレームワークが充実しているJava(J2EE)でしょうか? オープンソースで情報量の多いPHPでしょうか? はたまた最も枯れているPerlでしょうか?

 開発言語に正解はありませんが、選ぶ際のポイントを挙げておきます。

  • 開発生産性が高いか
  • スケーラビリティがあるか
  • 運用性・保守性に優れているか
  • スキルを持った開発者がいるか

 開発生産性については、単に開発ツールやフレームワークが充実しているという意味ではなく、アプリケーションの要件や実際に開発を行う開発者のリソースを含めたトータルの開発生産性を検討する必要があります。開発者のスキルも重要な判断材料です。開発者を教育するためのコストも無視できません。最先端のフレームワークを選んでも、そのための教育コストが増えるようでは問題です。

 また、LinuxでWebアプリケーションを構築する場合、「小さくスタートして大きく育てる」というコンセプトを持つ方もいるでしょう。その際は、拡張性やスケーラビリティが重要です。特にオンライン証券システムなどでは、予期しない最大負荷が突然発生するため、オンデマンドの拡張性が要求されます。

 以上のことを踏まえ、さらに最近のWebアプリケーションの事情を考慮すると、選択肢はJava(J2EE)、PHP、Perlに絞られるのではないでしょうか。

環境の構築

 Webアプリケーションを開発/実行するための環境を構築しましょう。オープンソースのTomcat、PHP、Perl(DBI)などは、ソースからコンパイルして環境を用意する方法がいろいろなところで紹介されています。例として、IBMのサイトを紹介します。

 しかし、ソースからのコンパイルではバージョンアップやアンインストールの際に手続きが煩雑になってしまいがちです。LinuxにはRPMというパッケージ管理方法が提供されているのですから、保守性を考慮すればRPMパッケージを使わない手はありません。ここでは、RPMパッケージを使った環境構築方法を解説します。

■Java(J2EE)

 Javaを使ったWebアプリケーションとなると、やはり「Apache+Tomcat+DB2」の組み合わせです。TomcatのインストールやApacheとの連携については、すでにさまざまなところで紹介されているので、ここでは特に触れません。DB2と連携する際の注意点としては、Type2のJDBCドライバを使用する際にはインスタンスの環境変数が必要なので、Tomcatの起動スクリプトなどに追加しておく必要があります。また、Type3ドライバはいずれ廃止されるようなので、Type2かType4ドライバの利用をお勧めします。

 Type2ドライバは、DB2 UDB V8.1のFixPak2から新しいものが提供されているので、そちらの利用をお勧めします。従来のType2ドライバは、[インスタンス・ホームディレクトリ]/sqllib/java/db2java.zipでしたが、新しいものは、[インスタンス・ホームディレクトリ]/sqllib/java/以下に3つのファイルが用意されています。

  • db2jcc.jar
  • db2jcc_license_cisuz.jar
  • db2jcc_license_cu.jar

 これらはType4ドライバと共用になっていて、接続URLで使い分けます。

Type2 jdbc:db2:sample         
Type4 jdbc:db2://localhost:50000/sample
ドライバ接続例

 Type4ドライバは、DB2のクライアントがインストールされていないマシンでも利用可能です。また、Type2のようにアプリケーション・サーバ起動時にインスタンス関連の環境変数も必要ないので、アプリケーション・サーバの構成をシンプルにできます。

■PHP

 PHPについては以下の環境を例に、DB2に対応したRPMパッケージを作成してみましょう。

OS     : Red Hat Linux 8.0
PHP 4   : php-4.2.2(RPM)
Apache   : httpd-2.0.40(RPM)
RDBMS   : DB2 UDB V8.1

●パッケージのダウンロード

 必要なRPMおよびSRPMパッケージはCD-ROMからインストールするか、以下のURLからダウンロードしてください。

●RPMの作成に必要なパッケージ

 まず、php-4.2.2-8.0.8.src.rpmを用意します。このSRPMパッケージをインストールすると、/usr/src/redhat/SPECS以下に[パッケージ名].specファイルが作成されます。その中の「BuildRequires」に、パッケージをビルドする際に必要なパッケージが記述されています。

 必要なパッケージがインストールされていないと、ビルドの際の依存関係チェックでエラーになります。PHPはかなり多くのパッケージを必要とします。OSのインストール時にPHPがインストールされていれば、依存関係は問題ありません。事前のチェックが煩雑なので、PRMインストール時に-testオプションを付けて依存関係をチェックし、必要なものをインストールする方法がよいでしょう。

●SRPMのインストールとSPECファイルの準備

 SRPMをインストールします。

# rpm -ihv php-4.2.2-8.0.8.src.rpm

 インストールしたら、/usr/src/redhat/SPECS/php.specをphp_DB2.specというファイル名でコピーし、php_DB2.specを修正します。具体的には、22行目を以下のように修正します。

Release: 8.0.8

Release: 8.0.8.DB2

 今回はDB2用にODBC関数を使用するため、unixODBCは使えなくなります。BuildRequiresとRequiresをコメントアウトあるいは削除します(276、277行目)。

# BuildRequires: unixODBC-devel
# Requires: unixODBC

 また、449行目を以下のように変更します。

        --with-unixODBC=shared \

        --with-ibm-db2=shared \

 ここではDB2のインストールディレクトリを指定しませんでしたが、デフォルトで/home/db2inst1/sqllibがDB2関連のファイルのあるディレクトリ(include、lib)となっています。db2inst1というインスタンスがない場合は、以下のように指定します。

        --with-ibm-db2=shared,/opt/IBM/db2/V8.1/ \

●RPMのビルド

 修正したSPECファイルを使って、RPMをビルドします。

# cd /usr/src/redhat/SPECS/<BR>
# rpmbuild -bb php.DB2.spec

 最後に「exit 0」で終了すれば、作成完了です。以下の9つのパッケージが作成されます。

書き込み中: /usr/src/redhat/RPMS/i386/php-4.2.2-8.0.8.DB2.i386.rpm
書き込み中: /usr/src/redhat/RPMS/i386/php-devel-4.2.2-8.0.8.DB2.i386.rpm
書き込み中: /usr/src/redhat/RPMS/i386/php-imap-4.2.2-8.0.8.DB2.i386.rpm
書き込み中: /usr/src/redhat/RPMS/i386/php-ldap-4.2.2-8.0.8.DB2.i386.rpm
書き込み中: /usr/src/redhat/RPMS/i386/php-manual-4.2.2-8.0.8.DB2.i386.rpm
書き込み中: /usr/src/redhat/RPMS/i386/php-mysql-4.2.2-8.0.8.DB2.i386.rpm
書き込み中: /usr/src/redhat/RPMS/i386/php-pgsql-4.2.2-8.0.8.DB2.i386.rpm
書き込み中: /usr/src/redhat/RPMS/i386/php-odbc-4.2.2-8.0.8.DB2.i386.rpm
書き込み中: /usr/src/redhat/RPMS/i386/php-snmp-4.2.2-8.0.8.DB2.i386.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.75192
+ umask 022
+ cd /usr/src/redhat/BUILD
+ cd php-4.2.2
+ '[' /var/tmp/php-root '!=' / ']'
+ rm -rf /var/tmp/php-root
+ exit 0

RPMのインストール

 それでは、作成したRPMをインストールしましょう。DB2とPHP 4の連携に必要なファイルは以下の2つのパッケージです。

  • php-4.2.2-8.0.8.DB2.i386.rpm
  • php-odbc-4.2.2-8.0.8.DB2.i386.rpm

 すでにPHPパッケージがインストールされている場合は、一度削除してからインストールします。

# rpm -e php
# rpm -e php-odbc
# rpm -ihv php-4.2.2-8.0.8.DB2.i386.rpm
# rpm -ihv php-odbc-4.2.2-8.0.8.DB2.i386.rpm

 「libdb2.so.1 is needed by php-odbc-4.2.2-8.0.5.DB2」というエラーが出る場合は、--nodepsオプションを付けてインストールします。

# rpm -ihv --nodeps php-odbc-4.2.2-8.0.8.DB2.i386.rpm

●Apache 2.0(httpd-2.0.40)との連携

 DB2に対応したPHP 4のDSOをApacheから利用するには、Apacheの起動時にDB2の環境設定が必要になります。

 apachectlの30行目付近に、以下の3行を追加します。

# The following three lines have been added by UDB DB2 V8.1
if [ -f /home/db2inst1/sqllib/db2profile ]; then
    . /home/db2inst1/sqllib/db2profile
fi

 Apacheを起動(再起動)します。

# apachectl restart

●Apache+PHP 4のテスト

 /var/www/html/に、以下のテストスクリプト(phptest.php)を準備します。

<?php phpinfo(); ?>

 以下のURLにアクセスして確認します。

http://[ホスト名 or IPアドレス]:[ポート番号]/phptest.php
上記URLにアクセスした画面

 ODBCセクションのODBC Libraryにdb2があることを確認します。

 実際にデータベースにアクセスできるかどうかのテストは、以下のページを参照してください。

■Perl

 Perlについては、以下の環境を前提にしています。

OS    : Red Hat Linux 8.0
DBI   : perl-DBI-1.30(RPM)
RDBMS : DB2 UDB V8.1

 必要なRPMパッケージはCD-ROMからインストールするか、前述のPHPと同様にRed Hatのサイトからダウンロードしてください。

●RPMの作成に必要なパッケージ

 RPMパッケージを作成するには、上記のperl-DBI-1.30のほかにperl-DBD-DB2-0.76-8.src.rpmが必要ですので、ダウンロードしてください。

 このSRPMをインストールすると、/usr/src/redhat/SPECS以下に[パッケージ名].specファイルがインストールされます。その中の「BuildRequires」に、ビルドに必要なパッケージが記述されています。必要なパッケージがインストールされていないと、ビルドの際の依存関係チェックでエラーになります。PHPと同様、PRMインストール時に-testオプションを付けて依存関係をチェックし、必要なものをインストールしましょう。

●SRPMのインストールとRPMのビルド

 SRPMをインストールします。

# rpm -ihv perl-DBD-DB2-0.76-8.src.rpm

 次に、RPMをビルドします。

# cd /usr/src/redhat/SPECS/
# rpmbuild -bb perl-DBD-DB2.spec

 最後に「exit 0」で終了すれば、作成完了です。以下のパッケージが作成されます。

書き込み中: /usr/src/redhat/RPMS/i386/perl-DBD-DB2-0.76-8.i386.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.72993
+ umask 022
+ cd /usr/src/redhat/BUILD
+ cd DBD-DB2-0.76
+ rm -rf /var/tmp/perl-DBD-DB2-root
+ exit 0

●RPMのインストール

 作成したRPMをインストールしましょう。DB2とPerlの連携に必要なファイルは以下の2つのパッケージです。

  • perl-DBI-1.30-1.i386.rpm
  • perl-DBD-DB2-0.76-8.i386.rpm(作成したもの)

 以下のコマンドラインでインストールします。

# rpm -ihv perl-DBI-1.30-1.i386.rpm
# rpm -ihv perl-DBD-DB2-0.76-8.i386.rpm

 「libdb2.so.1 is needed by perl-DBD-DB2-0.76-8」というエラーが出る場合は、--nodepsオプションを付けてインストールします。

# rpm -ihv --nodeps perl-DBD-DB2-0.76-8.i386.rpm

●Apache 2.0(httpd-2.0.40)+mod_perlとの連携

 DB2に対応したDBD-DB2とApacheのmod_perlモジュール(mod_perl-1.99_05)を利用するには、Apacheの起動時にDB2の環境設定が必要になります。apachectlの30行目付近に以下の3行を追加します。

# The following three lines have been added by UDB DB2 V8.1
if [ -f /home/db2inst1/sqllib/db2profile ]; then
    . /home/db2inst1/sqllib/db2profile
fi

 Apacheを起動(再起動)します。

# apachectl restart

 実際にデータベースにアクセスできるかどうかのテストは、以下のページを参照してください。

検索結果画面

 画面のように検索結果が表示されれば、mod_perlとDBD::DB2、DB2が連携できています。

SQLの開発/デバッグ

 環境が準備できればいよいよ開発となるわけですが、厄介なのがSQLのデバッグです。Javaの開発ツールはServletやJSPのデバッグ機能は持っていますが、SQLのデバッグは難儀です。EmacsやXEmacsには、SQL文を編集・実行できるSQLモードが用意されています。

 SQLモードを使うと、エディタで編集しながらSQLを実行し、結果セットやエラーを確認できるのでとても便利です。ぜひお試しください。


 今回は、開発環境の準備を中心に解説してきました。DB2との連携がうまくいけば、その後は一般的なJavaやPHP、Perlの世界の話です。

 次回は、データベースのバックアップとリカバリについてお話しします。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。