農薬検査所DB用携帯農薬検索システム

1 はじめに

(1) 概要

 独立行政法人農薬検査所のデータベースに携帯電話等からアクセスできないのは、
  1. 現在の携帯電話では非対応の JavaScript を多用している
  2. 1画面のデータ量が多く携帯電話の表示可能サイズを超えてしまう
のが最大の原因です。さらに、多くの携帯電話等ではまだ対応していない
  1. 文字コードに UTF-8 を使用している
  2. フレームやテーブルを使用している
という問題もあります。

 そこで、本システムは、文字コードの変換や JavaScript の動作を肩代わりする perl スクリプトを CGI として動作させ、それを経由して農薬検査所の検索システムにアクセスすることで、携帯電話等からの利用を可能にします。また、農薬検査所から送られてくるページデータは、携帯電話等の小さな画面でも見やすいように HTML タグの変換も行います。

(2) 特徴

 本システムには、下記のような特徴があります。

  1. 通信速度が低速な携帯電話等での使い勝手や Web 接続の使用料金を考慮し、ブラウザ側への送出データ量を低減
  2. 画面表示は全て HTML で書かれたテンプレートを参照しているため、perl スクリプトが分からなくても、HTML の知識があれば見栄えをカスタマイズ可能
  3. ひとつのシステムで全ての携帯電話ブラウザに対応(キャリア別に異なるテンプレートを使用可能)
  4. パスワードによる利用者制限が可能(サーバ負荷対策)
  5. 同時アクセス数制限が可能(サーバ負荷対策)

2 動作環境

(1) CGI 実行サーバの条件

 本システムは、perl の CGI になっています。本システムを使うには、CGI を実行するサーバが下記の条件を全て満たしている必要があります。本システムが使用できるかどうかは、ご利用 ISP の CGI の説明をお読みください。
 動作確認は、Apache + perl 5.8.3 で行っています。

  1. CGI の処理系として perl 5.x が使えること
  2. perl の標準モジュールがインストールされていること
  3. Socket モジュールが使用できること

 ホスティングサービスは概ねこの条件を満たしていますが、一般的な ISP の Web スペースでは、これらを全て満たすものは残念ながらあまり多くありません。たとえば、ii の条件により、@NIFTY では使用できません。また、i, ii をクリアしても、セキュリティ確保のため、Socket モジュールを使用不可にしている ISP も多くあります。

(2) 必要モジュール

 本システムを使用するためには、アーカイブに含まれるファイルのほかに、下記の perl モジュールが必要です。いずれも標準モジュールではないので、別途ダウンロードする必要があります。i は ISP によってはインストールされていますが、通常は 3.95 なので本システムでは使えません。

  1. CGI::Session 4.00 以降
  2. HTTP::Lite
  3. Unicode::Japanse

(3) 必要ツール

 本システムのインストールやカスタマイズのために、FTP クライアントソフトとテキストエディタが必要です。
 2.0.0 以降は日本語文字コード変換の負荷軽減のため、内部処理は全て UTF-8 を使用しています。このため、テキストエディタは UTF-8 に対応したものが必要です。フリーソフトでは、JmEditorMkEditor がお勧めです。

3 使用方法

 下記に基づき、システムとライブラリをサーバ上に設置します。設置後のイメージは、下図のようになります。

CGI 実行可能ディレクトリ
.smd   セッションデータ保存ディレクトリ
acis   本システム用ディレクトリ
help   画面別ヘルプファイルディレクトリ
jsky   VodafoneLive! 端末用画面別ヘルプファイルディレクトリ
*.htm   VodafoneLive! 端末用画面別ヘルプファイル
*.htm   その他端末用画面別ヘルプファイル
template   入出力画面テンプレートファイルディレクトリ
doti   ドット i 端末用入出力画面テンプレートファイルディレクトリ
*.htm   ドット i 端末用入出力画面テンプレートファイル
jsky   VodafoneLive! 端末用入出力画面テンプレートファイルディレクトリ
*.htm   VodafoneLive! 端末用入出力画面テンプレートファイル
*.htm   その他端末用入出力画面テンプレートファイル
     (s?.htm : サーバサイド CGI への送出パラメータ設定画面テンプレート)
     (g*.htm, k*.htm : サーバサイド CGI からの出力変換画面テンプレート)
