図書館情報システムの ありがちな寓話 図書系職員のための アプリケーション開発講習会 1 もくじ • 第1話 – 動的なHPはどうやってつくられるの? • 第2話 – 試行錯誤を楽しみたいな… • 本当は怖くない「コンピュータ英語」 • CGIのバグとり大作戦 • 第3話 – CGIでありがちな寓話 • どうしてモジュールを使うの? • URIエンコードと文字コード • フォームの値を残すには 2 第1話 動的なHPはどうやってつくられるの? (1) CGI(古典的な仕組み)の場合 常駐し てアク セス待 ち HTML Webサーバ 呼び出し Webブラウザ HTML サーバマシン HTMLを出 力できれば プログラム 言語はなん でもOK HTMLを生成するプログラムを毎回起動 (「起動」に時間がかかり応答性は不利) CGIプログラム 必要に応じて プログラム起動 3 ひといきコラム [最速を目指した(?)システム屋たち] • たとえば、Webブラウザを起動するのに、少し時間がか かりますよね。プログラムの起動は案外と時間がかかる ものです。CGIはこのプログラムの起動を画面表示のた びに行うため応答速度が不利といわれています。 • そこで、でてきたのが、動的なHPを生成するプログラム を常時起動(常駐)しておく方法です。いわば、たとえば、 Webブラウザを最初から起動しておけば、あとは検索 キーワードを入力するだけですみますよね? • これには、Webサーバ(最初から常駐している)と一体化 させる方法、Webサーバと別プログラム(プロセス)で起 動する方法の2種類があります。 4 第1話 動的なHPはどうやってつくられるの?(2) Webサーバとプログラムの一体化の場合 (mod_perl, mod_php, mod_ruby, Tomcat, Jetty など) HTML 常駐し てアク セス待 ち Webサーバ サーバマシン Webブラウザ 常駐しているWebサーバプログラムの中に プログラムも含めてしまう。 → 常にアクセス待ち状態でプログラムが待 機しているため、動作は速い プログラム Webサーバで 連携設定 もしくは専用 Webサーバ 5 第1話 動的なHPはどうやってつくられるの? (3) Webサーバと別にプログラムを常時起動する場合 (FastCGI, Tomcat, Jetty など) 常駐し てアク セス待 ち HTML Webサーバ Webブラウザ 常駐し てアク セス待 ち 呼び出し HTML サーバマシン Webサーバとは別に、CGIプログラムを常駐 させておく。動作は速い。 CGIプログラム 6 ふたいきめコラム [簡易検索エンジン最速を目指した、某M氏の昔話] • 「簡易検索エンジン(CGI)で最速を目指す」という、若気の 至り(いわゆる“認めたくはないもの”)をしてしまった某M氏の 昔話(実話)です。 – Perlのプログラムは組みようによっては、2倍、3倍の高速化もで きてしまいます。細かいところのチューニングもいろいろと考えら れるのですが、ボトルネック(最大の問題箇所)潰し以外は、通常 たいして効果ないので、あまり「はまらない」ようにしましょう。 – サーバマシンが年々高速化すると、PerlによるCGIとはいえ、ほ ぼ瞬時に処理が終わるので、いままでの苦労がなんだったか、 すごーく考えることになります。ほどほどが大事です。 7 第1話 動的なHPはどうやってつくられるの? (4) • Licsu-Web業務システムでも使っている Tomcat(Java)では以下の方式を選択でき ますが、基本はいままでの話と同じです。 – Apacheではなく、専用のWebサーバを使う – Apacheと連携して動かす(2種あり) • mod_perlと同じ方式(Webサーバと同プロセス) • FastCGIと同じ方式(Webサーバと別プロセス) 8 第2話 試行錯誤を楽しみたいな… (1) 本当は怖くない「コンピュータ英語」(寓話編) 太郎くんは、英語が大の苦手です。コンピュータの ドキュメントを見ようとしたら、英語で書かれていて あきらめモード。 でも、英語が赤点のあきらくん(ここは微妙に実話)は、 なぜか外国製のソフトウエアを扱うことができます。 太郎くんは、ちょっと不思議に思いました。 9 第2話 試行錯誤を楽しみたいな… (1) 本当は怖くない「コンピュータ英語」(寓意編) • まず、日本語の関連文献を読もう – カタカナの専門用語とその意味だけでも事前にわかっていると、 文中の単語を拾うだけで意味がとれることがあります • プログラムの例だけでも参照しよう – プログラムのコード自体は、英語も日本語も関係ないので、読ん だり試したりすれば意味がとれます • わからなくなったら、あたりをつけて試してみよう – 英文読解と違って、理解しているかどうかは、実地に試すことが できます。わからないくなったら、あたりをつけて試してしまいま しょう。 10 第2話 試行錯誤を楽しみたいな… (2) • CGIのバグとり大作戦(寓意編) – コマンドラインからテストする • 文法エラーであれば、単に実行するだけで気付きます • print文を随所にセットして、システムの状態を確認する • テスト用のダミーデータをセットする(1) – あらかじめ、コマンドラインからパラメータを渡せるようにCGIを 直しておき。 » $query = new CGI(\*STDIN); – その上で、パラメータ込みでコマンドラインから実行する » perl xxx.cgi title=test • テスト用のダミーデータをセットする(2) – ポイントとなる箇所の変数に、あらかじめダミーのデータを代入 しておく。 11 第2話 試行錯誤を楽しみたいな… (2) • CGIのバグとり大作戦(寓意編) – 実際にWebから動かして確認する • print文を随所にセットして、システムの状態を確認する – print文を最初に実行する箇所より先に、MIMEヘッダを出力す る(以降のprint文の出力が、HTMLと認識される) » print $QUERY->header( -type => 'text/html; charset=utf8' ); • テスト用のダミーデータをセットする – ポイントとなる箇所の変数に、あらかじめダミーのデータを代入 しておく。 12 どうしてCGIではモジュールを 使うの? • CGIの処理では、CGIモジュールを、他のWebサーバとの やりとりでは、LWPモジュールを使うのが定番です。 • もともと、PerlにはWeb関係の機能が含まれておらず、当 初はTCP/IPによるネットワーク接続の部分から自作をす る必要がありました。いつも、自作では大変ですよね。 • そこで、誰もが使える形でPerlプログラムをまとめたもの が「モジュール」です。このモジュールを使うことで他の人 がプログラムを自作しなくてもすみますし、多くの人が使 う(チェックする)ため信頼性も確保できます。 前田も「TermExtarct」(専門用語自動抽出)、 「Lingua::LanguageGuesser」(言語自動判定)の 2つのPerlモジュールをネットで配布しています。 13 URIエンコードと文字コード • 計算機上での「文字」 – 文字コード=ビットの並び=数値 – 文字コードは、文字一文字ごとに規定した計 算機管理用のユニークID – 番号表の規格=文字コード規格 14 文字コード変換 Shift-JISの EUC-JPの テキスト テキスト UTF-8の 計算や対象表をつかい、 文字コード変換する テキスト 15 URIエンコード/デコード(1) • Webでの通信で使われるエンコード方式 • 処理としては(意味合いは全然ことなるが)、 暗号化のようなもの – エンコード → 暗号化 – デコード → 暗号解読 • 表示形式を変更するだけで、文字コード番 号を変更するわけではない(文字コード変 換とは別) 16 URIエンコード/デコード(2) 「あ」一文字で Google検索 16進数で 1バイトめ---- e3 2バイトめ--- 81 3バイトめ---- 82 「%e3%81%82」 とエンコードされ たことが確認で きる つまり、UTF-8の 「あ」を意味する 17 URIエンコード/デコード(3) ASCIIコードのみ 保障された世界(たぶん)を 通過! Webブラウザ Shift-JISの CGIプログラム URIエンコードさ れたテキスト テキスト URIエンコード Shift-JISの テキスト URIデコード 18 フォームの入力データを残す方法 • HTML::FillInForm を使う – 定番の方法 – テンプレート(HTML)を用意し、そこにフォームのデー タを簡単に書き戻すことができる • Ajaxを使う – 定番かどうかは不明(「ことわけWeb」でも使用) – フォーム入力画面を値とともに、そのまま残すことが 可能 – 難易度はHTML::FillInFormより高め? 19 HTML::FillInForm (Perlモジュール) フォームを 含む HTML CGIパラメータ CGIプログラム-1 確認画面 (CGIパラメータ埋め込み) CGIパラメータを Hiddenタグで隠しておく CGIプログラム-2 HTML::FillInForm フォーム (値込)を 含む HTML 確認完了 画面 20 Ajax (JavaScriptライブラリ”Protptye.JS”を利用すると簡単) HTMLのフォーム部分 CGIパラメータ 実行ボタン 入力確認部分 確認データを 含んだHTML 確認ボタン CGIパラメータを Hiddenタグで隠しておく C G I プ ロ グ ラ ム 1 C G I プ ロ グ ラ ム 2 21
© Copyright 2024 ExpyDoc