SlideShare a Scribd company logo
Submit Search
Upload
Login
Signup
Try
Report
Yukimitsu Izawa
Follow
株式会社クルウィット
Mar. 30, 2013
•
0 likes
•
1,313 views
1
of
32
Try
Mar. 30, 2013
•
0 likes
•
1,313 views
Download Now
Download to read offline
Report
Yukimitsu Izawa
Follow
株式会社クルウィット
Recommended
Rubyでやろう。データ解析導入編( CSV, XML, JSON)
NAKAOKU Takahiro
4.5K views
•
19 slides
IPメッセージングはこうやって実装するのだ!
Sakae Saito
713 views
•
58 slides
Rubyでオートマトン
Yukimitsu Izawa
4.8K views
•
19 slides
Scala conf2013
Takafumi Ikeda
4.4K views
•
70 slides
クラウドセキュリティ基礎 @セキュリティ・ミニキャンプ in 東北 2016 #seccamp
Masahiro NAKAYAMA
3K views
•
116 slides
Log-modeのご紹介
Yukimitsu Izawa
948 views
•
19 slides
More Related Content
More from Yukimitsu Izawa
最新プロトコル HTT/2 とは
Yukimitsu Izawa
1.6K views
•
30 slides
RubyとEyeTribeで視線追跡をする
Yukimitsu Izawa
2.1K views
•
15 slides
Ghissuesのご紹介
Yukimitsu Izawa
1.3K views
•
24 slides
Octopress簡単スタートガイド
Yukimitsu Izawa
5.3K views
•
37 slides
RubyからFFIを使ってみた
Yukimitsu Izawa
3.6K views
•
18 slides
NTPを使ったDDoSについて
Yukimitsu Izawa
2.6K views
•
18 slides
More from Yukimitsu Izawa
(14)
最新プロトコル HTT/2 とは
Yukimitsu Izawa
•
1.6K views
RubyとEyeTribeで視線追跡をする
Yukimitsu Izawa
•
2.1K views
Ghissuesのご紹介
Yukimitsu Izawa
•
1.3K views
Octopress簡単スタートガイド
Yukimitsu Izawa
•
5.3K views
RubyからFFIを使ってみた
Yukimitsu Izawa
•
3.6K views
NTPを使ったDDoSについて
Yukimitsu Izawa
•
2.6K views
Getting Started with Ruby on Rails4 + Twitter Bootstrap3
Yukimitsu Izawa
•
2.6K views
テストとは
Yukimitsu Izawa
•
1.9K views
RubyでDSL
Yukimitsu Izawa
•
12.1K views
Pow
Yukimitsu Izawa
•
947 views
RVM with Server Environment
Yukimitsu Izawa
•
2K views
rvm でbundlerと仲良くする
Yukimitsu Izawa
•
1.6K views
SWIGでRubyバインディング
Yukimitsu Izawa
•
3K views
MacRubyとHotCocoaでMacのアプリを作ってみた
Yukimitsu Izawa
•
2.2K views
Try
1.
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日日曜日
8.
Rubyで一番嫌いなエラーメッセージ
「安心・安全・安定・信頼」できるインターネットサービスを 3 13年3月31日日曜日
9.
Rubyで一番嫌いなエラーメッセージ NoMethodError:
undefined method `XXX' for nil:NilClass 「安心・安全・安定・信頼」できるインターネットサービスを 3 13年3月31日日曜日
10.
Rubyで一番嫌いなエラーメッセージ NoMethodError:
undefined method `XXX' for nil:NilClass 目的1: こいつを消してやりたい! 「安心・安全・安定・信頼」できるインターネットサービスを 3 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日日曜日