第 8 回 ことはじめ レポート課題 氏名:齋藤陽香 学籍番号:c1100880 語学クラス:英語6 コース(系):政策マネジメント 1. A. Hash と CGI の 類似点は変数で配列としてプログラムに組込み、プログラム 内にその内容を取りこむ点。 表示させるときも printf で変数を使って引用させることができる点も似ている。 また、変数名 = Hash.new 、 変数名 = CGI.new という形で組み込む点も類似 点である。 B. CGI とは Common Geteway Interface の略称で Webサーバーが Webブラウザ からの要求に対応して、プログラムを起動するための仕組みである。 これは ".htaccess" "*.html" "*.rb" のすべてが揃わなければ CGI を実行すること ができない。 ".htaccess" は 保存されているディレクトリ内の "*.rb" のデータを第三者に 公開出来るように宣言している。 "*.html" は組み込んだ html の情報を Webブラウザに表示させる。Webブラウザ で入力を求めたものを "*.rb" のプログラムに代入する箇所があるのでこれひと つでは成り立たない。 "*.rb" は Webブラウザで入力された事柄を取りこんで実行するためのプログラ ム。変数 = CGI.new('html4') で CGI の操作を組み込む。これは、第三者 にアクセスされても可能なように ".htaccess" で許可されている。 よって、これらからわかるように以上の3つのプログラムが揃わなければ CGI は 機能しない。 C. "*.html" で CGI 変数を渡す仕組みは
である。 授業で作成したプログラムの ticket.rb を用いて説明する。 7行目の
が変数をプログラムに渡す 働きをしている。 form method="POST" で CGI から得た情報を持って来る。持って来た情報は action="ticket.rb"で "ticket.rb" のプログラムに代入される。これによって CGI 変数が渡される。 また、11行目〜14行目の で CGI で入力してもらう情報を設定している。 はドロップダウンメニューを表示する指示。 このドロップダウンで選択したものが "ticket.rb" へと渡される。 D. require 'cgi' で CGI の機能を用いることを設定し、CGI.new を自分で設定し たメソッドを使う。それによって CGI を html 文書で使うことが可能になる。 授業で作成した html 文書の ticket.html を用いてより詳しく説明する。 上でも説明したが、5行目の で CGI を html で使うように指示。 6行目の は自分で設定したメソッドの役割が CGI 機 能になる。 9行目の は arv の自分で設定したメソッドに cgiを配 列にして入れるように指示。 よって、外部から得た情報を CGI で受け取り、html 文書で表示される。 2. A. i.考えた設定 ノンフィクションの電車の乗車券販売プログラム。 名前と出発駅・到着駅を入力してオンラインチケットを発行する。 ii.作成したプログラム(ticket.rb) ti#!/usr/koeki/bin/ruby $KCODE = 'e' # 文字コードを日本語に指定 require 'cgi' # CGI 機能を設定 cgi = CGI.new('html4') # CGI 機能を使うことを指示 stt = Hash.new # ハッシュ配列を設定 stt["新庄"] = 0.0 # ハッシュ配列の中身 stt["升形"] = 7.5 stt["羽前前波"] = 10.6 stt["津谷"] = 12.9 stt["古口"] = 17.0 stt["高屋"] = 24.8 stt["清川"] = 31.1 stt["狩川"] = 34.9 stt["南野"] = 38.9 stt["余目"] = 43.0 def distance(chaku,shutsu) # ded で関数を設定 chaku - shutsu # def 関数の式 end # def の end print("Content-type: text/html; charset-EUC-jp\n\n") # 受け取ったデータを使う宣言 name = cgi["you"] # Ruby に CGI でもらってきた値(you)を代入 arv = cgi["arrive"] # Ruby に CGI でもらってきた値(arrive)を代入 lev = cgi["leave"] # Ruby に CGI でもらってきた値(leave)を代入 #p arv # Ruby の変数に入ったか確認 shutsu = stt[lev] # shutsu の中にハッシュ配列を入れ、 # 配列の中には lev の値を入れる chaku = stt[arv] # chaku の中にハッシュ配列を入れ、 # 配列の中には arv の値を入れる dtc = distance(chaku,shutsu) # 距離を求める計算式 fee = 120 + ( dtc / 2 * 20 ) # 料金を求める計算式 if fee > 120 # 条件 : 料金が120円以上のとき print("\n") # .rb のなかで html の動きを設定。.html で設定しなくてもインターネットで内容を見られるようにする。 print("\n") print("発券結果\n") print("\n") print("\n") print("