index.cgi   メインスクリプト (パーミッション 755 | 705)
*.pl   サブスクリプト (状況に応じてメインスクリプトが呼び出す)
     (snd*.pl : サーバサイド CGI への送出パラメータ処理)
     (rcv*.pl : サーバサイド CGI からの出力変換処理)
     (dic*.pl : かな漢字/別名変換処理)
     (tm.pl : 屋号削除処理)
lib   ライブラリ用ディレクトリ
CGI   CGI 関連モジュール用ディレクトリ (ディレクトリ名変更不可)
Session   CGI::Session 関連モジュール用ディレクトリ(ディレクトリ名変更不可)
Driver   CGI::Session::Driver 関連モジュール用ディレクトリ(ディレクトリ名変更不可)
file.pm   CGI::Session::Driver::file モジュール
ID   CGI::Session::ID 関連モジュール用ディレクトリ(ディレクトリ名変更不可)
static.pm   CGI::Session::ID::static モジュール
Serialize   CGI::Session::Serialize 関連モジュール用ディレクトリ(ディレクトリ名変更不可)
default.pm   CGI::Session::Serialize::default モジュール
Driver.pm   CGI::Session::Driver モジュール
ErrorHandler.pm   CGI::Session::ErrorHandler モジュール
Inspect.pm   CGI::Session::Inspect モジュール(本システム同梱ファイル)
Session.pm   CGI::Session モジュール
HTTP   HTTP 関連モジュール用ディレクトリ (ディレクトリ名変更不可)
Lite.pm   HTTP::Lite モジュール
Unicode   Unicode 関連モジュール用ディレクトリ (ディレクトリ名変更不可)
Japanese.pm   Unicode::Japanese モジュール

 なお、本アーカイブの各ディレクトリに配置してある index.htm は、上位ディレクトリに移動するだけのダミーファイルです。自動実行ファイル(index.html 等)がないディレクトリにアクセスした際に、ディレクトリ内容をブラウザ上に展開してしまうサーバのセキュリティ確保のため、acis ディレクトリを除く全てのディレクトリに置いてあります。
 自動実行ファイルが index.* 以外に設定されているサーバをお使いの方は、index.htm を指定されている自動実行ファイル名に変更して転送してください。たとえば、自動実行ファイル名が top.* の場合は、index.htm を top.htm に変更します。

(1) システムの設置

 ローカル HDD の任意のフォルダーに本アーカイブをディレクトリ付きで解凍し、acis\index.cgi の1行目に書いてある perl のパスをサーバの環境に合わせて変更します。一般的には、#!/usr/local/bin/perl か #!/usr/bin/perl のどちらかです。

 サーバの CGI 実行可能なディレクトリに、空フォルダーも含めて全てのフォルダー及びファイルを丸ごとテキストモードで転送します。転送後、acis ディレクトリ下の index.cgi のパーミッションをプロバイダの推奨値にあわせて 755 または 705 に設定します。

 なお、自動実行ファイルが index.* 以外に設定されているサーバをお使いの方は、ファイル転送の前に index.cgi をサーバの仕様にあわせて *.cgi に変更してください。
 また、拡張子 .cgi を自動実行できないサーバをお使いの方は、index.cgi の $ma = './'; を $ma = 'index.cgi'; に変更してください。

(2) ライブラリの設置

 各ライブラリのアーカイブファイルには多数のファイルが同梱されていますが、必要なのは前述の設置イメージに示した *.pm ファイルだけです。それぞれのファイルをサーバ上の指定ディレクトリに転送してください。Japanese.pm はバイナリデータを含んでいるので、バイナリモードで転送する必要があります。

 サーバの制約等で lib 以外のディレクトリにライブラリを置いた場合は、index.cgi の BEGIN 節にある $lib = '../lib' の '../lib' の部分をライブラリを置いたディレクトリのパス名に変更してください。lib ディレクトリ下のライブラリ個別のディレクトリは、perl のモジュール呼び出しの仕様によりディレクトリ名を変更することはできません(大文字小文字も正確に作成する必要があります)。

