Successfully reported this slideshow.
Your SlideShare is downloading. ×

Ad

Rubyでトライ!
                株式会社クルウィット
                井澤 志充

                Kanazawa.rb #7




                 「安心・安全・安定・...

Ad

じこしょうかい




              「安心・安全・安定・信頼」できるインターネットサービスを   2
13年3月31日日曜日

Ad

じこしょうかい

    •   井澤  志充  (いざわゆきみつ)




                       「安心・安全・安定・信頼」できるインターネットサービスを   2
13年3月31日日曜日

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Check these out next

1 of 32 Ad
1 of 32 Ad

More Related Content

Try

  1. 1. Rubyでトライ! 株式会社クルウィット 井澤 志充 Kanazawa.rb #7 「安心・安全・安定・信頼」できるインターネットサービスを 13年3月31日日曜日
  2. 2. じこしょうかい 「安心・安全・安定・信頼」できるインターネットサービスを 2 13年3月31日日曜日
  3. 3. じこしょうかい • 井澤  志充  (いざわゆきみつ) 「安心・安全・安定・信頼」できるインターネットサービスを 2 13年3月31日日曜日
  4. 4. じこしょうかい • 井澤  志充  (いざわゆきみつ) 「安心・安全・安定・信頼」できるインターネットサービスを 2 13年3月31日日曜日
  5. 5. じこしょうかい • 井澤  志充  (いざわゆきみつ) • (株)クルウィットの取締役  兼  北北陸陸⽀支社⻑⾧長 「安心・安全・安定・信頼」できるインターネットサービスを 2 13年3月31日日曜日
  6. 6. じこしょうかい • 井澤  志充  (いざわゆきみつ) • (株)クルウィットの取締役  兼  北北陸陸⽀支社⻑⾧長 • 博⼠士(情報科学) 「安心・安全・安定・信頼」できるインターネットサービスを 2 13年3月31日日曜日
  7. 7. じこしょうかい • 井澤  志充  (いざわゆきみつ) • (株)クルウィットの取締役  兼  北北陸陸⽀支社⻑⾧長 • 博⼠士(情報科学) • ネットワークの委託研究・⾃自社サービス開発など 「安心・安全・安定・信頼」できるインターネットサービスを 2 13年3月31日日曜日
  8. 8. Rubyで一番嫌いなエラーメッセージ 「安心・安全・安定・信頼」できるインターネットサービスを 3 13年3月31日日曜日
  9. 9. Rubyで一番嫌いなエラーメッセージ NoMethodError: undefined method `XXX' for nil:NilClass 「安心・安全・安定・信頼」できるインターネットサービスを 3 13年3月31日日曜日
  10. 10. Rubyで一番嫌いなエラーメッセージ NoMethodError: undefined method `XXX' for nil:NilClass 目的1: こいつを消してやりたい! 「安心・安全・安定・信頼」できるインターネットサービスを 3 13年3月31日日曜日
  11. 11. なんで? オブジェクトが入ってると思ったら入ってなかったのにメ ソッド呼んでたわ… 「安心・安全・安定・信頼」できるインターネットサービスを 4 13年3月31日日曜日
  12. 12. なんで? オブジェクトが入ってると思ったら入ってなかったのにメ ソッド呼んでたわ… あーありがち。 「安心・安全・安定・信頼」できるインターネットサービスを 4 13年3月31日日曜日
  13. 13. なんで? 入力を元にしたオブジェクトって不定じゃないですか。 「安心・安全・安定・信頼」できるインターネットサービスを 5 13年3月31日日曜日
  14. 14. なんで? 入力を元にしたオブジェクトって不定じゃないですか。 不定入力を整形処理したあとに、 「安心・安全・安定・信頼」できるインターネットサービスを 5 13年3月31日日曜日
  15. 15. なんで? 入力を元にしたオブジェクトって不定じゃないですか。 不定入力を整形処理したあとに、 特定のオブジェクトが存在するかどうかをチェックしてから 「安心・安全・安定・信頼」できるインターネットサービスを 5 13年3月31日日曜日
  16. 16. なんで? 入力を元にしたオブジェクトって不定じゃないですか。 不定入力を整形処理したあとに、 特定のオブジェクトが存在するかどうかをチェックしてから methodを呼ぶよね。 「安心・安全・安定・信頼」できるインターネットサービスを 5 13年3月31日日曜日
  17. 17. なんで? 入力を元にしたオブジェクトって不定じゃないですか。 不定入力を整形処理したあとに、 特定のオブジェクトが存在するかどうかをチェックしてから methodを呼ぶよね。 このチェックの記述が冗長になりがち。 「安心・安全・安定・信頼」できるインターネットサービスを 5 13年3月31日日曜日
  18. 18. なんで? 入力を元にしたオブジェクトって不定じゃないですか。 不定入力を整形処理したあとに、 特定のオブジェクトが存在するかどうかをチェックしてから methodを呼ぶよね。 このチェックの記述が冗長になりがち。 目的2:チェックの記述をシンプルに! 「安心・安全・安定・信頼」できるインターネットサービスを 5 13年3月31日日曜日
  19. 19. XML入力 <?xml version="1.0" encoding="UTF-8"?> <kzrb> <!--member= handle: required, role: optional --> <member handle="wtnabe" role="staff"></member> <member handle="libero" role="staff"></member> <member handle="kiyohara"></member> </kzrb> handleは必須で、role はオプショナル このXMLをパースして表示するプログラムを作ってみる。 「安心・安全・安定・信頼」できるインターネットサービスを 6 13年3月31日日曜日
  20. 20. Nokogiri • http://nokogiri.org/ • XML/HTMLパーサ・ビルダ • XPATH/CSS3  セレクタサポート • インストール方法 • gem install nokogiri • 詳しくはおググりください。 「安心・安全・安定・信頼」できるインターネットサービスを 7 13年3月31日日曜日
  21. 21. パーサ その1 require 'nokogiri' xml = Nokogiri::XML(open("kzrb.xml")) members = xml.xpath("//member") members.each { |member| puts member.attribute("handle").value if member.attribute("role").value == "staff" puts " =>staff" end } 「安心・安全・安定・信頼」できるインターネットサービスを 8 13年3月31日日曜日
  22. 22. xmlを切り出すとこんな感じで出てくる members (一部省略) => [#<Nokogiri::XML::Element name="member" attributes=[ #<Nokogiri::XML::Attr name="handle" value="wtnabe">, #<Nokogiri::XML::Attr name="role" value="staff"> ] >, #<Nokogiri::XML::Element name="member" attributes=[ #<Nokogiri::XML::Attr name="handle" value="libero">, #<Nokogiri::XML::Attr name="role" value="staff"> ] >, #<Nokogiri::XML::Element name="member" attributes=[ #<Nokogiri::XML::Attr name="handle" value="kiyohara"> ] >] ←Role オブジェクトが無い! 「安心・安全・安定・信頼」できるインターネットサービスを 9 13年3月31日日曜日
  23. 23. パーサ その1 require 'nokogiri' xml = Nokogiri::XML(open("kzrb.xml")) members = xml.xpath("//member") members.each { |member| puts member.attribute("handle").value if member.attribute("role").value == "staff" puts " =>staff" end } 「安心・安全・安定・信頼」できるインターネットサービスを 10 13年3月31日日曜日
  24. 24. 実行結果 その1 % ruby xml.rb wtnabe =>staff libero =>staff kiyohara xml.rb:9:in `block in <main>': undefined method `value' for nil:NilClass (NoMethodError) from /Users/izawa/.rvm/gems/ruby-2.0.0-p0/gems/ nokogiri-1.5.9/lib/nokogiri/xml/node_set.rb:239:in `block in each' : : 「安心・安全・安定・信頼」できるインターネットサービスを 11 13年3月31日日曜日
  25. 25. パーサ その2 require 'nokogiri' xml = Nokogiri::XML(open("kzrb.xml")) members = xml.xpath("//member") members.each { |member| puts member.attribute("handle").value if member.attribute("role") && ←オブジェクトの存在チェック member.attribute("role").value == "staff" puts " =>staff" end } 「安心・安全・安定・信頼」できるインターネットサービスを 12 13年3月31日日曜日
  26. 26. 実行結果 その2 % ruby xml.rb wtnabe =>staff libero =>staff kiyohara % 「安心・安全・安定・信頼」できるインターネットサービスを 13 13年3月31日日曜日
  27. 27. tryを使ってみる • Object#try  NilClass#try • active_̲supportで定義されているメソッド。 • argumentやblockを与えることができる。 • Person.try(:find,  1) • @people.try(:collect)  {|p|  p.name} • @person.try  {  |p|    p  "#{p.first_̲name#{p.last_̲name}"  } • Object#send  に似てるけど、NoMethodError   exception  が上がる代わりにnil  が返る。 「安心・安全・安定・信頼」できるインターネットサービスを 14 13年3月31日日曜日
  28. 28. tryをつかうと… require 'nokogiri' xml = Nokogiri::XML(open("kzrb.xml")) members = xml.xpath("//member") members.each { |member| puts member.attribute("handle").value if member.attribute("role") && member.attribute("role").value == "staff" puts " =>staff" end } 「安心・安全・安定・信頼」できるインターネットサービスを 15 13年3月31日日曜日
  29. 29. tryをつかうと… require 'nokogiri' xml = Nokogiri::XML(open("kzrb.xml")) members = xml.xpath("//member") members.each { |member| puts member.attribute("handle").value if member.attribute("role").try(:value) == "staff" puts " =>staff" end } 「安心・安全・安定・信頼」できるインターネットサービスを 15 13年3月31日日曜日
  30. 30. tryをつかうと… require 'nokogiri' xml = Nokogiri::XML(open("kzrb.xml")) members = xml.xpath("//member") members.each { |member| puts member.attribute("handle").value if member.attribute("role").try(:value) == "staff" puts " =>staff" end } すっきりした!! 「安心・安全・安定・信頼」できるインターネットサービスを 15 13年3月31日日曜日
  31. 31. 注意点 •  active_̲support  2.x  系                require 'active_support' •  active_̲support  3.x  系                require 'active_support/core_ext'                  (または  'active_support/all') 「安心・安全・安定・信頼」できるインターネットサービスを 16 13年3月31日日曜日
  32. 32. • Thank  You! • If  you  have  any  comments, • please  send  to: • Mail:  izawa@izawa.org  /  izawa@clwit.co.jp • Twitter:  @Yukimitsu_̲Izawa 「安心・安全・安定・信頼」できるインターネットサービスを 17 13年3月31日日曜日

×