Rubyでトライ!                株式会社クルウィット                井澤 志充                Kanazawa.rb #7                 「安心・安全・安定・信頼」できるインタ...
じこしょうかい              「安心・安全・安定・信頼」できるインターネットサービスを   213年3月31日日曜日
じこしょうかい    •   井澤  志充  (いざわゆきみつ)                       「安心・安全・安定・信頼」できるインターネットサービスを   213年3月31日日曜日
じこしょうかい    •   井澤  志充  (いざわゆきみつ)                       「安心・安全・安定・信頼」できるインターネットサービスを   213年3月31日日曜日
じこしょうかい    •   井澤  志充  (いざわゆきみつ)   •    (株)クルウィットの取締役  兼  北北陸陸⽀支社⻑⾧長                         「安心・安全・安定・信頼」できるインターネットサービスを ...
じこしょうかい    •   井澤  志充  (いざわゆきみつ)   •    (株)クルウィットの取締役  兼  北北陸陸⽀支社⻑⾧長   •    博⼠士(情報科学)                         「安心・安全・安定・信頼...
じこしょうかい    •   井澤  志充  (いざわゆきみつ)   •    (株)クルウィットの取締役  兼  北北陸陸⽀支社⻑⾧長   •    博⼠士(情報科学)    •   ネットワークの委託研究・⾃自社サービス開発など      ...
Rubyで一番嫌いなエラーメッセージ              「安心・安全・安定・信頼」できるインターネットサービスを   313年3月31日日曜日
Rubyで一番嫌いなエラーメッセージ  NoMethodError: undefined method `XXX for nil:NilClass                           「安心・安全・安定・信頼」できるインターネッ...
Rubyで一番嫌いなエラーメッセージ  NoMethodError: undefined method `XXX for nil:NilClass    目的1: こいつを消してやりたい!                           「...
なんで?   オブジェクトが入ってると思ったら入ってなかったのにメ   ソッド呼んでたわ…               「安心・安全・安定・信頼」できるインターネットサービスを   413年3月31日日曜日
なんで?   オブジェクトが入ってると思ったら入ってなかったのにメ   ソッド呼んでたわ…   あーありがち。               「安心・安全・安定・信頼」できるインターネットサービスを   413年3月31日日曜日
なんで?   入力を元にしたオブジェクトって不定じゃないですか。               「安心・安全・安定・信頼」できるインターネットサービスを   513年3月31日日曜日
なんで?   入力を元にしたオブジェクトって不定じゃないですか。   不定入力を整形処理したあとに、               「安心・安全・安定・信頼」できるインターネットサービスを   513年3月31日日曜日
なんで?   入力を元にしたオブジェクトって不定じゃないですか。   不定入力を整形処理したあとに、   特定のオブジェクトが存在するかどうかをチェックしてから               「安心・安全・安定・信頼」できるインターネットサービス...
なんで?   入力を元にしたオブジェクトって不定じゃないですか。   不定入力を整形処理したあとに、   特定のオブジェクトが存在するかどうかをチェックしてから   methodを呼ぶよね。                  「安心・安全・安定...
なんで?   入力を元にしたオブジェクトって不定じゃないですか。   不定入力を整形処理したあとに、   特定のオブジェクトが存在するかどうかをチェックしてから   methodを呼ぶよね。   このチェックの記述が冗長になりがち。      ...
なんで?   入力を元にしたオブジェクトって不定じゃないですか。   不定入力を整形処理したあとに、   特定のオブジェクトが存在するかどうかをチェックしてから   methodを呼ぶよね。   このチェックの記述が冗長になりがち。   目的2...
XML入力 <?xml version="1.0" encoding="UTF-8"?> <kzrb>   <!--member= handle: required, role: optional -->   <member handle="w...
Nokogiri   •   http://nokogiri.org/   •   XML/HTMLパーサ・ビルダ   •   XPATH/CSS3  セレクタサポート   •   インストール方法        •   gem install...
パーサ その1 require nokogiri xml = Nokogiri::XML(open("kzrb.xml")) members = xml.xpath("//member") members.each { |member|   p...
xmlを切り出すとこんな感じで出てくる members (一部省略) => [#<Nokogiri::XML::Element         name="member"         attributes=[ #<Nokogiri::XML...
パーサ その1 require nokogiri xml = Nokogiri::XML(open("kzrb.xml")) members = xml.xpath("//member") members.each { |member|   p...
実行結果 その1 % ruby xml.rb wtnabe   =>staff libero   =>staff kiyohara xml.rb:9:in `block in <main>: undefined method `value fo...
パーサ その2 require nokogiri xml = Nokogiri::XML(open("kzrb.xml")) members = xml.xpath("//member") members.each { |member|   p...
実行結果 その2 % ruby xml.rb wtnabe   =>staff libero   =>staff kiyohara %                 「安心・安全・安定・信頼」できるインターネットサービスを   1313年3月...
tryを使ってみる   •   Object#try  NilClass#try   •   active_̲supportで定義されているメソッド。   •   argumentやblockを与えることができる。        •   Per...
tryをつかうと… require nokogiri xml = Nokogiri::XML(open("kzrb.xml")) members = xml.xpath("//member") members.each { |member|  ...
tryをつかうと… require nokogiri xml = Nokogiri::XML(open("kzrb.xml")) members = xml.xpath("//member") members.each { |member|  ...
tryをつかうと… require nokogiri xml = Nokogiri::XML(open("kzrb.xml")) members = xml.xpath("//member") members.each { |member|  ...
注意点   •     active_̲support  2.x  系                       require active_support   •     active_̲support  3.x  系          ...
•   Thank  You!        •   If  you  have  any  comments,              •   please  send  to:                   •   Mail:  i...
Upcoming SlideShare
Loading in …5
×

Try

898
-1

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
898
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
4
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Try

  1. 1. Rubyでトライ! 株式会社クルウィット 井澤 志充 Kanazawa.rb #7 「安心・安全・安定・信頼」できるインターネットサービスを13年3月31日日曜日
  2. 2. じこしょうかい 「安心・安全・安定・信頼」できるインターネットサービスを 213年3月31日日曜日
  3. 3. じこしょうかい • 井澤  志充  (いざわゆきみつ) 「安心・安全・安定・信頼」できるインターネットサービスを 213年3月31日日曜日
  4. 4. じこしょうかい • 井澤  志充  (いざわゆきみつ) 「安心・安全・安定・信頼」できるインターネットサービスを 213年3月31日日曜日
  5. 5. じこしょうかい • 井澤  志充  (いざわゆきみつ) • (株)クルウィットの取締役  兼  北北陸陸⽀支社⻑⾧長 「安心・安全・安定・信頼」できるインターネットサービスを 213年3月31日日曜日
  6. 6. じこしょうかい • 井澤  志充  (いざわゆきみつ) • (株)クルウィットの取締役  兼  北北陸陸⽀支社⻑⾧長 • 博⼠士(情報科学) 「安心・安全・安定・信頼」できるインターネットサービスを 213年3月31日日曜日
  7. 7. じこしょうかい • 井澤  志充  (いざわゆきみつ) • (株)クルウィットの取締役  兼  北北陸陸⽀支社⻑⾧長 • 博⼠士(情報科学) • ネットワークの委託研究・⾃自社サービス開発など 「安心・安全・安定・信頼」できるインターネットサービスを 213年3月31日日曜日
  8. 8. Rubyで一番嫌いなエラーメッセージ 「安心・安全・安定・信頼」できるインターネットサービスを 313年3月31日日曜日
  9. 9. Rubyで一番嫌いなエラーメッセージ NoMethodError: undefined method `XXX for nil:NilClass 「安心・安全・安定・信頼」できるインターネットサービスを 313年3月31日日曜日
  10. 10. Rubyで一番嫌いなエラーメッセージ NoMethodError: undefined method `XXX for nil:NilClass 目的1: こいつを消してやりたい! 「安心・安全・安定・信頼」できるインターネットサービスを 313年3月31日日曜日
  11. 11. なんで? オブジェクトが入ってると思ったら入ってなかったのにメ ソッド呼んでたわ… 「安心・安全・安定・信頼」できるインターネットサービスを 413年3月31日日曜日
  12. 12. なんで? オブジェクトが入ってると思ったら入ってなかったのにメ ソッド呼んでたわ… あーありがち。 「安心・安全・安定・信頼」できるインターネットサービスを 413年3月31日日曜日
  13. 13. なんで? 入力を元にしたオブジェクトって不定じゃないですか。 「安心・安全・安定・信頼」できるインターネットサービスを 513年3月31日日曜日
  14. 14. なんで? 入力を元にしたオブジェクトって不定じゃないですか。 不定入力を整形処理したあとに、 「安心・安全・安定・信頼」できるインターネットサービスを 513年3月31日日曜日
  15. 15. なんで? 入力を元にしたオブジェクトって不定じゃないですか。 不定入力を整形処理したあとに、 特定のオブジェクトが存在するかどうかをチェックしてから 「安心・安全・安定・信頼」できるインターネットサービスを 513年3月31日日曜日
  16. 16. なんで? 入力を元にしたオブジェクトって不定じゃないですか。 不定入力を整形処理したあとに、 特定のオブジェクトが存在するかどうかをチェックしてから methodを呼ぶよね。 「安心・安全・安定・信頼」できるインターネットサービスを 513年3月31日日曜日
  17. 17. なんで? 入力を元にしたオブジェクトって不定じゃないですか。 不定入力を整形処理したあとに、 特定のオブジェクトが存在するかどうかをチェックしてから methodを呼ぶよね。 このチェックの記述が冗長になりがち。 「安心・安全・安定・信頼」できるインターネットサービスを 513年3月31日日曜日
  18. 18. なんで? 入力を元にしたオブジェクトって不定じゃないですか。 不定入力を整形処理したあとに、 特定のオブジェクトが存在するかどうかをチェックしてから methodを呼ぶよね。 このチェックの記述が冗長になりがち。 目的2:チェックの記述をシンプルに! 「安心・安全・安定・信頼」できるインターネットサービスを 513年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をパースして表示するプログラムを作ってみる。 「安心・安全・安定・信頼」できるインターネットサービスを 613年3月31日日曜日
  20. 20. Nokogiri • http://nokogiri.org/ • XML/HTMLパーサ・ビルダ • XPATH/CSS3  セレクタサポート • インストール方法 • gem install nokogiri • 詳しくはおググりください。 「安心・安全・安定・信頼」できるインターネットサービスを 713年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 } 「安心・安全・安定・信頼」できるインターネットサービスを 813年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 オブジェクトが無い! 「安心・安全・安定・信頼」できるインターネットサービスを 913年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 } 「安心・安全・安定・信頼」できるインターネットサービスを 1013年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 : : 「安心・安全・安定・信頼」できるインターネットサービスを 1113年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 } 「安心・安全・安定・信頼」できるインターネットサービスを 1213年3月31日日曜日
  26. 26. 実行結果 その2 % ruby xml.rb wtnabe =>staff libero =>staff kiyohara % 「安心・安全・安定・信頼」できるインターネットサービスを 1313年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  が返る。 「安心・安全・安定・信頼」できるインターネットサービスを 1413年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 } 「安心・安全・安定・信頼」できるインターネットサービスを 1513年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 } 「安心・安全・安定・信頼」できるインターネットサービスを 1513年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 } すっきりした!! 「安心・安全・安定・信頼」できるインターネットサービスを 1513年3月31日日曜日
  31. 31. 注意点 •  active_̲support  2.x  系                require active_support •  active_̲support  3.x  系                require active_support/core_ext                  (または  active_support/all) 「安心・安全・安定・信頼」できるインターネットサービスを 1613年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 「安心・安全・安定・信頼」できるインターネットサービスを 1713年3月31日日曜日

×