(3) CGI の実行

 本システムは、メインスクリプトである index.cgi が状況に応じて自律的に動作を制御します。このため、最初にパラメータ無しで index.cgi を実行(具体的には、ウェブブラウザのアドレスバーに 'http://〜〜〜/acis/' と入力してジャンプ)すれば、あとは何もする必要がありません。HTML 上では、単純に index.cgi があるディレクトリ('acis/')に対して <A> 要素でリンクを張るだけで OK です。

 なお、index.cgi を自動実行できないサーバをご利用の場合は、acis/index.cgi のようにファイル名まで指定してください。

4 付加機能

(1) パスワードによるアクセス制限

 perl CGI を同時に複数実行すると、CGI を実行しているサーバの負荷が高くなります。このため、本システムでは、パスワードによるアクセス制限機能を実装しています。

 この機能を使うためには、index.cgi の $password 変数にパスワードを設定し、サーバに再転送すれば OK です。パスワードが設定されていると、index.cgi を実行した段階で、自動的にパスワード要求画面を表示し、入力されたパスワードのチェックを行います。

(2) 同時アクセス数によるアクセス制限

 2.0.0 以降では、転送データ量削減のためにサーバーサイドでセッション管理を行っています。これにより、付随的な機能として同時アクセス数によるアクセス制限が可能になりました。
 デフォルトでは、同時アクセス可能数が 30、セッション有効期限は画面表示後 10 分(実際には他のサイトへジャンプしたりブラウザを閉じていたとしても、画面表示後 10 分間はそのユーザがアクセス中と見なされる)になっています。 index.cgi の $smax 変数で同時アクセス可能数、$sexp 変数でセッション有効期限を変更することができます。

 $smax 変数に 0 を設定した場合、アクセス制限は無効になります。メイン CGI をパラメータ無しで起動した時に、期限切れセッションは全て自動削除します(2.5.0 以降では、$smax = 0 でも自動削除します)。 このため、同時アクセス数が多い場合は、メイン CGI 起動が遅くなる可能性があります。
 $sexp 変数は、5〜15 に設定することを推奨します。セッションの有効期限は、各画面を表示するたびに更新されますので、普通は5分あれば十分です。

(3) 表示画面カスタマイズ

 検索条件の入力画面や各種一覧出力画面などは、全て通常の HTML 形式のテンプレートファイルを読み込んで表示しています。 したがって、テンプレートファイルをホームページエディタなどで書き換えることにより、見栄えをカスタマイズすることができます。

 テンプレート中の $ で始まる文字列は、本システムが必要に応じて書き換えます。 一覧のように同一表示形式を繰り返し表示する場合は、本システムが表示形式の位置を判断できるように、表示形式の開始位置と終了位置を特定のコメントで指定しています。
 このため、$ で始まる文字列とコメントは書き換えられませんが、それ以外の部分はユーザが自由に変更できます。

 2.0.0 以降は、キャリア別にテンプレートファイルを作成できるようになりました。index.cgi の @temp 配列にキャリア別のテンプレート保存ディレクトリを指定してください。

5 留意事項

(1) 利用/改変条件

 本ソフトウェアはフリーソフトです。自由に(無料で)本ソフトウェアをご自分のウェブサイトに設置し、利用することができます。ただし、サイト上のどこかに携帯農薬検索実験室へのリンクを張って、本ソフトウェアを使用している旨を明記してください。

 また、本ソフトウェアは自由に改変して利用することができます。ただし、改変したソフトウェアを本ソフトウェアと同じ条件で、携帯農薬検索実験室/実験成果に公開することを義務づけます。

 なお、本ソフトウェアをベースとしたシステムを商利用に供することは禁止します。

(2) 著作権

 本ソフトウェアの著作権は、Hidemi Oya が留保します。本ソフトウェアを改変した場合、原作者の著作権表示を削除することは禁止します(改変者の著作権表示を追加することは自由です)。

(3) 免責

 本ソフトウェアのバグ等によって利用者やサーバに何らかの損害を与えるようなことがあっても、作者は補償やバージョンアップの責務を負いません。自己責任でご利用ください。

(4) サポート

 本ソフトウェアのサポートは、携帯農薬検索実験室/研究会で行います。本ソフトウェアは農薬検査所とは全く関係ありませんので、本ソフトウェアに関して農薬検査所に問い合わせなどを行うことは厳に謹んでください

