Fedora Core 4 + Perlな環境でMySQLを操る準備

はじめに

このエントリーでは、Fedora Core 4 + Perlな環境でMySQLを利用できるようにするための方法を説明します。

最近私は、はてなの開発者と同様に、アジャイルなWebアプリケーションの構築を可能とするMVCフレームワークCatalyst」に注目しています。CatalystではModelの所で、Perlにおける人気のO/RマッパーであるところのClass::DBIが登場します。ModleにClass::DBIを必ず使わなければならないというわけでは無いようですが、まずはClass::DBIを利用できるスキルを身に付けた方が良さそうです。

ともかく、PerlMySQLが使えないと話しが進みませんので、今回PerlMySQLが使えるように必要最小限の環境設定をしてみることにしました。

Fedora Core 4で遊ぶようになったきっかけ

最近、Redhat 9にid:jkondoさん作のText::Hatenaをインストールしようとしたのですが、Perlのバージョンが古くてインストールできませんでした。最新のPerlを別途インストールしてもよかったのですが、時間的にも厳しく面倒だったので、Fedora Core 4をインストールして、色々と遊んでみることにしました。Fedora Core 4にインストールされているPerlだと、Text::HatenaCPANシェルですんなりインストールできました。Redhat 9だと、Perlのバージョンや各種ライブラリのバージョンの問題でうまくインストールできなかった多くのCPANモジュールが、Fedora Core 4では問題なく簡単にインストールできるみたいですね。

PerlMySQLが使える環境にする

さてさて、CPANモジュールのインストールのトラブル率が激減したFedora Core 4の環境で、MySQLをインストールします。yumの設定がまだちゃんとできていないので、yumではなくRPMで手動インストールしました。

MySQLのダウンロードサイトからゲットしたRPMを、以下のようにインストールするだけでMySQLのインストールは完了です。ソースからmakeしていた頃が懐かしいです。RPMで一瞬にしてインストールできてしまうと、makeで苦しんでいた自分があほらしくなっちゃいますね。(笑

[ysano@fedora ~]$  sudo rpm -ivh MySQL-server-4.1.14-0.i386.rpm
[ysano@fedora ~]$  sudo rpm -ivh MySQL-server-4.1.14-0.i386.rpm
[ysano@fedora ~]$  sudo rpm -ivh MySQL-devel-4.1.14-0.i386.rpm

ここでMySQL-devel-4.1.14-0.i386.rpmをインストールしておくのがポイントです。これをインストールしておかないと、後でDBD::mysqlCPANシェルからインストールしようとする時にうまくインストールできないので注意が必要です。MySQLのドライバをコンパイルするためには、MySQL-devel-4.1.14-0.i386.rpmでインストールされる各種C言語のヘッダーファイルと、ユーティリティープログラムが必須なようです。

さて、残るはDBD::mysqlのインストールです。以下のコマンドを打てば、問題無くインストールできました。

[ysano@fedora ~]$ sudo perl -MCPAN -e 'install DBD::mysql'

DBIPerlからMySQLにクエリーを投げるテスト

無事、PerlMySQLを利用するための環境が整いました。そこで実験としてPerlに標準インストールされている「DBI」を使ってMySQLにクエリーを投げるPerlスクリプトを書くことにしました。DBIを使えばデータベースをSQLで簡単に操作できます。

MySQLのrootユーザーのパスワードの変更は、まだ行っていないのでパスワードは空の状態です。実験として、データベースにはMySQLのインストール時に用意される「test」データベースを用いることにします。ちなみに、「test」データベースにある「testaa」テーブルのスキーマと、格納されているデータは以下の通りです。idが6と7の行が、「?」になっているのはなぜだかよくわかりません。。。

[ysano@fedora ~]$ mysql -u root test
mysql> desc testaa;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id    | int(11)  |      |     | 0       |       |
| name  | char(64) | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+

mysql> SELECT * FROM testaa;
+----+---------------------+
| id | name                |
+----+---------------------+
|  1 | Alligator Descartes |
|  3 | Jochen Wiedmann     |
|  2 | Tim Bunce           |
|  4 | Andreas Kg          |
|  5 | NULL                |
|  6 | ?                   |
|  7 | ?                   |
+----+---------------------+

Perlスクリプトは以下の通りです。

[ysano@fedora perl]$ vi dbi.test.pl
#!/usr/bin/perl -w
use strict;
use DBI;

my $dbh = DBI->connect('dbi:mysql:test', 'root', '', { RaiseError => 1, })
    or die DBI::errstr;

my $sth = $dbh->prepare('SELECT * FROM testaa WHERE id < 5');
$sth->execute;

print "id | name\n" . "-" x 30 . "\n"; 
while ( my @row = $sth->fetchrow_array ) {
    printf "%2d | %s\n", $row[0],$row[1];
}

$dbh->disconnect;

このPerlスクリプトを実行すると、以下のような結果が得られます。

[ysano@fedora perl]$ ./dbi.test.pl
id | name
------------------------------
 1 | Alligator Descartes
 3 | Jochen Wiedmann
 2 | Tim Bunce
 4 | Andreas Kg

さいごに

ということで、Fedora Core 4 + Perlな環境でMySQLを操る準備ができました。これからは、時間がある時にClass::DBIのトレーニングをしていきたいと思っています。そしてCatalystの勉強も同時に行いながら、前からPerlで作ってみたかった「秘密のアプリ」を作ってみたいと思います。(ないしょです)