Ruby sleepについて知る(使いどころ、使い方、ms)

こんにちは! フリーエンジニアの長瀬です。

今回はRubyのsleepについて解説していきます!sleepってちょっと高度な技術なイメージを持たれていませんか?

今回はそんなsleepのイメージを払拭するために

  • sleepの使い方
  • sleepの使いどころ

という基本的な内容から、

  • sleepをmsで使う
  • ランダム秒sleepする

といった応用的な内容についても解説していきます。

sleepの使い方

ではまずsleepの使い方について見ていきましょう!sleepは引数に秒数を渡すことによって、その秒数分処理を停止することができます。例えば一秒ごとに数字を出力するというプログラムを書きたいときは以下のようになります。

for i in 1..10
  sleep(1)
  print i
end
[実行結果]
12345678910

sleepに秒数、今回の場合1を渡すことで、処理毎に一秒待つプログラムを作ることができました。実際に自分でプログラムを動かしてみると一秒ごとに出力されるのを確認できるので、必ず自分で動かしてみてくださいね。

sleepの使いどころ

sleepの使い方がわかったところで、sleepの使いどころについて解説していきます。sleepの使いどころは大きく分けて二つあります。

特定の秒数毎に処理を行いたい時

一つ目は「特定の秒数毎に処理を行いたい時」です。さきほどのプログラムのようにsleepの指定秒数間待つという処理を利用して、特定秒数待つプログラムを書くイメージです。

例えば

  • 2秒毎に標準出力を行う
  • 10秒毎に標準出力を行わせる

などが挙げられます。

処理を連続で送ると不都合が起きる時

二つ目は「処理を連続で送ると不都合が起きる時」です。Rubyではwebサイトにリクエストを送るプログラムを作ることができます。そうしたプログラムで連続でアクセスしてしまうと、相手のサーバーに負荷を与えてしまう状況も考えられます。

そうした時に、処理の間にsleepを挟むことで、相手のサーバーに配慮したプログラムを書くことができ、それが一つのマナーとなっています。

あなたがもし「API」や「スクレイピング」という類のプログラムを作成しようとしているときは、必ずsleepを考慮して書くようにしましょう!スクレイピングや、APIについての知識が浅いと感じている方は以下の記事を参考にしてください。


APIとは何か?初心者が知っておくべき活用法とコツまとめ!
更新日 : 2020年7月28日

Ruby on RailsでAPIを作成する時の注意点、参考記事まとめ
更新日 : 2019年5月22日

sleepをmsで使う

sleepの単位は秒数ですが、「ミリ秒(ms)」で使いたいという場面もあると思います。こうしたときは引数に少数を与えることで実現することができます。

例えば

sleep(0.01)

と書けば10ミリ秒のsleepを行うことができます。もちろん、以下のようにも使用できます。

for i in 1..10
  sleep(0.1)
  print i
end
[実行結果]
12345678910

ミリ秒の精度については、osの割り込み速度に依存します。高い精度でsleepを使用しなければいけない場面ではOSの割り込み速度についても調べるようにしてください。

ランダム秒sleepする

スクレイピングの場合、毎回同じ秒数で特定の処理をしているとサーバーにプログラムを検知されてしまい不正リクエストとして扱われてしまうことがあります。

そんなときはランダム秒sleepすることで、回避できることもあります。一つのテクニックとして覚えておくと、役立つ場面に今後出会うでしょう。ではサンプルコードで確認していきましょう。

random = Random.new

for i in 1..10
  sleep(random.rand(2.0)+2) #2〜4秒待つ
  print i
end
[実行結果]
12345678910

小数点をランダムで扱う場合、rubyではRandomクラスのインスタンスメソッドrandを利用します。この場合はrandom.rand(2.0)+2で2〜4秒の乱数を生成して、その秒数sleepを実行しています。

randの中身を変えれば、好きな秒数間隔で乱数を発生させられるので、秒数を変更したい場合はこの部分を調整してください。rubyで乱数を扱う方法は以下の記事にまとめられているので、ぜひ参考にしてみてくださいね。

まとめ

いかがでしたでしょうか?この記事では、rubyのsleepを解説しました。sleepを使うことで、簡単に処理を止めることができるというのがわかっていただけたでしょうか。

また、APIやスクレイピングなどを利用する際は、必ずsleepの使い所を考えて適度に使用するようにしましょう。もしsleepについて忘れてしまったらこの記事を確認してくださいね!

LINEで送る
Pocket

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

長瀬来

長瀬来

Unityを使ったiOSアプリのリリース、フリマサイト運営の経験があります。

経験した言語はC、C#、Javascript、R、Python、Ruby、PHPなど

言語が好きで、英語や中国、ドイツ語を勉強しました。
将来的には海外で生活したいです。

現在はRuby on Rails5やCocos2dxの勉強を主にしています。

ライターとしては
できるだけ初心者にわかりやすい文章になるように心がけています。

趣味は語学、読書です。