6 開発履歴

Version 1.0.0 (2004/12/22)

 農薬の名称・農薬の種類・剤型の3種類による農薬検索機能でファーストリリース。

Version 1.1.0 (2005/04/10)

  1. 作物名・病害虫等名による検索機能追加
  2. メイン CGI 名を ma.cgi から index.cgi に変更
  3. デバッグモードでは、HTTP::Lite を use しないように変更

Version 1.2.0 (2005/04/18)

  1. 作物名・病害虫名・農薬一覧の表示・選択方法の変更
  2. 適用表で凡例を最初に表示するように変更
  3. 検索した作物の上位分類に適用がある農薬の適用表が表示されないバグを修正
  4. 適用表の項目番号を常に「0=作物名」「1=病害虫名」と判断していたバグを修正
  5. 作物等選択画面・病害虫等選択画面にパスワードが渡らないバグを修正

Version 1.2.1 (2005/04/24)

  1. スキップ・戻るメニューで不要なパラメータが渡るバグを修正
  2. フォーム及び作物名一覧にパスワードが渡らないバグを修正

Version 1.3.0 (2005/05/13)

  1. 作物一覧・病害虫等一覧・農薬一覧のグループ展開時に、通常一覧に戻る機能を追加
  2. 農薬一覧以降の表示順を「登録票->適用表」から「適用表->登録票」に変更
  3. 作物名検索で取得した作物名と適用表で表示される作物名で記号等の全角/半角が異なる場合に対応

Version 1.4.0 (2005/05/21)

  1. Vodafone 3G 端末に対応
  2. 作物名等選択で「除く」を含む作物名等は非表示に変更
  3. 病害虫名等選択で害虫グループ名及び「、」「除く」を含む病害虫名等は非表示に変更
  4. 適用表で指定作物のみ表示する(「ねぎ」で「たまねぎ」まで表示しない)よう変更
  5. 適用表で有効成分ごとの総使用回数別表を表示するように変更
  6. 適用表で有効成分名による再検索機能を追加
  7. 農薬登録票で登録者の Google 検索機能を追加

Version 2.0.0 (2005/05/26)

  1. サーバサイドセッション管理機能を追加
  2. 同時アクセス数によるアクセス制限機能を追加
  3. 画面ごとのヘルプ表示機能を追加
  4. キャリア別テンプレート機能追加
  5. 農薬一覧で代表農薬識別機能追加
  6. 日本語の内部処理を UTF-8 に統一(サーバ負荷軽減)

Version 2.0.1 (2005/06/04)

  1. PDA に対応(agent, google 関数)

Version 2.0.2 (2005/09/27)

  1. 検索作物が適用の対象作物で「(○○を除く)」の○○に該当する場合、適用を表示しないように変更
  2. 作物あるいは病害虫を変更して、直前の検索と同じ農薬の適用を表示した場合、直前の検索条件で適用が表示されるバグを修正
  3. 適用データに '<' または '>' が含まれる場合、 '<' または '>' 以降が表示されないバグを修正

Version 2.5.0 (2005/10/26)

  1. 作物名/病害虫名等自動かな漢字/別名変換機能追加(「シラヌイ」を「不知火」(かな漢字変換)、「デコポン」を「不知火」(別名変換)に変換)
  2. 農薬一覧で通称名(屋号抜き農薬名)による分類機能を追加(「オンコル粒剤1」「オンコル粒剤5」「グランドオンコル粒剤」を異なるグループとして表示)
  3. 登録票に通称名または種類と「薬害」「作用」「注意」のいずれかの複合キーワード Google 検索機能を追加
  4. 作物名一覧画面で検索語とマッチする作物名を代表作物名として表示するよう変更(「リーフレタス」で検索しても「非結球レタス」が代表作物名として表示されていた)
  5. 適用表で詳細作物名にマッチする適用を表示できないバグを修正(「ねぎ」で検索すると「根深ねぎ」の適用が表示できなかった)
  6. ブラウザのナビゲーションボタン(戻る、進む)操作、proxy や端末内キャッシュによるセッションの誤動作対策追加
  7. セッションの動作安定に伴いデバッグモードを削除
  8. その他細かな修正・変更