SlideShare ist ein Scribd-Unternehmen logo
1 von 14
Downloaden Sie, um offline zu lesen
Web技術勉強会第9回
    Web技術勉強会第9
       技術勉強会第
    ~続・Rubyはじめました~
       Rubyはじめました~
           はじめました



        Ryuichi TANAKA
 Study:http://devel.de.c.dendai.ac.jp/study/
Blog:http://blog.livedoor.jp/mapserver2007/

                                               1
前回の内容

•   配列、ハッシュ、条件分岐、正規表現
•   繰り返し系
•   オブジェクト指向プログラミング
•   RubyのCGI
•   RubyGems



                        2
前回の反省

• 知識が中途半端すぎた
 – 結局よくわかっていなかった…
• コーディングしなかった
 – サンプルだけ。しかもいきなりMechanize。



                   正直すまんかった


                              3
反省点を活かして

• 「初めてのRuby」を読破
 – オライリーのくせに分かりやすい。
 – 少なくとも前回の知識よりましになった(はず)
• 本格的にRubyの開発を開始
 – とりあえず、過去のコードをRubyで焼きなおし




                             4
Rubyのポイント

Rubyで必要となるポイントを覚えている限り紹介
• インクリメント/デクリメントがない
 – i++, ++i, i--, --iが使えない
 – ならば、for($i =0; $i < $length; $i++){} みたいなとき
   どうするの?
   →array.each do |val| puts val end

 – Rubyではイテレータをフル活用する


                                             5
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
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
Rubyのポイント

– Ruby1.8.x
  require ‘kconv’
  …
  p str.toutf8 # Any->UTF8

– Ruby1.9.x
  p str.encode(“UTF-8”) # Any->UTF8



– あっさりできた。文字列のdecodeも必要ない。



                                      8
RubyをCGIで使う

• CGIで使うには
 – 通常のCGI
    • アクセスするたびにプロセスがRubyインタプリタを起動する
      ので遅い
 – mod_ruby
    • ApacheがRubyインタプリタを起動する。別プロセスで起動し
      ないため早い
 – FastCGI
    • プロセスをメモリ上に永続化するため起動と終了がカットされ、
      結果として早くなる。Ruby以外でも利用可能。

                                      9
Rubygems

• Rubyのパッケージ管理をする
 – PerlのCPAN、PHPのPEARと同様
• 利用方法
  require ‘rubygems’ //rubygemsを読ませる
  require ‘hpricot’ //rubygemsのライブラリを指定

• コンソール上での動作確認
  irb > require ‘rubygems’
      => true

  > ruby –rrubygems –rhpricot –e “” //正常ならエラーが出ない




                                                    10
まとめ

• Rubyの基礎について説明
 – for文はあまり使わない
 – インクリメント/デクリメントはない
 – true/falseが他の言語と違うところがある
• RubyのCGI利用について説明
 – 通常のCGIとmod_ruby、FastCGI
 – Rubygems



                              11
今後について

• 「続々・Ruby始めました」をやります
 – またしてもコーディングできていない
   ※原因は後述
 – 実はまだ「Rubyでしかできない」ことがない
   • Perlでできちゃう
 – なにか作ったら、Ruby on Railsにも手を出したい
   • Railsは別途勉強が必要
   • RoRは生産効率が早いが、その分内部で何をやってるか良く
     分からないため


                                   12
閑話:問題発生

• コーディングできなかった原因
      環境構築ができない!!!!!!!

1.   Rubyインストール → 既にできていた
2.   mod_ruby, FastCGI設定 → 3日ほどかかった。mod_rubyはう
     まくいったが、通常のCGI、FastCGIでは動かない(一瞬動いた
     ときもあった)
3.   Rubygems設定 → 4日かかってもできない(もうむり)。パスを
     設定、入れなおし、絶対パス指定、1000回くらいぐぐっても無
     理。2台目のサーバで試しても無理。




                                                 13
