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