トップページ⇒tech
1001コメント332KB

Ruby 初心者スレッド Part 56©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net2014/12/13(土) 09:29:12.93ID:DLY4IovQ
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
Ruby on RailsについてはWEBプログラミング板で

前スレ
Ruby 初心者スレッド Part 55
http://peace.2ch.net/test/read.cgi/tech/1403361584/

るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/

Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/

逆引きRuby
http://www.namaraii.com/rubytips/
0002デフォルトの名無しさん2014/12/13(土) 11:36:58.78ID:rv+X6bjI
「クソの用心のうた」 作詞・作曲・台詞 太田豊史雄

 尻穴用心 クソ用心
 尻穴用心 クソ用心
 一日一回 よいクソを
 ブリブリ モリモリ 日曜日
 「ケツを大切にしよう 一日一便」

 尻穴用心 クソ用心
 尻穴用心 クソ用心
 月に一度は 浣腸を
 ビチビチ 水便 月曜日
 「腸をきれにしよう 一日一便」

 尻穴用心 クソ用心
 尻穴用心 クソ用心
 屁には用心 屁の用心
 カンチョー カンチョー 火曜日だ
 「クソ我慢はやめよう 一日一便」

 尻穴用心 クソ用心
 尻穴用心 クソ用心
 クソは便酒の お母さん
 グイグイ グイグイ 水曜日
 「クソを大切にしよう 一日一便」
0003名無しさん@そうだ選挙に行こう2014/12/13(土) 18:07:33.37ID:wupMBGRm
Rubyとかgemコマンドの使い方がわかりません。

本には、次のように書かれています。

「試しに、Rubyのソースからクラスやメソッドの構成を参照するrdefsというgemパッケージを検索してみましょう。

% gem search rdefs

*** REMOTE GEMS ***

rdefs (0.0.2)」

これをやってみようと、最初に試みたのは、
Rubyと書いてあるやつをダブルクリックしてコマンドプロンプトっぽい黒いやつが出てきたところで
「% gem search rdefs」と打ち込むことで、これはエンターを押した直後に一瞬で消えてしまいました。

次に、Rubyコマンドプロンプトの方でやってみましたが、
「% gem search rdefs」と打ったら失敗(『'%'は、内部コマンドまたは外部コマンド...』のエラー)して、
「gem search rdefs」と打ったらちゃんと「*** REMOTE GEMS ***」が出ました。
(でも、rdefs (0.0.2)は出てこなかった)

疑問はいろいろありますが、特に次がわかりません。
1.「% gem search rdefs」はどこに打ち込めばいいのか?
2.コマンドプロンプトでは"%"を除外しないとうまくいかなかったっぽいが、"%"とはどういう存在なのか?
3.結局、正しく「gemパッケージをインストール」するにはどうすればいいのか

お願いします。
0004名無しさん@そうだ選挙に行こう2014/12/13(土) 18:33:39.73ID:cDWMVZ6e
>>3
1. コマンドプロンプト
2. '%' はコマンドを打ち込むことを表すことが多い。'>' が使われることもある
 したがって実際に実行させる場合は '%' や '>' は省略しなければならない
3. gem install <gem名>
0005名無しさん@そうだ選挙に行こう2014/12/13(土) 19:16:06.90ID:qpx34oJT
>>4
ありがとうございます!
0006名無しさん@そうだ選挙に行こう2014/12/13(土) 19:30:49.35ID:gn9mQ4CY
前のスレで、ファイルの最終行を消す方法を伺った者です
truncateを使うことにしました!
回答どうもありがとうございました
0007デフォルトの名無しさん2014/12/14(日) 21:58:28.43ID:8U4w7i4K
Rubyで無名ブロック作って即時実行することはできるのでしょうか


