Web技術勉強会9回目(Slideshare用)
- 1. Web技術勉強会第9回
Web技術勉強会第9
技術勉強会第
~続・Rubyはじめました~
Rubyはじめました~
はじめました
Ryuichi TANAKA
Study:http://devel.de.c.dendai.ac.jp/study/
Blog:http://blog.livedoor.jp/mapserver2007/
1
- 2. 前回の内容
• 配列、ハッシュ、条件分岐、正規表現
• 繰り返し系
• オブジェクト指向プログラミング
• RubyのCGI
• RubyGems
2
- 6. Rubyのポイント
• 空文字はtrue
– Perl
my $str = $cgi->(“str1”) || exit;
print $str; # $strはなにか表示される
– # $cgi->(“str1”)が空ならfalseになるのでexitになる
– Ruby
str = cgi[‘str1’] || exit
puts str # strは空文字(“”)を表示することがある
str = (cgi[‘str1’] if cgi[‘str1’] != “”) || exit
puts str # 空文字は表示されない
Rubyはfalseとnil以外は全てtrueになる 6
- 7. Rubyのポイント
• 文字コード変換が楽
– Perl
use Encode;
use Encode::Guess qw/euc-jp,utf8,shiftjis/;
…
My $str = encode(‘euc-jp’,”UTF-8文字列”); //Any->EUC
– Perlのバージョンによってこのあたりの挙動が微妙に
違う(実際、研究室とTanaka家では挙動が違う=
decodeが必要だったりそうでなかったり)
– Perlでは本当に文字コード問題に苦しんだ
7
- 8. Rubyのポイント
– Ruby1.8.x
require ‘kconv’
…
p str.toutf8 # Any->UTF8
– Ruby1.9.x
p str.encode(“UTF-8”) # Any->UTF8
– あっさりできた。文字列のdecodeも必要ない。
8
- 9. RubyをCGIで使う
• CGIで使うには
– 通常のCGI
• アクセスするたびにプロセスがRubyインタプリタを起動する
ので遅い
– mod_ruby
• ApacheがRubyインタプリタを起動する。別プロセスで起動し
ないため早い
– FastCGI
• プロセスをメモリ上に永続化するため起動と終了がカットされ、
結果として早くなる。Ruby以外でも利用可能。
9
- 10. Rubygems
• Rubyのパッケージ管理をする
– PerlのCPAN、PHPのPEARと同様
• 利用方法
require ‘rubygems’ //rubygemsを読ませる
require ‘hpricot’ //rubygemsのライブラリを指定
• コンソール上での動作確認
irb > require ‘rubygems’
=> true
> ruby –rrubygems –rhpricot –e “” //正常ならエラーが出ない
10
- 11. まとめ
• Rubyの基礎について説明
– for文はあまり使わない
– インクリメント/デクリメントはない
– true/falseが他の言語と違うところがある
• RubyのCGI利用について説明
– 通常のCGIとmod_ruby、FastCGI
– Rubygems
11
- 12. 今後について
• 「続々・Ruby始めました」をやります
– またしてもコーディングできていない
※原因は後述
– 実はまだ「Rubyでしかできない」ことがない
• Perlでできちゃう
– なにか作ったら、Ruby on Railsにも手を出したい
• Railsは別途勉強が必要
• RoRは生産効率が早いが、その分内部で何をやってるか良く
分からないため
12
- 13. 閑話:問題発生
• コーディングできなかった原因
環境構築ができない!!!!!!!
1. Rubyインストール → 既にできていた
2. mod_ruby, FastCGI設定 → 3日ほどかかった。mod_rubyはう
まくいったが、通常のCGI、FastCGIでは動かない(一瞬動いた
ときもあった)
3. Rubygems設定 → 4日かかってもできない(もうむり)。パスを
設定、入れなおし、絶対パス指定、1000回くらいぐぐっても無
理。2台目のサーバで試しても無理。
13
- 14. 閑話:Rubygemsが動かない
• 症状1: require ‘rubygems’ でLoadError発生
– CGIで失敗。irbではtrueを返す。
– 解決策:httpd.confを直しまくったら動いた
• 症状2:rubygemsのライブラリでLoadError発生
– CGIで失敗。Irbではtrueを返す。-rで実行してもLoadError。
– ライブラリ箇所を絶対パスにしても無理。
– 解決策:カレントディレクトリにライブラリをコピーして読ませる →
LoadErrorは消えるが、なぜか実行できない(確実に動くプログラ
ムですら何も表示されない)。
– そもそも根本的に解決していない
– 丸1週間かけてもだめ。さすがに凹む。
14