閑話:Rubygemsが動かない

• 症状1: require ‘rubygems’ でLoadError発生
  – CGIで失敗。irbではtrueを返す。
  – 解決策:httpd.confを直しまくったら動いた
• 症状2:rubygemsのライブラリでLoadError発生
  – CGIで失敗。Irbではtrueを返す。-rで実行してもLoadError。
  – ライブラリ箇所を絶対パスにしても無理。
  – 解決策:カレントディレクトリにライブラリをコピーして読ませる →
    LoadErrorは消えるが、なぜか実行できない(確実に動くプログラ
    ムですら何も表示されない)。
  – そもそも根本的に解決していない
  – 丸1週間かけてもだめ。さすがに凹む。

                                             14

Weitere ähnliche Inhalte

Was ist angesagt?

本当は怖いObjectSpace.each_object
本当は怖いObjectSpace.each_object本当は怖いObjectSpace.each_object
本当は怖いObjectSpace.each_objectNarihiro Nakamura
 
ªãºAãäëèéí ñàíã çîõèîí áàéãóóëàõ
ªãºAãäëèéí ñàíã çîõèîí áàéãóóëàõªãºAãäëèéí ñàíã çîõèîí áàéãóóëàõ
ªãºAãäëèéí ñàíã çîõèîí áàéãóóëàõNamkhainyambuu Gan-Erdene
 
ruby_from_office
ruby_from_officeruby_from_office
ruby_from_officebash0C7
 
FOSS4G LT - Invitation to ActionScript Programming
FOSS4G LT - Invitation to ActionScript ProgrammingFOSS4G LT - Invitation to ActionScript Programming
FOSS4G LT - Invitation to ActionScript Programminggyuque
 
JSplash swf to javascript converter(2008/9/30)
JSplash swf to javascript converter(2008/9/30)JSplash swf to javascript converter(2008/9/30)
JSplash swf to javascript converter(2008/9/30)gyuque
 
Programming言語Lua紹介(Internet版)
Programming言語Lua紹介(Internet版)Programming言語Lua紹介(Internet版)
Programming言語Lua紹介(Internet版)zetamatta
 
碳酸会 图片列表讨论
碳酸会 图片列表讨论碳酸会 图片列表讨论
碳酸会 图片列表讨论碳酸饮料会
 
PHP 防駭 - 基礎觀念篇
PHP 防駭 - 基礎觀念篇PHP 防駭 - 基礎觀念篇
PHP 防駭 - 基礎觀念篇Jace Ju
 
Windows MobileとWeb Api
Windows MobileとWeb ApiWindows MobileとWeb Api
Windows MobileとWeb ApiKenji Wada
 
Ohp Seijoen H20 08 Jfreechart
Ohp Seijoen H20 08 JfreechartOhp Seijoen H20 08 Jfreechart
Ohp Seijoen H20 08 Jfreechartsesejun
 
CSS 排版 - 基礎觀念篇
CSS 排版 - 基礎觀念篇CSS 排版 - 基礎觀念篇
CSS 排版 - 基礎觀念篇Jace Ju
 
Web Refactoring
Web RefactoringWeb Refactoring
Web RefactoringJace Ju
 

Was ist angesagt? (20)

本当は怖いObjectSpace.each_object
本当は怖いObjectSpace.each_object本当は怖いObjectSpace.each_object
本当は怖いObjectSpace.each_object
 
okyuu.com x Rails x OpenID
okyuu.com x Rails x OpenIDokyuu.com x Rails x OpenID
okyuu.com x Rails x OpenID
 
ªãºAãäëèéí ñàíã çîõèîí áàéãóóëàõ
ªãºAãäëèéí ñàíã çîõèîí áàéãóóëàõªãºAãäëèéí ñàíã çîõèîí áàéãóóëàõ
ªãºAãäëèéí ñàíã çîõèîí áàéãóóëàõ
 
ruby_from_office
ruby_from_officeruby_from_office
ruby_from_office
 