JavaScriptにおける(function(){})()みたいなやつです
0008デフォルトの名無しさん2014/12/14(日) 22:05:37.58ID:ivAaTykD
Proc.new {|x| x+1}.call 1
0009デフォルトの名無しさん2014/12/14(日) 22:53:18.03ID:igCzp+zo
ラムダでいいじゃん
->(x){x+1}[1]
0010名前は開発中のものです。2014/12/14(日) 22:59:57.18ID:Jnvv+4N5
ハァ・・・最近忙しくてruby触ってないお・・・(´・ω・`)
ruby触りたい・・・
せっかくある程度身に付いたのに身に付いたばかりで触る時間減ると
また忘れていく・・・
0011デフォルトの名無しさん2014/12/14(日) 23:33:15.46ID:8U4w7i4K
>>8-9
有難うございました
0012デフォルトの名無しさん2014/12/15(月) 10:05:50.58ID:X5+DHKvY
>>6
自分がレスしといてなんだけどイリーガル系全然考慮してないよ
今更だけど注意しといてくれ
0013デフォルトの名無しさん2014/12/15(月) 17:40:49.57ID:kTAaEB1y
>>12
ご指摘ありがとうございます。
私の用途の範疇では件の方法で大丈夫でしたが、注意しておきたいと思います。
0014デフォルトの名無しさん2014/12/16(火) 09:04:06.25ID:lqhDdyeK
>>12
イリーガル=非合法。
イレギュラーの間違いでは?
0015デフォルトの名無しさん2014/12/16(火) 12:49:34.17ID:vHDhcsvC
Illegal Function Call
視点によっては間違ってない
0016デフォルトの名無しさん2014/12/16(火) 12:54:30.91ID:e7BH2hjc
懐かしいエラーメッセージだが、単にその英語が間違ってたのではないかという気もするw
0017デフォルトの名無しさん2014/12/16(火) 20:26:18.61ID:/G1f9edX
rubyの初期で入ってる暗号化ライブラリってRESERVEDも実際と違ったりするし使うのやめたほうがいいですか?
例えばbase64やRFC〜とか
0018デフォルトの名無しさん2014/12/16(火) 23:02:53.13ID:e7BH2hjc
base64は暗号化ではないし、全体として何を言おうとしてるのかすらわからない。
0019デフォルトの名無しさん2014/12/17(水) 21:30:01.70ID:BeU/9l9q
今年もクリスマスに何かあるんです?
0020デフォルトの名無しさん2014/12/17(水) 21:34:53.72ID:lhoaDEbV
>>19
Ruby 2.2 が(多分)でる
0021デフォルトの名無しさん2014/12/18(木) 09:57:24.52ID:wFynChwC
あるサイトの画像を集めていて、年齢確認がでる場合(画像がR-18)とでない場合のページが存在するのですが
年齢確認がある場合、年齢確認と確認後のurlが同一なためopen-uriで開いても年齢確認ページのソースを取得してしまい困っています
回避する方法はあるのでしょうか?
0022デフォルトの名無しさん2014/12/18(木) 19:25:53.72ID:lnYTNFCY
Object.new.to_s #=> "#<Object:0x1234567>"
の0x1234567って何を意味しているんですか?
object_idとも思いましたが違うようです
0023デフォルトの名無しさん2014/12/18(木) 20:03:07.94ID:siOJVJ1k
object_id*2っぽいかな?
なぜその値なのかは知らん
0024デフォルトの名無しさん2014/12/18(木) 21:07:14.04ID:48UW7eHV
http://i.loveruby.net/ja/rhg/book/object.html
でいうところのVALUE
0025デフォルトの名無しさん2014/12/18(木) 21:24:27.11ID:nUQSuv6d
なるほど、勉強になるなぁ
0026デフォルトの名無しさん2014/12/18(木) 21:57:20.80ID:wCefEqGM
>>21
クッキーだろ
0027デフォルトの名無しさん2014/12/19(金) 23:48:25.45ID:Ak6+g1yP
Rubyリファレンスマニュアル chm版リミックス
のスムーススクロールの機能って邪魔なだけじゃない?
あれで移動すると戻るボタンが機能しないからメソッド一覧からいろいろ飛んで戻ってってすごいやりにくい
手元ではchm再コンパイルして機能削除したやつ作ったけど
0028デフォルトの名無しさん2014/12/20(土) 07:16:59.37ID:dWuhsWfV
>>21
もしURLの最後に、クエリ情報をつけ足して、
認証前後のURLを変えると、
いつも認証せずに認証後のページに、アクセスできてしまう

ttp://〜?キー1=値1&キー2=値2&〜

それを避けるため、毎回認証させるように、
例えばPHPなら、PEAR::Authというライブラリで、フォーム認証する

ただし、同一セッション間では、再認証がいらないように、
クッキーとか、フォームの隠しフィールドに、
値を入れているのだろう
0029デフォルトの名無しさん2014/12/20(土) 16:40:35.14ID:lEZ+5INX
クラスを定義しているファイルを実行するとメソッドが呼ばれて実行されるのはどうして?インスタンス化してないのに。
0030デフォルトの名無しさん2014/12/20(土) 19:55:34.17ID:KBX+SOS/
そこらへんはメタプログラミングRubyって本にこってり書いてある
0031デフォルトの名無しさん2014/12/20(土) 23:49:49.62ID:B5CT9989
>>26 >>28
ありがとうございます、解決できました
0032デフォルトの名無しさん2014/12/21(日) 17:53:16.95ID:HnwskcxI
初歩的な質問で申し訳ありませんがお願いします
gem install nokogiri が失敗します
OSはwindows8.1でRubyは2.0.0p481です
エラーメッセージは以下の通りです

ERROR: Could not find a valid gem 'nokogiri' (>= 0), here is why:
Unable to download data from https://rubygems.org/ - SSL_connect retur
ned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (
https://rubygems.org/latest_specs.4.8.gz)

原因または解決方法が分かる方がいたら教えてください
0033デフォルトの名無しさん2014/12/21(日) 21:26:50.73ID:XFFvzADQ
Windowsでgem installするとSSLエラーが出る場合の解決策
http://qiita.com/shimoju/items/394818b4989b94680aaf
0034デフォルトの名無しさん2014/12/21(日) 23:24:06.42ID:OZE/nfT+
File.open("hoge.txt","wb"){|file|
file.write 0
}

上の
バイナリモードの書き込み(wb)とそうじゃないの(w)
でhoge.txtを出力したんすが、まったく同じでした。
結局バイナリモードってなんですが?
いろいろ見たけどよくわかりませんでした。
0035デフォルトの名無しさん2014/12/21(日) 23:53:39.57ID:NfmN1Wug
"n"を出力すれば分かるだろ
Windowsじゃなきゃ関係ないよ
0036デフォルトの名無しさん2014/12/21(日) 23:55:59.18ID:NfmN1Wug
"\n"だった
0037デフォルトの名無しさん2014/12/21(日) 23:57:45.70ID:HnwskcxI
>>33
おかげさまでSSL通信のエラーは解決しました。ありがとうございます。

ただNokogiriのインストールに関してはその後も山ほどエラーが出たので
最終的にはビルド済みのバイナリーファイルをダウンロードしてそのままインストールしました
0038デフォルトの名無しさん2014/12/22(月) 21:46:18.28ID:QU4NlpEK
REXMLで、ファイルを読んでくれないのですが、どうすればよいでしょうか。
xmlファイルは、アプリケーションと同じファイルフォルダにあります。
doc = REXML::Document.new("a.xml")

次の方法だと、エラーになります。
doc = REXML::Document.new(File.new("a.xml"))

rexml.rb:4:in `initialize': No such file or directory @ rb_sysopen - a.xml(Errno::ENOENT)
from rexml.rb:4:in `new'
from rexml.rb:4:in `<main>'
0039デフォルトの名無しさん2014/12/22(月) 22:06:46.38ID:+y3wtk/E
エラーのとおり、a.xml というファイルが読めてない
実行時のカレントディレクトリにあることを確認すべし
0040デフォルトの名無しさん2014/12/22(月) 22:07:56.12ID:wGmzBE1B
>>38
再現するための最小のスクリプトください
0041デフォルトの名無しさん2014/12/22(月) 22:28:16.24ID:DFOZol/g
絶対パス名か実行時のカレントディレクトリからの相対パス名を指定
若しくはa.xmlがあるディレクトリに移動
0042デフォルトの名無しさん2014/12/23(火) 06:15:39.85ID:Wq4N9ufp
みなさん、レス有難うございます。
こんな感じです。

require 'rexml/document'
doc = REXML::Document.new(File.new("a.xml"))
ZZZ = Struct.new(:aaa, :bbb, :ccc)
zzzs = REXML::XPath.match(doc,"/yyy/zzz").map do |zzz|
aaa_element = zzz.elements["AAA"]
aaa = aaa_element ? aaa_element.text : nil
bbb_element = zzz.elements["BBB"]
bbb = bbb_element ? bbb_element.text : nil
ccc_element = zzz.elements["CCC"]
ccc = ccc_element ? ccc_element.text : nil
end

いくつかのサイトを参考にしてみたのですが、うまくいきませんでした。
http://docs.ruby-lang.org/ja/2.1.0/library/rexml=2fdocument.html
http://d.hatena.ne.jp/aoi_273/20090311/1236764850
http://k-shogo.github.io/article/2013/09/03/ruby-xml/
0043デフォルトの名無しさん2014/12/23(火) 06:41:07.77ID:Wq4N9ufp
解決しました。
「カレントディレクトリ」を「Ruby interpreter」が置いてあるフォルダのことだと勘違いしていました。
書いたプログラムのあるフォルダに移動したら動きました。

初心者過ぎてすみません。
0044デフォルトの名無しさん2014/12/24(水) 10:44:21.44ID:cuUtxhMJ
ある変数vに対して、:vや'v'からその値を取得したいのですが、
eval('v')のようにする以外に何か方法はあるでしょうか?
0045デフォルトの名無しさん2014/12/24(水) 13:40:07.76ID:kEZAS2wh
http://docs.ruby-lang.org/ja/2.1.0/class/Binding.html#I_LOCAL_VARIABLE_GET
0046デフォルトの名無しさん2014/12/24(水) 14:23:58.90ID:cuUtxhMJ
>>45
ありがとうございます!
0047デフォルトの名無しさん2014/12/24(水) 14:46:08.90ID:ioNhDOiv
順列ではなく、同じ組合せを判定できる関数ってある?
もし無ければ、要素をソートしてから比べるけど

集合(set)では、同じ要素を持てないため、
同じ要素を持てるもので

[1,2,2] == [2,1,2]
[1,2,2] != [1,2,2,3]
0048デフォルトの名無しさん2014/12/24(水) 18:32:20.60ID:4+blJEbJ
ない
0049デフォルトの名無しさん2014/12/24(水) 19:24:33.39ID:kde12yWR
要素の値をキー、出現数を値としたハッシュで数えたら?
それならO(n)だからソートより速いでしょ
0050デフォルトの名無しさん2014/12/24(水) 22:01:27.51ID:kEZAS2wh
https://rubygems.org/gems/multiset
0051デフォルトの名無しさん2014/12/24(水) 22:50:49.52ID:kde12yWR
そんなくだらないことにわざわざgemを使うな
際限なく依存関係が増えて無茶苦茶になる
0052デフォルトの名無しさん2014/12/24(水) 22:54:40.10ID:ZFXquuAL
そんなあなたにbundler
0053472014/12/25(木) 18:03:50.49ID:GZxGVqty
multiset(多重集合)の機能の説明はどこにあるの?
H.Hiro は日本人?日本語の説明はどこ?

[1,2,2] == [2,1,2]
簡単にこういう感じで、比較できない?
0054472014/12/25(木) 18:20:34.69ID:GZxGVqty
Ruby用 多重集合(マルチセット)ライブラリ
ttp://maraigue.hhiro.net/multiset/

Multisetの逆引きリファレンス
ttp://maraigue.hhiro.net/multiset/reverseref.ja.html#s26

ここに日本語の説明があった
== で比較できる
0055デフォルトの名無しさん2014/12/25(木) 20:25:03.94ID:30SwzOSe
n要素の配列から取り出せる部分列全パターン(計2**nパターン)を列挙したいんですが
何かいい単純な書き方がありますでしょうか?

今のところ以下のように、
何かを出してから足し合わせたりと1段間に処理を挟むような考え方でしか出せていません

a=[1,2,3]
n=a.size

p (0..n).flat_map{|i|a.combination(i).to_a}
#=> [[], [1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3]]

p (0..2**n-1).map{|i|a.select.with_index{|j,k|2**k&i>0}}
#=> [[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]]
0056デフォルトの名無しさん2014/12/25(木) 22:09:01.66ID:lIYOW+qd
スクレイピングをするときの目印(タグ)は、どうやって見つければいいんでしょうか。
サンプルコード見るとうまく切り出してあるのですが、ブラウザでソースを表示させても全然わかりません。
0057デフォルトの名無しさん2014/12/25(木) 22:35:42.38ID:EJcNEjL/
XPathじゃね?
0058デフォルトの名無しさん2014/12/25(木) 22:40:28.35ID:dAMLPR9k
>>56
idが付いてる近くの要素からXPathで相対指定
0059デフォルトの名無しさん2014/12/25(木) 22:41:03.06ID:/SHsWe6V
nokogiriでも使ってんの?
0060デフォルトの名無しさん2014/12/25(木) 23:37:56.28ID:6x6Injm4
>>55
powersetで調べてみたが、多分無い
a.inject([[]]){|i, j|i+i.map{|k|k+[j]}}
0061デフォルトの名無しさん2014/12/26(金) 07:02:56.94ID:abtjB2iM
>>57->>59
ありがとうございます。
nokogiriを使っています。
XPathについて調べてみます。
0062デフォルトの名無しさん2014/12/26(金) 07:08:18.74ID:exs6NRdc
>>61
https://getfirebug.com/html
他のブラウザも似たような機能があるはず
Rubyに直接関係ないから他に投げたほうがよかったかも
0063デフォルトの名無しさん2014/12/26(金) 07:21:16.94ID:uiZ6TSzq
>>56
<tag id="~">
<tag class="~">

idはそのページの中の、ある部分をピンポイントに指定するためにつけられるので、
ある特定部分だけ切り出すときにはidが目印に使える。
classはそのページの中で繰り返しあらわれる部分をまとめて指定するためにつけられるので、
繰り返しあらわれる部分をすべて抜き出すときにclassが使える。

ただしすべてのサイトがidやclassを使っているとは限らないので、
そういうときはソースにつけられたコメント部分を目印にしたり、
本文部分の特徴的な言葉や、本文の言葉とタグの組み合わせを目印に抜き出したりもする。

以上は正規表現等を使って自分で切り出す場合の基本的な考え方です。
要はプログラムが判断できる特徴的なパターンを見つけられるか、
また繰り返し使う場合はそれに加えて変化のないパターンを見つけられるか、です。
006456=612014/12/26(金) 08:13:14.79ID:abtjB2iM
>>62
おぉ、見やすいです。
ソースを表示させる方法がわからなくて、Chrome入れて使っていたところです。

>Rubyに直接関係ないから他に投げたほうがよかったかも

すいません。
「プログラミング」と「Webプログラミング」の区別もついていないので。。。

>>63
ありがとうございます。
やっぱり人力なんですね。
まずはニュースサイトで試してみます。
0065デフォルトの名無しさん2014/12/26(金) 09:58:24.25ID:exs6NRdc
>>64
ソースを整形して表示してくれるだけのものじゃない
画面上のオブジェクトがHTMLのどの要素に該当するかとか
その要素へのXPathやCSSセレクタも調べられる
わけわかんなければ最低でもHTMLとCSSはやったほうがいいよ
0066デフォルトの名無しさん2014/12/26(金) 10:20:05.28ID:4oEvTEY8
nokogiri のチュートリアルはけっこう分かりやすかったはず。
xpath とかcss による選択はあれを地道にやるのが一番早道と思う。
http://www.nokogiri.org/
正規表現でやるのは、この場合、苦しい・・・
■ このスレッドは過去ログ倉庫に格納されています