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とは?意味や仕組み、活用するメリットもわかりやすく解説
更新日:2024年9月24日

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

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について忘れてしまったらこの記事を確認してくださいね!

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次