FOSS4G LT - Invitation to ActionScript Programming
FOSS4G LT - Invitation to ActionScript ProgrammingFOSS4G LT - Invitation to ActionScript Programming
FOSS4G LT - Invitation to ActionScript Programming
 
MathSciNet20090526
MathSciNet20090526MathSciNet20090526
MathSciNet20090526
 
JSplash swf to javascript converter(2008/9/30)
JSplash swf to javascript converter(2008/9/30)JSplash swf to javascript converter(2008/9/30)
JSplash swf to javascript converter(2008/9/30)
 
AlgorithmDesign01
AlgorithmDesign01AlgorithmDesign01
AlgorithmDesign01
 
Programming言語Lua紹介(Internet版)
Programming言語Lua紹介(Internet版)Programming言語Lua紹介(Internet版)
Programming言語Lua紹介(Internet版)
 
碳酸会 图片列表讨论
碳酸会 图片列表讨论碳酸会 图片列表讨论
碳酸会 图片列表讨论
 
PHP 防駭 - 基礎觀念篇
PHP 防駭 - 基礎觀念篇PHP 防駭 - 基礎觀念篇
PHP 防駭 - 基礎觀念篇
 
Windows MobileとWeb Api
Windows MobileとWeb ApiWindows MobileとWeb Api
Windows MobileとWeb Api
 
What is PHP Frameworks?
What is PHP Frameworks?What is PHP Frameworks?
What is PHP Frameworks?
 
Ohp Seijoen H20 08 Jfreechart
Ohp Seijoen H20 08 JfreechartOhp Seijoen H20 08 Jfreechart
Ohp Seijoen H20 08 Jfreechart
 
CSS 排版 - 基礎觀念篇
CSS 排版 - 基礎觀念篇CSS 排版 - 基礎觀念篇
CSS 排版 - 基礎觀念篇
 
WebDAV as Web API
WebDAV as Web APIWebDAV as Web API
WebDAV as Web API
 
MSICC
MSICCMSICC
MSICC
 
Web Refactoring
Web RefactoringWeb Refactoring
Web Refactoring
 
RDF and FOAF
RDF and FOAFRDF and FOAF
RDF and FOAF
 
S28
S28S28
S28
 

Andere mochten auch

Web技術勉強会12回目
Web技術勉強会12回目Web技術勉強会12回目
Web技術勉強会12回目龍一 田中
 
Web技術勉強会 第25回
Web技術勉強会 第25回Web技術勉強会 第25回
Web技術勉強会 第25回龍一 田中
 
Web技術勉強会6回目
Web技術勉強会6回目Web技術勉強会6回目
Web技術勉強会6回目龍一 田中
 
Web技術勉強会 第26回
Web技術勉強会 第26回Web技術勉強会 第26回
Web技術勉強会 第26回龍一 田中
 
Web技術勉強会 第29回
Web技術勉強会 第29回Web技術勉強会 第29回
Web技術勉強会 第29回龍一 田中
 
Web技術勉強会 20110514
Web技術勉強会 20110514Web技術勉強会 20110514
Web技術勉強会 20110514龍一 田中
 
Web技術勉強会 20100424
Web技術勉強会 20100424Web技術勉強会 20100424
Web技術勉強会 20100424龍一 田中
 

Andere mochten auch (7)

Web技術勉強会12回目
Web技術勉強会12回目Web技術勉強会12回目
Web技術勉強会12回目
 
Web技術勉強会 第25回
Web技術勉強会 第25回Web技術勉強会 第25回
Web技術勉強会 第25回
 
Web技術勉強会6回目
Web技術勉強会6回目Web技術勉強会6回目
Web技術勉強会6回目
 
Web技術勉強会 第26回
Web技術勉強会 第26回Web技術勉強会 第26回
Web技術勉強会 第26回
 
Web技術勉強会 第29回
Web技術勉強会 第29回Web技術勉強会 第29回
Web技術勉強会 第29回
 
