第 8 回 CGI ことはじめ レポート課題 氏名:齋藤允貴 学籍番号:C111069A 語学クラス:英語 2 コース:地域共創コース 1、筆記問題 A、CGIとは、質問に対して解答者の答えを受け取り kotae[1] = "はい" kotae[2] = "いいえ" のように、問題と答えが対応した形となっている。 hash の点でも、key の問題項目に対して value がその問題に対応した答え を表示する形となっている。 この点がCGI と Hash の共通点と考える。 B、.htacces とは、そのディレクトリ内でのみCGI を使用することを宣言する。 *.html で、ウェブページの閲覧者がインターネット上で入力ができるペー ジを作成。 *.rb で、その閲覧者が入力した答えを反映した結果を表示する。 C、*.html で変数を渡すには「form」機能を使う。
form の中で使われる「select」タグは、ドロップダウンを作るタグである ことを表している。「name」の部分は、CGI の変数で名前を使う。 もし、ホームページ内に複数あるときは、どのドロップダウンメニューかを 区別するために用いる場合がある。 そして、「option」という機能を使って閲覧者にどの項目が良いかといった メニューを選ぶことができる。 例、 さらに、input tag の中では、「form」で入力した項目を「type」で指定 する。指定の際には、利用者が誤って使ってしまった場合もあるので送信 ボタンとリセットボタンの 2 種類を作成する。もし、送信ボタンを押した ら、Ruby に送り込まれて、結果が表示される。 例、 ※value は変数の値である。 type が「submit」の場合は送信させる機能を表している。 type が「reset」の場合はリセットさせる機能を表している。 送信ボタンを押した場合には、*.rb に送信させる。 D、Ruby を使う際には、「env」コマンドを立ち上げて、 「#!/usr/bin/env ruby」と入力して作成する。 「require 'cgi'」を入力してCGI を使うことを表している。 「cgi = CGI.new」で、CGI 用の Hash を作成し、cgi に name として CGI の変数が代入されている。また、CGI の value には、option で利用者が選 ばれた項目が代入されている。 また、Ruby の変数 には、cgi["変数"]の option が代入され、プログラムに 「arv = cgi["変数"] と入力されると、変数の部分をRuby では arv として 取りこむことを宣言するという意味がある。 2、プログラム問題 A、前期のときに作成した個人作品「lental store saito」から、 web_data_c111069.dat から登録してある名前を授業でやった「ドロップダ ウンメニュー」という機能を用いて利用者に選択する機能を作成した。 宿題のホームページ 利用者にデータを入力させるには、「form」と呼ばれるタグで作る。 今回作成したホームページには以下のように作成した。 次に、利用者が設定した項目を反映したプログラムを作成してみることにし た。 まず、プログラムを Ruby で動かしたいときには、「#!/usr/bin/env ruby」 を入力、その後、「coding: euc-jp」を使って日本語入力でプログラムを作 成する。 そして、ここでは、CGI を使うことを明らかにしたいので、 「require 'cgi'」と入力し、CGI を使うことを宣言する。 その後、以下の項目を作成した。 cgi = CGI.new(:accept_charset => "EUC-JP") # CGI を EUC-JP で受け付ける。 print("Content-type: text/html; charset=EUC-JP\n\n") # CGI の値を EUC-JP で書き出す。 ここまでをまとめると #!/usr/bin/env ruby #coding: euc-jp require 'cgi' cgi = CGI.new(:accept_charset => "EUC-JP") print("Content-type: text/html; charset=EUC-JP\n\n") 次に、CGI の動作の定義である、「arv = cgi["arrival"]」を入力し、配列 を作成した。 最後に、print 文を使って HTML 文書の中身を作成した。 print("\n") # htmlの始まり print("\n") print("lental store saito 三川店 店長 齋藤
\n") print("TEL: 0234-24-9576
\n") print("FAX: 0234-24-4533
\n") print("\n") print("\n") # html の終わり こうして作成した結果表示のプログラムは以下のとおりである。 #!/usr/bin/env ruby #coding: euc-jp require 'cgi' cgi = CGI.new(:accept_charset => "EUC-JP") print("Content-type: text/html; charset=EUC-JP\n\n") arv = cgi["arrival"] print("\n") print("\n") print("lental store saito 三川店 店長 齋藤
\n") print("TEL: 0234-24-9576
\n") print("FAX: 0234-24-4533
\n") print("\n") print("\n") それを firefox 上で表示すると以下のとおりになった。lental store saito 三川店 店長 齋藤
TEL: 0234-24-9576
FAX: 0234-24-4533
実行結果 阿部景子さんの場合 roy{c111069}% ./order_input_c111069.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) arrival="阿部景子" /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:592: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:592: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:610: warning: regexp match /.../n against to EUC-JP string Content-type: text/html; charset=EUC-JPlental store saito 三川店 店長 齋藤
TEL: 0234-24-9576
FAX: 0234-24-4533
プログラムのウェブページ上で表示する場合 阿部景子 様 lental store saito 三川店 店長 齋藤 TEL: 0234-24-9576 FAX: 0234-24-4533 加藤健太郎さんの場合 roy{c111069}% ./order_input_c111069.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) arrival="加藤健太郎" /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:592: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:592: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:610: warning: regexp match /.../n against to EUC-JP string Content-type: text/html; charset=EUC-JPlental store saito 三川店 店長 齋藤
TEL: 0234-24-9576
FAX: 0234-24-4533
プログラムのウェブページ上で表示する場合 加藤健太郎 様 lental store saito 三川店 店長 齋藤 TEL: 0234-24-9576 FAX: 0234-24-4533 相馬カツオさんの場合 roy{c111069}% ./order_input_c111069.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) arrival="相馬カツオ" /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:592: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:592: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:610: warning: regexp match /.../n against to EUC-JP string Content-type: text/html; charset=EUC-JPlental store saito 三川店 店長 齋藤
TEL: 0234-24-9576
FAX: 0234-24-4533
プログラムのウェブページ上で表示する場合 相馬カツオ 様 lental store saito 三川店 店長 齋藤 TEL: 0234-24-9576 FAX: 0234-24-4533 考察 実行してみた結果自分が選択した人物が Ruby 上でしっかりと反映され て表示することができたので、このプログラムは成立する。 また、html 上で作成した、「ドロップダウンメニュー」という機能を使っ て利用者に選択させるようにすることができたので、このホームページも 成立していると思われる。 自分が作成した宿題ホームページ http://roy/~c111069/rubycgi/order_input_c111069.html 起動するプログラム http://roy/~c111069/rubycgi/order_input_c111069.rb 3、感想 今回は、「CGI」という機能を使って作成したが、操作方法を覚えるのにと ても苦労した。なので、今日学んだことをしっかりと復習してCGI の機能を しっかりと覚えたい。 また、「form」という機能はとても便利な機能であると思った。ウェブペー ジ上でそこを押すと黒くなる、「ラジオボタン」機能や、四角にチェックマー クをつける「チェックボックス」などそれぞれの機能には名前があってその 機能をウェブページ上で表示するやり方を覚えることができて良かった。 もし、ウェブページ上でアンケートをやる際には、今日習った機能をしっか りと覚えて今後のプログラムの作成に活用していきたい。 4、参考文献 http://roy/~madoka/2012/r2/08/r2_08_05_theme_05_form.html 西村まどか 基礎プログラミングII 第 8 回 CGI ことはじめ 「利用者にデータを入力させる部品」 http://roy/~madoka/2012/r2/08/r2_08_06_theme_06_firstcgi.html 西村まどか 基礎プログラミングII 第 8 回 CGI ことはじめ 「基本の CGI ホームページの作りかた」 http://roy/~madoka/2012/r2/08/r2_08_07_theme_07_actionprogram.html 西村まどか 基礎プログラミングII 第 8 回 CGI ことはじめ 「CGI スクリプトの解説」 http://roy/~madoka/2012/r2/08/r2_08_08_theme_08_ruby.html 西村まどか 基礎プログラミングII 第 8 回 CGI ことはじめ 「動作プログラム作成」 http://roy/~madoka/2012/r2/08/r2_08_09_theme_09_declare.html 西村まどか 基礎プログラミングII 第 8 回 CGI ことはじめ 「Ruby で CGI を作る宣言」 http://roy/~madoka/2012/r2/08/r2_08_11_theme_10_printhtml.html 西村まどか 基礎プログラミングII 第 8 回 CGI ことはじめ 「print 文と HTML 文書のなかみ」 共同学習者 佐藤智久、小野貴己