群馬大学 | 医学部 | サイトトップ | Software Tips

Windows環境でウェブアプリを使ってデータを管理する方法

最終更新: 2006年 6月 29日 (木曜日) 12時02分 (書きかけ)

このページは,win32ローカル(実際に試している環境はWindows XP Professional SP2とWindows 2000 Professional SP4)で,ウェブアプリを使ってデータを管理する方法をまとめたものである。

最初はWindows環境でhttpdとPerlを動作させ,Perlで書いたcgiによってデータ入力をする方法を示す。最終的には,バックエンドとなるDBMSにpostgreSQL,フロントエンドとなるデータ入出力にはApache HTTPDとphp4を使って大規模データ管理をした上で,RODBCを使ってRからそれを使う方法をまとめることを目指して作成中である。

もちろん,常道としてはすべてwin32環境でやってしまうより,LAN環境またはインターネットを介し,バックエンドはサーバで動作させ,ブラウザでアクセスしたり,Rからサーバにアクセスして呼び出す方が安全だし確実である。しかし,ぼくのように新幹線通勤をしていると,通勤中にオフラインの状態でデータ入力をしたい(しなければならない)ことも珍しくないので,すべてwin32ローカルで済む環境にも意味はある。このままプレゼンだってできるのは利点だと思う。

特殊な用途としては,ヒトを対象としたフィールド調査でのデータ入力に便利だという点が挙げられる。個人情報保護のために,データベースは連結可能匿名化しなくてはならない場合が多いが,Excelのような表計算ソフトでの入力ではそれは難しいし,MS Accessでフォームを作って管理するのでは現地のコンピュータにインストールしてあげてくることができない。入力フォームをhtmlで書いて,postされたデータをPerlのcgiかphp+postgreSQL経由で個人情報ファイルとデータファイルに分離して保存することは簡便だし,FPDFを使ってpdfファイルを作ってCanonのBJ M40のようなポータブルプリンタで出力すれば,見やすい結果をその場で調査対象者に差し上げてくることまで可能になる。

用意するソフトウェア

まず,以下のソフトをダウンロードしてインストールする必要がある。

以上で,実行環境としてのソフトウェアのインストールは完了である。作業ディレクトリを変えるときは,httpd.confのDocumentRootとそのアクセス設定をする部分,さらにphp.iniのdoc_rootを新しい作業ディレクトリに書き換えてapacheをrestartさせれば,それだけで切り替えられる。パスの区切りが\であったり/であったりするので間違えないように注意されたい。

テスト

インストールがうまく行ったかどうかテストするには,以下のようにする。