Web技術勉強会 20110514
Web技術勉強会 20110514Web技術勉強会 20110514
Web技術勉強会 20110514
 
Web技術勉強会 20100424
Web技術勉強会 20100424Web技術勉強会 20100424
Web技術勉強会 20100424
 

Mehr von 龍一 田中

WebSocketでリアルタイム処理をする
WebSocketでリアルタイム処理をするWebSocketでリアルタイム処理をする
WebSocketでリアルタイム処理をする龍一 田中
 
Web技術勉強会 20130525 - Google Cloud Messaging入門
Web技術勉強会 20130525 - Google Cloud Messaging入門Web技術勉強会 20130525 - Google Cloud Messaging入門
Web技術勉強会 20130525 - Google Cloud Messaging入門龍一 田中
 
Web技術勉強会 20120728
Web技術勉強会 20120728Web技術勉強会 20120728
Web技術勉強会 20120728龍一 田中
 
Web技術勉強会 20120609
Web技術勉強会 20120609Web技術勉強会 20120609
Web技術勉強会 20120609龍一 田中
 
Web技術勉強会 20120114 - JenkinsでJava/PHP/Ruby/JavaScriptをビルドする
Web技術勉強会 20120114 - JenkinsでJava/PHP/Ruby/JavaScriptをビルドするWeb技術勉強会 20120114 - JenkinsでJava/PHP/Ruby/JavaScriptをビルドする
Web技術勉強会 20120114 - JenkinsでJava/PHP/Ruby/JavaScriptをビルドする龍一 田中
 
Web技術勉強会 20111112
Web技術勉強会 20111112Web技術勉強会 20111112
Web技術勉強会 20111112龍一 田中
 
Web技術勉強会 20110723
Web技術勉強会 20110723Web技術勉強会 20110723
Web技術勉強会 20110723龍一 田中
 
Web技術勉強会 20110611
Web技術勉強会 20110611Web技術勉強会 20110611
Web技術勉強会 20110611龍一 田中
 
Web技術勉強会 20110528
Web技術勉強会 20110528Web技術勉強会 20110528
Web技術勉強会 20110528龍一 田中
 
Web技術勉強会 20100925
Web技術勉強会 20100925Web技術勉強会 20100925
Web技術勉強会 20100925龍一 田中
 
Web技術勉強会 第38回
Web技術勉強会 第38回Web技術勉強会 第38回
Web技術勉強会 第38回龍一 田中
 
Web技術勉強会 第37回
Web技術勉強会 第37回Web技術勉強会 第37回
Web技術勉強会 第37回龍一 田中
 
Web技術勉強会 第34回
Web技術勉強会 第34回Web技術勉強会 第34回
Web技術勉強会 第34回龍一 田中
 
Web技術勉強会 第33回
Web技術勉強会 第33回Web技術勉強会 第33回
Web技術勉強会 第33回龍一 田中
 
Web技術勉強会 第31回
Web技術勉強会 第31回Web技術勉強会 第31回
Web技術勉強会 第31回龍一 田中
 
Web技術勉強会 第30回
Web技術勉強会 第30回Web技術勉強会 第30回
Web技術勉強会 第30回龍一 田中
 
Web技術勉強会 第28回
Web技術勉強会 第28回Web技術勉強会 第28回
Web技術勉強会 第28回龍一 田中
 
Web技術勉強会23回目
Web技術勉強会23回目Web技術勉強会23回目
Web技術勉強会23回目龍一 田中
 
Web技術勉強会 第19回
Web技術勉強会 第19回Web技術勉強会 第19回
Web技術勉強会 第19回龍一 田中
 
Web技術勉強会 第18回
Web技術勉強会 第18回Web技術勉強会 第18回
Web技術勉強会 第18回龍一 田中
 

Mehr von 龍一 田中 (20)