乗車券

\n") printf("

名前: %s 樣

\n",name) printf("

陸羽西線 : \t %s -- %s 間

\n",lev,arv) printf("

料金: %d 円

\n",fee) print("\n") print("\n") else fee < 120 # 条件 : 料金が120円以上のとき print("\n") print("\n") print("発券結果\n") print("\n") print("\n") print("

乗車券

\n") printf("

名前: %s 樣

\n",name) printf("

%s -- %s 間

\n",lev,arv) print("

陸羽西線は上り線なので乗車できません。

\n") print("\n") print("\n") end # if の end iii.もとにしたプログラムと変更点 授業で作成した CGI のプログラムを参考に作成した。 変更点は以下の通り。 ・Hash で駅名と距離を入れた ・def で乗車した区間の距離を求める関数を設置 ・cgi でもらう値を増やした ・距離を求める式の設置( def を利用) ・料金を求める式を設置 ・if で条件を設置 ・名前を CGI で入力してもらう指示 ・料金を 表示する指示 ・エラー(乗車できないこと)を表示する指示 iv.実行結果 ● その1 (上り線で対応しているもの) pan{c110088}% ./ticket.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) you="さいとう" arrive="升形" leave="新庄" Content-type: text/html; charset-EUC-jp 発券結果

乗車券

名前: さいとう 樣

陸羽西線 : 新庄 -- 升形 間

料金: 195 円

● その2 (上り線で対応していないものが入力されたとき) pan{SAITO Haruka}% ./ticket.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) you="はるか" arrive="新庄" leave="升形" Content-type: text/html; charset-EUC-jp 発券結果

乗車券

名前: はるか 樣

升形 -- 新庄 間

陸羽西線は上り線なので乗車できません。

v.考察 ● その1 ハッシュ配列の中身は以下の通りで stt["新庄"] = 0.0 stt["升形"] = 7.5 stt["羽前前波"] = 10.6 stt["津谷"] = 12.9 stt["古口"] = 17.0 stt["高屋"] = 24.8 stt["清川"] = 31.1 stt["狩川"] = 34.9 stt["南野"] = 38.9 stt["余目"] = 43.0 新庄駅から升形駅までの距離は 7.5 - 0.0 = 7.5 また、料金を求める式は 120円 + ( 距離 / 2km * 20円 ) 確かめ算 pan{c110088}% bc -l [~/public_html/rubycgi] 120+(7.5/2*20) 195.00000000000000000000 quit 確かめ算で出た料金と実行結果の料金が一致していることがわかる。 ● その2 このプログラムは上り線専用の電車の乗車券を発券するため、下り線では乗車券 が発券できない。 その2 では 升形駅から新庄駅への切符を購入しようと入力している。これは上 り線では買えない切符であるため表示できないようにプログラムを組んでいる。 また、料金を計算してみる。 升形駅発の新庄駅着なので 0.0 - 7.5 = -7.5 よって、確かめ算は pan{c110088}% bc -l [~/public_html/rubycgi] 120+(-7.5/2*20) 45.00000000000000000000 quit 初乗りの料金は120円なので確かめ算の出た結果は45円である。これは初乗 り料金より小さく、電車を乗る際は必ず120円以上かかるので乗車料金が45円と いうことはありえない。 従って、プログラムの実行結果で料金が表示されないのは正しい。 その1とその2の考察から、このプログラムは正しいということがわかる。 vi.参考文献 ・2011 年度 基礎プログラミング II 講義ノート (シラバス) 第8回 CGIことはじめ 西村先生 ・神田先生 基礎プログラミングII 講義ノート (10) 06/27の授業内容:プログラムの公開 B. バナーロゴ掲載URL http://roy/~c110088/advertise2/logo_r2_c110088.png C. 「基礎プログラミングを学んで」の pdf ファイル は広告ページにある。 広告ページURL http://roy/~c110088/advertise2/index2.html 3.感想 CGI機能を自分で作成したが、このような機能を自らの手で作れるということに 感動した。.rb のファイルと .html のファイル、.htaccess の3つを作成しな ければ実行できない。苦労も伴うが自分の目標としていたものができ上がった 時は計れないほど嬉しかった。次回はラジオボタンなどを作成するようなので 次回もがんばりたい。 4.参考文献 ・IT用語辞典 e-Words http://e-words.jp/w/CGI.html ----------------------------------- 東北公益文科大学 公益学部 公益学科 2年 齋藤陽香 c110088@f.koeki-u.ac.jp