Apache HTTPDの動作確認
c:\work\dbにindex.htmlというファイルを作り,ブラウザでhttp://localhost/を開くと,そのファイルが表示されるはずである。index.htmlの中身は,webで表示可能な内容なら何でもいいが,最小限で済ませるなら,
<html><head>
<title>test</title>
<meta http-equiv="Content-Type" content="text/html; charset=SHIFT_JIS">
</head><body>
<h1>test</h1>
<p>これはテストです</p>
</body></html>
とでもしておけば良かろう。言うまでもないが,文字コードの表示指定と,実際のそのファイルの日本語エンコーディングが一致していないと文字化けする。Windows 2000/XPのメモ帳では文字コードANSIにするとSHIFT_JISで保存される。
PHPの動作確認
c:\work\dbにindex.phpというファイルを作り,ブラウザでhttp://localhost/index.phpを開く。PHPの動作状況一覧が表示されれば,無事にhttpdからphpを呼び出せる状態になっている。index.phpの中身は,
<?php phpinfo(); ?>
とする。(注:*.plや*.cgiはFreeBSD上では実行属性をつけておかないとブラウザから実行されないが*.phpは属性によらず実行されてしまうので,このサーバ上には敢えて置かないことにする)
PostgreSQLの動作確認
まずは上記PHPの動作確認で,pgsqlという項目が表示されていることを確認する。そうでないと,PostgreSQL自体が動作可能であってもwebからphp経由で呼び出すのに支障がある。
次に,PostgreSQL自体が動作するかどうかを試す。インストールしただけで,サーバプログラムは動作している筈で,その確認は,「マイコンピュータ」の上で右クリックして「管理」を選び,「サービスとアプリケーション」の「サービス」を見ると,PostgreSQL Database Server 8.1が.\postgresというユーザで自動的に開始されていることが確認できる。次に,「スタートメニュー」→「プログラム」→「PostgreSQL 8.1」→「コマンドプロンプト」と選ぶと"C:\Program Files\PostgreSQL\8.1\bin"をカレントとしてコマンドプロンプトが開くので,そこでpsql --versionと打ってみると,psql (PostgreSQL) 8.1.4と表示されてプロンプトに戻るので,psqlが使用可能なこととそのバージョンが確認できる(アップデートしたときなど,サーバとコマンドのバージョンが違ったりするとまずいので,同じことを確認する)。次にpsql -U postgres(ユーザ名はコマンドラインで与えねばならない。省略すると現在のWindowsのログインユーザが仮定される)。パスワード入力を要求されるので,インストール時に決めたパスワードを入力すると,psqlの会話型ターミナルのプロンプトpostgres=#が表示されて入力待ちになる(このとき接続されているデータベースはインストール時に作ったpostgresという名前のものである)。ここまでくればインストールは成功しているといえる。ここでwebdbという名前のデータベースを作るには,
CREATE DATABASE webdb;
とする。これもオーナーはpostgresになる。新しく作ったwebdbに接続するには,
\c webdb
とすればよい。プロンプトがwebdb=#と変わる。psqlを抜けるにはプロンプトに対して\qと打てばよい。
もっとも,createdbとかinitdbとかcreateuserはexeファイルとして提供されているので,psqlを起動する前に,createdb -U postgres webdbなどとして新しいデータベースを作っておくのでもいい(psql内で作ってしまった場合は,先にdropdb -U postgres webdbとして消しておく)。データベースを作る前に,データベースは作れるがスーパーユーザでなくユーザ追加できない新しいユーザminatoを作っておくには,createuser -U postgres -d -S -R -P minatoとしておけばいい。ここでまず「新規ロールのパスワードを入力してください:」とパスワード入力を求められるので,ユーザminatoのパスワードを決めて入力する(2回)。次にただ「パスワード:」と表示されて入力待ちになるが,今度はこのコマンドを発行してサーバに接続しているユーザpostgresのパスワードを入力する。この新しいユーザminatoでデータベースwebdbを作るには,createdb -U minato webdbとする。パスワード入力を求められるので,minatoのパスワードを入力する。ここまで来れば,ユーザminatoでデータベースwebdbに接続するには,psql webdb minatoとすればよくなる(データベース名の後なら,-Uなしでもユーザ名と認識される。もちろんパスワード認証は必要である)。
もっとも,データベースを作ったり編集したりするのは,「スタートメニュー」→「プログラム」→「PostgreSQL 8.1」→「pgAdmin III」で起動する管理ソフトを使うと楽である。
あとはSQLコマンドが使えるので,COPY * FROM ""などで,直接データ登録や削除,編集ができる。pgAdmin IIIからだとGUIっぽいインターフェースでデータ構造とか変数一覧とかデータビューまでできる。PostgreSQLでデータを持っておくと,パスワード保護されているので,仮にマシンを盗まれてもデータを見られないと考えられる。HDDがクラッシュしたらと考えるとちょっと怖いが,見やすい形のデータをPostgreSQLに読ませたら,その見やすいデータは消してしまって,解析の都度引き出してくる方が盗難対策には安全である。
Perlの動作確認
Perlが使えるかどうかは,普通にコマンドプロンプトで,perl -vと打って,著作権情報とビルド情報が表示されれば使えると考えてよい(より詳しいビルド情報はperl -Vで得られる)。
普通にActivePerlがインストールされれば*.plに関連付けされるので,作業ディレクトリにtest.plという名前で,
print "Hello, world\n";
と1行だけの内容のファイルを作り,コマンドプロンプトでtest.plと打てば,それが実行されて,Hello, worldと表示されるはずである。
cgiとしての動作チェックは,作業ディレクトリに以下の内容のファイルをtest.cgiという名前で作り,ブラウザでhttp://localhost/test.cgiを開いて環境変数一覧が表示されればOKである(ブラウザでの表示にはいろいろ決まりごとを満足させなくてはいけないので,省力化のためにCGI.pmを利用する)。
#!C:/Perl/bin/perl
use CGI ':standard';
print header;
print start_html('test'),h1('List of environmental variables');
print '<pre>';
forearch (keys %ENV) { print "$_ = $ENV{$_}\n"; }
print('</pre>');
print end_html;

簡単な入力フォームの設計例

(追記予定)

phpとPostgreSQLを使って入出力フォームを作る

(追記予定)

できたデータベースからR+RODBCライブラリでデータを引き出して分析・作図する

(追記予定)


リンクと引用について