WebSocketでリアルタイム処理をする
WebSocketでリアルタイム処理をするWebSocketでリアルタイム処理をする
WebSocketでリアルタイム処理をする
 
Web技術勉強会 20130525 - Google Cloud Messaging入門
Web技術勉強会 20130525 - Google Cloud Messaging入門Web技術勉強会 20130525 - Google Cloud Messaging入門
Web技術勉強会 20130525 - Google Cloud Messaging入門
 
Web技術勉強会 20120728
Web技術勉強会 20120728Web技術勉強会 20120728
Web技術勉強会 20120728
 
Web技術勉強会 20120609
Web技術勉強会 20120609Web技術勉強会 20120609
Web技術勉強会 20120609
 
Web技術勉強会 20120114 - JenkinsでJava/PHP/Ruby/JavaScriptをビルドする
Web技術勉強会 20120114 - JenkinsでJava/PHP/Ruby/JavaScriptをビルドするWeb技術勉強会 20120114 - JenkinsでJava/PHP/Ruby/JavaScriptをビルドする
Web技術勉強会 20120114 - JenkinsでJava/PHP/Ruby/JavaScriptをビルドする
 
Web技術勉強会 20111112
Web技術勉強会 20111112Web技術勉強会 20111112
Web技術勉強会 20111112
 
Web技術勉強会 20110723
Web技術勉強会 20110723Web技術勉強会 20110723
Web技術勉強会 20110723
 
Web技術勉強会 20110611
Web技術勉強会 20110611Web技術勉強会 20110611
Web技術勉強会 20110611
 
Web技術勉強会 20110528
Web技術勉強会 20110528Web技術勉強会 20110528
Web技術勉強会 20110528
 
Web技術勉強会 20100925
Web技術勉強会 20100925Web技術勉強会 20100925
Web技術勉強会 20100925
 
Web技術勉強会 第38回
Web技術勉強会 第38回Web技術勉強会 第38回
Web技術勉強会 第38回
 
Web技術勉強会 第37回
Web技術勉強会 第37回Web技術勉強会 第37回
Web技術勉強会 第37回
 
Web技術勉強会 第34回
Web技術勉強会 第34回Web技術勉強会 第34回
Web技術勉強会 第34回
 
Web技術勉強会 第33回
Web技術勉強会 第33回Web技術勉強会 第33回
Web技術勉強会 第33回
 
Web技術勉強会 第31回
Web技術勉強会 第31回Web技術勉強会 第31回
Web技術勉強会 第31回
 
Web技術勉強会 第30回
Web技術勉強会 第30回Web技術勉強会 第30回
Web技術勉強会 第30回
 
Web技術勉強会 第28回
Web技術勉強会 第28回Web技術勉強会 第28回
Web技術勉強会 第28回
 
Web技術勉強会23回目
Web技術勉強会23回目Web技術勉強会23回目
Web技術勉強会23回目
 
Web技術勉強会 第19回
Web技術勉強会 第19回Web技術勉強会 第19回
Web技術勉強会 第19回
 
Web技術勉強会 第18回
Web技術勉強会 第18回Web技術勉強会 第18回
Web技術勉強会 第18回
 

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
  • 3. 前回の反省 • 知識が中途半端すぎた – 結局よくわかっていなかった… • コーディングしなかった – サンプルだけ。しかもいきなりMechanize。 正直すまんかった 3
  • 4. 反省点を活かして • 「初めてのRuby」を読破 – オライリーのくせに分かりやすい。 – 少なくとも前回の知識よりましになった(はず) • 本格的にRubyの開発を開始 – とりあえず、過去のコードをRubyで焼きなおし 4
  • 5. Rubyのポイント Rubyで必要となるポイントを覚えている限り紹介 • インクリメント/デクリメントがない – i++, ++i, i--, --iが使えない – ならば、for($i =0; $i < $length; $i++){} みたいなとき どうするの? →array.each do |val| puts val end – Rubyではイテレータをフル活用する 5
  • 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