Ruby 初心者スレッド Part 65
■ このスレッドは過去ログ倉庫に格納されています
プログラミング言語 Rubyについての、初心者向けスレです。質問・要望・雑談などをどうぞ
質問するときは、OSやRubyのバージョン、エラーメッセージを書いて下さい。
Ruby on Rails については、WEBプログラミング板で
前スレ
Ruby 初心者スレッド Part 64
https://mevius.5ch.net/test/read.cgi/tech/1535797516/
るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
逆引きRuby
http://www.namaraii.com/rubytips/
Ruby コミュニティ公式
https://www.ruby-lang.org/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured Rubyで書いたものを別言語に移植するのは、そう難しい話でもないだろ
opalとかで楽しようとしたほうが罠に嵌りそう perlで書いたのがもったいない
そう思っていた時期がありましたが
rubyで書いたらそんな小さな心配は吹き飛びました
↓
rubyで書いたのがもったいない
そう思っていた時期がありましたが
pythonで書いたらそんな小さな心配は吹き飛びました 最初に苦労してCで書いておけばその後は言語の流行りに合わせてFFIラッパー書くだけで済んだのにねwwww >>312
モノになるかどうか分からんものに苦労を強いるなんて愚の骨頂 >>313
将棋のAIみたいなCPU時間のかかる処理だと、Cならブルートフォースで全く問題にならない箇所が
ゲロ遅Rubyだとアルゴリズムの最適化が必要になったりして、結局Cの方が早かったんじゃないか、、、となるケースが多いよ
そもそもアルゴリズムの実装はCでもあまり生産性に差が出ないし >>314
トライアンドエラーを繰り返すようなものをCでやるのはつらみがあるよ
ある程度形になってきたらあらためてCなりでやればいいだけ >>315
高負荷なアルゴリズムの実装においては、遅すぎる言語を使うことでその「エラー」の閾値が大きく低下することがあるってことだ
遅くない言語では問題にならないことが問題になる >>315
sassがそれをやったわけだが。
最初Rubyでsassが作られた。
今はlibsassというC言語実装が作られた。
だけどあれ、確か2006年ぐらいにRuby版がでてから
6年ぐらいもかかっただろ?
そしてRuby版に機能が追いつくまでさらに数年 >>316
> 遅すぎる言語を使うことで
遅すぎるという言葉には2つの意味があって、
"実行速度が" 遅すぎる言語で問題になることがあるように、
"開発が" 遅すぎる言語では、その開発の遅さが問題になることがある >>315
馬鹿なの?
トライ&エラーではrubyなりpython で作って、そくどの為にCで書き直すんだろ。
Twitter やFacebook もロジックはrubyで作って、そのままでは限界を感じたからも、っと速い言語に書き換えたろ?
ロジックさえ確立すれば、多少の記述量増加よりは問題にならない。
(むしろ問題があったから変更する必要に迫られた) Vagrant, Chef, Homebrew など、環境構築運用でシェルスクリプトの代わりには、Ruby で書く。
rbenv(anyenv) も、Rubyか?
他にも、SASS とか、他の言語よりも、数年早いから、
実験段階のものや、アクセスが少ない、中小企業向けに良い
大規模になってきたら、他の言語に変える >>319
高負荷な処理の開発においては、検証すらままならないほどに遅くなることが普通にある(Cで書いててもね)
そもそも最初からパフォーマンスが問題になることが分かっているなら、速度自体もアルゴリズムの良し悪しを決める重要なファクターだ
まあRuby使いには想像しにくい世界かもね >>320
>大規模になってきたら、他の言語に変える
って>>292の話と全く変わらないな >>320
> rbenv(anyenv) も、Rubyか?
rbenvもanyenvもその兄弟(*env)たちもシェルスクリプトで作られてるよ。
https://github.com/rbenv/rbenv の緑のバーをクリックすりゃわかるだろ?
Shell 96.5% Ruby 1.5% C 1.4% Other 0.6%
環境構築というか、"端末の"環境構築なので
端末を提供しているシェルスクリプトが一番相性が良い あとrubyの環境を整えるのに、rubyが必要とかありえないわなw
それにruby遅いねん。(ruby以外のスクリプト言語もそうだろうけど)
$ time ruby -e 'print "ruby"'
ruby
real 0m0.054s
user 0m0.042s
sys 0m0.013s
$ time sh -c 'echo "sh"'
sh
real 0m0.001s
user 0m0.000s
sys 0m0.001s Perlは少しはマシだな
$ time perl -e 'print "perl"'
perl
real 0m0.003s
user 0m0.000s
sys 0m0.002s
$ time php -r 'print "php";'
php
real 0m0.016s
user 0m0.016s
sys 0m0.000s
$ time python -c 'print "python";'
python
real 0m0.016s
user 0m0.012s
sys 0m0.004s >>324-325 ちなみにこれ *envを使っていないLinux環境です。
*env を使うと各インタプリタ起動前にオーバーヘッドが入るから遅くなるが
これはそれがない純粋な速度ということ それでもほぼ起動のオーバーヘッドだろう
RubyはRails専用なので長時間動作が前提だから起動時間はあまり重視されてないんだろうね スタートアップで使ってたってだけで
もう使ってないから
遅すぎて見切られた ツイッターがRailsていつの時代の話だよwww原始人かww
今でもScalaなのかどうかが気になるわwwww >>327
> それでもほぼ起動のオーバーヘッドだろう
>>326で言ってるオーバーヘッドっていうのは
各言語用のインタプリタ起動のオーバーヘッドではなくて、
*envの仕組み上、追加で存在するオーバーヘッドのこと。
*envは例えばrubyだったら、rubyのバイナリを直越実行するのではなく、
rubyの指定されたバージョンを起動するためのシェルスクリプトを実行する。
>>324-325は、*envを使ってないから、各言語用のインタプリタ本来の
起動時間ですよって話。 IOのオーバーヘッドもあるんじゃないの?
RubyはUnicodeの確認とかしてそう。
逆に、BashやPerl5はしてなさそう。 なんだよ?Unicodeの確認って
単に「Rubyは起動が遅い。」でいいだろw 出力にかかる時間を計ってる以上、「起動」の時間はわからんだろ。
Unicodeうんぬんは、文字の妥当性を検証してる気がしたから。バイナリを流すとエラーになったような。
きっとRubyは遅いだろうと思うが、それでも、おまえの確認は証明になっていないぞ。 はぁ、くだらね。Rubyが遅いという結論は変わらないんだから
こっちは、起動が遅くても文字列出力が遅くても構わんのだがなーw
はい。やっぱりRubyは起動が遅いです。
php、pythonの3.5倍、Perlの17倍、shの50倍遅いです。
$ time ruby -e ''
real 0m0.053s
user 0m0.049s
sys 0m0.004s
$ time sh -c ''
real 0m0.001s
user 0m0.000s
sys 0m0.001s
$ time perl -e ''
real 0m0.003s
user 0m0.003s
sys 0m0.000s
$ time php -r ''
real 0m0.015s
user 0m0.004s
sys 0m0.011s
$ time python -c ''
real 0m0.014s
user 0m0.011s
sys 0m0.004s だいたい。たかが出力にそんなに時間がかかるわけ無いだろ
real 0m0.054s の大部分が起動ではなくて、
出力の時間だっていうのなら、それはそれで大爆笑もんだろ
起動よりも出力のほうが時間かかるって言ってんだから なんでそんな人間がRubyスレを覗いてるんだろうねぇ…
Rubyが嫌いならRubyスレなんて覗かなきゃいいだけなのに シェルスクリプトでループしたら、5分以上掛かる。
プロセスも、10万以上起動されるし
Ruby なら、3秒ぐらい
だから、シェルスクリプトで書かない > シェルスクリプトでループしたら、5分以上掛かる。
> プロセスも、10万以上起動されるし
お前の書き方が悪いんだろw >>340
ウソでなければ、極端すぎる。
シェルどうこうじゃなく、ただやりかたがまずいことを疑うな。 ruby --disable-gems -e ''
ならそんなに時間かからないはずだけど。 >>342
そいつは何言っても自分を省みることのできない奴だから、構うだけ無駄だと思うよ >>338
日本が嫌いなのに日本にしがみついてる朝鮮人みたいなもんだよ。 Rubyて「楽しく開発ができる」って言うじゃない? その逆、「開発がヘヴィで苦行なデスマーチになりまーーーす!」と宣伝する言語は無い
一般的には、どんな言語や商品でもそう宣伝する、そうしない商品は無い >>347
開発当初はその通り
Railsがしゃしゃり出てくる前もまあ当時の他言語と比べてまあ妥当
Rubyデツクルモノ=Railsとなってからは「Ruby別に楽しくないじゃん」とか言われるようにはなった
メモリ16GBとSSDで意識高い系言語もIDEでぐわんぐわん言わせられる昨今、Rubyのそのへんのメリットは比較上は薄い >>347
ごめん。
RubyよりHaskellが楽しい。 ほんとうはデスマになってるのに
Ruby使うことでラリって気持ちいいから
デスマに気付いてないケースは多そうだ 後のこと一切気にしなくていいならJavaでも楽しいよ
最近Rubyにヘイトが集まってるのは、Rails全盛期にそうやって乱造されたアプリの便所掃除の仕事の割合が増えてるから 書きやすく 読みにくい
→楽しく適当に書かれたウンコードの保守押し付けられた奴らブチ切れ
当然書いた本人はもういないw perlの読み難さに嫌気が差して造られた言語なのにperlの悪い所を引き摺ってるからな 社員50人の「Ruby 開発」という会社の求人を見た。
東京・大阪で求人
Rubyでは、国内3位だって!
Cookpad, マネーフォワードに次ぐ会社か?
上場してるのか? 変換表を使って、置換できるのは便利!
hash = { 'ab' => 'あ', 'xy' => 'ん' }
p re = Regexp.union( hash.keys ) #=> /ab|xy/
p "9xy9ab9xyx".gsub( re, hash )
#=> 9ん9あ9んx
gsub(pattern, hash) -> String
文字列中の pattern にマッチした部分をキーにして、hash を引いた値で置き換える
hash = {'b'=>'B', 'c'=>'C'}
p "abcabc".gsub(/[bc]/){hash[$&]} #=> "aBCaBC"
p "abcabc".gsub(/[bc]/, hash) #=> "aBCaBC" 直交性の権化とも言えるJavaのライブラリがいいかといえば、そうとも言えないわけで
バランスって大事だよね キャプチャとかグループ参照とかそのへんの問題だと聞いた
ブロック引数じゃないと先に評価されちゃう ブロック使わないと正規表現による置換が全て表現できないとわかった時点で第2引数廃止するべきだったってのは、
まあその通りではあるにはあるのだけども んなこというのは、Ruby者だけやろ。
ふつうは、使い分けりゃいいんだよ。
まあ、他の言語にさんざケチをつけまくったわけだから、Rubyにもケチをつけんとな。
どうでもいい改善のために、後方互換を壊すのはクソ過ぎだが。 最近、Rubyで簡単に稼げたとうたって謎の講座を売りつけようとしてるやつがえっらい増えてんな
HTMLで稼げた系の方が遥かに多いものの、SNSにも動画サイトにもすげえ数あるわ
情報商材屋もアフィリエイトや仮想通貨ネタじゃ食ってけなくなってHTMLネタや延いてはRubyネタまで来たんだろか? Cygwinでruby-test-unitを入れたら/usr/share/gems/にインストールされた。
bundle exec ruby hoge.rbとかするとtest-unitがないって言われる。
gem envするとGEM PATHSに/usr/share/gems/がはいってる。
bundle envするとGem Pathに/usr/share/gems/が入ってる。
bundle exec gem envするとGEM PATHに/usr/share/gems/が入ってない。
bundler使いつつ/usr/share/gems/にあるtest-unitを使うにはどうするのが一番スマート? Windows では、Ruby Installer のMSYS2 を使うのでは?
漏れは、MSYS2を入れてない(ポータブル版を使っている)から、
web socket などはコンパイルできないけど
64ビットOS で、Ruby 2.4/2.5 なら、
C:\Ruby24-x64
C:\Ruby25-x64
2.6 は、まだ使わず、1年は様子を見た方がよい windows で ruby はマジでお薦めしない
四の五の言わず VM 入れろ WSLは、2でかなり様変わりするようやな。。。
素人はまだしばらく様子を見てたほうがエエんちゃう? もうとっくに様子を見る次期は終わってるよ。
WSLは十分実用になる windowsでそこまでやりたいか?
特にRubyを使うメリットゼロだろ
素直にlinux使えよって思う >>375
WSLとWSL 2は共存可能
https://news.mynavi.jp/article/20190508-820096/
> MicrosoftはWSL 2は通常のアップデートの中で提供し、WSLとWSL 2の共存も可能だとしている。
WSL2はまだでてないし、様子見というのはわかる。
だがWSLは様子見の段階は終わってる。
WSL2は様子見してても、WSLを使わない理由はない
WSL2はWSLを改善するのが目的なので、様子見の段階は有るにしろ
最終的にはWSLよりも良いものになる
今はWSLを使えばよい。WSL2が実用レベルだとわかったら乗り換えれば良い 素人は、状況が落ち着いてから乗っかればいいんだよ。 漏れは、Windows 10 で、Ruby 2.4 を、C:\Ruby24-x64 に入れてる
同時に、WSL, Ubuntu16.04 で、Ruby 2.3を入れてる。
Ubuntu18.04 なら、さらに、Ruby のバージョンも上がっているかも
ただし、1-liner を書く際、Linux では、これで動く。
ls | ruby -ne 'puts $_.center(20, "-")'
一方、Windows では、" でバグるから、
ls -name | ruby -ne 'puts $_.center(20, %Q("-"))'
"-" の部分を、Ruby の% 記法で囲んで、%Q("-") としないと正常に動かない
%, %Q で、ダブルクォーテーションをエスケープできる。
\"-\" >>376
みんなコードを書くのはMac、実行がLinuxってのが普通になっちゃってるからな
Windows版は、「高卒用パソコンなんてサポートしてどうするの」ぐらいの扱いがされてる >>379
> 一方、Windows では、" でバグるから、
WSLで動かしてるけど、Linuxと同じように使えるよ? >漏れは、Windows 10 で、Ruby 2.4 を、C:\Ruby24-x64 に入れてる
って言ってるやんけ >>379
では、
これは、Windows 10, WSL, Ubuntu16.04 上でやった。
ls | ruby -ne 'puts $_.center(20, "-")'
一方、Windows 上のPowerShell(PS) では、" でバグるから、 %Q("-") が必要。
ls -name | ruby -ne 'puts $_.center(20, %Q("-"))'
つまり、bash, PS など、シェルの種類によって、書き方を変えなければならない
まあ、ls, ls -name とか、他の部分も異なるけど だから、Windowsを使うのを止めれば、すべて解決だよ。 WindowsでWSLを使ったら全部解決した。ワロタ
MSすごいな。 ruby が何か努力した訳ではないな
M$ が頑張ってくれただけ 初心者すぎてすみませんがprogateのrubyを2回やり終えたんですが
次は何やるのがお勧めでしょう?
同じくprogateのruby on railsに進むべきか
たのしいrubyや3ステップで学ぶruby入門などの書籍を読むべきか
あるいは他に何かありますでしょうか? >>390
俺と一緒にRubyMotionをやらないか この3冊を読む。
たのしいRuby 第6版、2019/3/19
Effective Ruby、2015
改訂2版 Ruby逆引きハンドブック、2018/8/28
「たのしいRuby」だけ読んでも、そこそこプログラミングできる!
Linux の基本コマンドを30ぐらい見て、
1-liner とか、パイプラインのフィルターでも作ってみれば?
他には、Enumerable の文書で、どういう機能があるか理解する 例えばNet::HTTPみたいな::がある場合のautoloadってどう書けばいいの?
現時点ではautoload :Net,'net/http'みたいにしてるんだけど、
これだとNet::SMTPを参照しても読み込んじゃうよね キーワードなのかKernel関数なのかさっぱりわからないんですが見分け方を教えてください
rubyの場合は動的直接拡張もあるのでパンクしてやばいです 初心者にも満たない学習者です
他人様のコードで申し訳ないんですが
(ttp://2d6.parasite.jp/rgss/script/restart.html)
class Scene_Title
(中略)
def read_save_data(file)
(中略)
characters = Marshal.load(file)
(中略)
Graphics.frame_count = Marshal.load(file)
(中略)
$game_variables = Marshal.load(file)
$game_self_switches = Marshal.load(file)
(中略)
end
end
これ、どう読んで解釈したら良いんでしょうか
Marshal.load()ってunserializeやってくれる関数ですよね
何回も"file"を読んで、同一の内容を、それぞれ違う変数・グローバル変数に入れてる?
それとも同一の内容じゃない?読むのは1回だけ?
OSやversionはすみませんわかりません
ツクール関係だとは思うのですが、ツクール関係独特のものなのかどうかもわからず シリアライズされてるなら同名の変数にキチっと入れてくれるんじゃないの 同じファイルを何回も読むのは、無駄
でも中略部分で、そのファイルに書き込んで、ファイルの内容を変えているなら、
再読み込みする意味があるけど
解説が付いていない、他人のソースコードを分析しない方がよい。
書いた人は、プログラムの仕様を知っているけど、
読む人は、仕様を知らないから、かなりの時間を損する
仕様(質問)からプログラム(答え)は書けるけど、
プログラム(答え)から仕様(質問)を把握するのは、極めて難しいから
つまり、なぜこういうプログラムになったのか、の「なぜ」を解明するのが極めて難しい
物理現象と同じ。
法則から現象は推測できるけど、現象から法則を導き出すのは、極めて難しい
>>396
VSCode でも、キーワードなどは色分けされる ありがとうございます
特に中略部分でfile側が変化しているということはないようです
つまり、暗黙的に何か、Marshal.load()が左辺の変数名に拘束されるとか
Marshal.load()のfileオブジェクトからの読み取りがスタック的になってるとか
そういうのは無くて、普通に読んでいって大丈夫ということなんですね
>>402
おっしゃることもわかるんですけど
自分は作法が全然わからない時は特に、リファレンス見つつ他人のコードを見つつ勉強が効率良くて 他人のクソコードを分析しても、時間の無駄。
普遍的な知識を得られない。
他人の仕様を推測するだけ
この3冊を読んで、プログラミングのお題スレの問題を解いた方が、力がつく。
Sinatra, Rails をやっても良いし
こういう勉強が普遍的で、他言語にも応用できるし、自分で考えるから成長できる
他人のソースコードを持ってきて、これはどんな事をやってるのですか? って質問する者が多いけど、
他人は仕様を知ってるけど、質問者は仕様を知らないから、極めて不利
一方、プログラミングのお題スレでは、仕様が与えられているだろ。
こういう場合には、他人のコードを見ても、意味がわかる。
だから勉強になる!
プログラミングとは、仕様からプログラムを作るもので、
プログラムから仕様を解明するものじゃないので、時間を失うだけ!
特に初心者にとっては、良い本などで、体系的に浅く学ぶのを勧める
推薦書
たのしいRuby 第6版、2019/3/19
改訂2版 Ruby逆引きハンドブック、2018/8/28
Effective Ruby、2015
バグが起きにくい、安全で効率的なコーディングと、間違いやすいポイントを解説 いつものキチガイを相手にするつもりはないけど、質問者が誤解しないようにコメント
仕事のプログラミングだと基本的にソース眺めてる時間のほうが長いよ
ましてRubyも今や落ち目で便所掃除の仕事ばかり増え、全く新しいものを作る機会は減る一方だ >>405
ないよ
そんなものがあったら3日でBANだ >>403
参考にするのなら、別のソースにしたほうがエエんちゃう? 開発/運用側に立ってるとネットなんて
宣伝と、自作自演・サクラと、ユーザ奪い合い荒らしと
この3つばっかりって身にしみてるもんですし
>>408
たまたまMarshal関係で調べてて出くわしたもので
rubyがこういう(>>399)書き方・使い方がデフォな言語なのかどうかを
知りたかったというのがほとんどなので ■ このスレッドは過去ログ倉庫に格納されています