{"id":80099,"date":"2024-04-02T09:01:36","date_gmt":"2024-04-02T00:01:36","guid":{"rendered":"https://freelance.indieverse.co.jp/media/?p=80099"},"modified":"2025-11-01T16:34:33","modified_gmt":"2025-11-01T07:34:33","slug":"ruby-sleep","status":"publish","type":"post","link":"https://freelance.indieverse.co.jp/media/programming/ruby/ruby-sleep","title":{"rendered":"【Ruby】 sleepで一時停止する方法についてサンプルコードと共に解説します！"},"content":{"rendered":"<p>この記事では、</p>\n<ul>\n<li>Rubyのsleepメソッドの基本的な使い方を知りたい</li>\n<li>プログラムの中でsleepを使った一時停止の具体例を見たい</li>\n<li>sleepメソッドをエラーハンドリングで活用する方法を知りたい</li>\n<li>sleepを使った効果的なプログラム処理の方法を学びたい</li>\n<li>sleepメソッドの応用テクニックや注意点について理解したい</li>\n</ul>\n<p>という悩みを抱えている向けに、</p>\n<ul>\n<li>Rubyにおけるsleepメソッドの基本的な書き方</li>\n<li>sleepメソッドを利用したループ処理の例</li>\n<li>sleepメソッドの効果的な使いどころと応用テクニック</li>\n</ul>\n<p>について解説していきたいと思います。</p>\n<h2>Rubyにおけるsleepメソッドの基本的な書き方</h2>\n<p>Rubyにおいて、プログラムの実行を一時的に停止したい場合に便利なのが<code>sleep</code>メソッドです。このメソッドは指定した秒数だけプログラムの処理を停止します。使い方は非常にシンプルで、次のように記述します。</p>\n<p><code></code></p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>puts \"プログラムを開始します\"\r\nsleep(2) # 2秒間待機\r\nputs \"2秒経過しました\"</code></pre>\n</div>\n<p>&nbsp;</p>\n<p>実行結果は以下の通りです。</p>\n<p><code></code></p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>プログラムを開始します\r\n2秒経過しました</code></pre>\n</div>\n<p>&nbsp;</p>\n<p>このように、<code>sleep</code>の後にカッコで囲んだ数値を指定することで、その数値分（秒単位）プログラムの実行を一時停止させます。</p>\n<h2>sleepメソッドをミリセコンド（ms)で利用する方法</h2>\n<p>しかし、sleepメソッドはデフォルトで秒単位で時間を受け取ります。したがって、ミリ秒単位でスリープさせたい場合、秒単位への変換が必要になります。</p>\n<p>ミリ秒単位でsleepを使用するには、秒に変換する必要があります。1秒は1000ミリ秒に相当するため、ミリ秒単位で待ち時間を指定するには、ミリ秒を1000で割って秒単位に変換します。</p>\n<p>例えば、100ミリ秒待ちたい場合は、以下のように記述します。</p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>sleep(100.0 / 1000.0)</code></pre>\n</div>\n<h2>sleepメソッドを利用したループ処理の例</h2>\n<p><code>sleep</code>メソッドはループ処理と組み合わせて、定期的に特定の処理を行いたい場合にも有用です。以下は、1秒ごとにループを回しながら処理を行うサンプルコードです。</p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>5.times do |i|\r\n   puts \"#{i+1}秒経過しました\"\r\n   sleep(1)\r\nend</code></pre>\n</div>\n<p>&nbsp;</p>\n<p>実行結果は以下のようになります。</p>\n<p><code></code></p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>1秒経過しました\r\n2秒経過しました\r\n3秒経過しました\r\n4秒経過しました\r\n5秒経過しました</code></pre>\n</div>\n<p>このように、ループの各サイクルで<code>sleep</code>を用いることで、一定時間ごとに処理を実行できます。</p>\n<h2>エラー対応におけるsleepメソッドの利用</h2>\n<p><code>sleep</code>メソッドは、ネットワークリクエストなど、失敗した場合にリトライを行いたい処理にも利用できます。たとえば、外部APIへのリクエストが一時的に失敗した場合に、少し時間を空けてから再度リトライしたい場合のコード例を紹介します。</p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>retry_count = 0\r\nbegin\r\n   # 外部APIへのリクエスト処理を想定\r\n   # ここでエラーが発生すると仮定\r\nraise \"リクエストエラー\"\r\n   rescue =&gt; e\r\n   puts \"#{e.message}、#{retrycount}回目のリトライ\"\r\n   sleep(2) # 2秒待ってリトライ\r\n   retrycount += 1\r\n   retry if retry_count &lt; 3\r\nend</code></pre>\n</div>\n<p>このコードでは、リクエスト処理中にエラーが発生した場合、最大3回まで2秒間隔でリトライを試みます。<code>sleep</code>を利用することで、サーバーに負荷をかけずにリトライ処理を行えます。</p>\n<h2>sleepメソッドの効果的な使いどころ</h2>\n<h3>処理の一時停止が必要な場面</h3>\n<p><code>sleep</code>メソッドの最も一般的な利用例は、処理の一時停止が必要な場面です。例えば、ユーザーに読む時間を与えたいときや、外部APIのレート制限に引っかからないようにするために、処理を一時的に止める必要があります。</p>\n<p><code></code></p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>puts '読み込み中...'\r\nsleep(3) # ユーザーに読む時間を与える\r\nputs '完了!'</code></pre>\n</div>\n<p>このコードは、ユーザーに読む時間を与えるために3秒間プログラムを停止させる例です。</p>\n<h3>インターネットの遅延など外部要因への対応</h3>\n<p>インターネットの遅延やサーバーの処理速度など、外部要因による遅延への対応にも<code>sleep</code>メソッドは有効です。特に、繰り返し外部サービスにリクエストを送る際に、1つのリクエストが完了するまで少し待機するのに使用できます。</p>\n<p><code></code></p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>3.times do |i|\r\n   puts \"#{i+1}回目のリクエストを送信\"\r\n   # ここで外部サービスへのリクエストを想定\r\n   sleep(2) # サーバーの負荷を考え2秒待機\r\nend</code></pre>\n</div>\n<p>&nbsp;</p>\n<h3>連続した処理による負荷を避けるため</h3>\n<p>連続して処理を実行すると、特に大量のデータを処理する場合や、外部APIへのリクエスト時にサーバーに負荷をかけすぎることがあります。このような場合に、適宜<code>sleep</code>を挿入することで、システムに優しい設計が可能になります。</p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>data.each do |item|\r\n   process(item) # データ処理を行う\r\n   sleep(1) # サーバーに負荷をかけすぎないように待機\r\nend</code></pre>\n</div>\n<p>&nbsp;</p>\n<p>このように、データ処理の各ステップの間に<code>sleep</code>を入れることで、サーバーやシステムへの負荷を減らします。</p>\n<h2>sleepメソッドを使った応用テクニック</h2>\n<h3>タイマー機能の実装例</h3>\n<p>Rubyで簡易的なタイマー機能を実装する場合に、<code>sleep</code>メソッドは非常に役立ちます。ユーザーから指定された時間だけ処理を待機させ、その時間が過ぎたら通知するような機能です。</p>\n<p><code></code></p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>puts \"タイマーをセットします。秒数を入力してください:\"\r\nseconds = gets.to_i\r\nputs \"#{seconds}秒後に通知します。\"\r\nsleep(seconds)\r\nputs \"時間です!\"</code></pre>\n</div>\n<p>&nbsp;</p>\n<h3>非同期処理や並列処理における利用</h3>\n<p>Rubyでは<code>Thread</code>クラスを用いて簡易的な非同期処理や並列処理を行うことができます。<code>sleep</code>メソッドを使って、これらの処理の中で処理の一時停止を行うことが可能です。</p>\n<p>&nbsp;</p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-ruby\" data-lang=\"Ruby\"><code>thread1 = Thread.new do\r\n   3.times do |i|\r\n      puts \"Thread 1: #{i+1}回目の処理\"\r\n      sleep(1)\r\n   end\r\nend\r\n\r\nthread2 = Thread.new do\r\n   3.times do |i|\r\n      puts \"Thread 2: #{i+1}回目の処理\"\r\n      sleep(2)\r\n   end\r\nend\r\n\r\nthread1.join\r\nthread2.join</code></pre>\n</div>\n<p>このコードは、2つのスレッドを並行して実行し、それぞれのスレッドで異なる間隔で処理を停止させています。</p>\n<h2>sleepを使う際の注意点</h2>\n<h3>繰り返し処理の中でsleepを使うと処理が遅くなる可能性がある</h3>\n<p><code>sleep</code>メソッドは非常に便利ですが、繰り返し処理の中で使用すると、全体の処理時間が著しく遅くなる可能性があります。特に、短い時間で多くのタスクを処理したい場合は、<code>sleep</code>の使用に注意が必要です。</p>\n<p>適切な利用方法を考え、プログラム全体のパフォーマンスに悪影響を及ぼさないようにしましょう。必要な場合はタスクの実行優先度を変更するなど、他の方法も検討してみてください。</p>\n","protected":false},"excerpt":{"rendered":"<p>Rubyのsleepメソッドを基礎から解説。ミリ秒対応、ループ・リトライの実例、非同期やタイマー等の応用と注意点、効果的な使いどころもサンプル付きで紹介します。</p>\n","protected":false},"author":105,"featured_media":80039,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[190],"tags":[286],"class_list":["post-80099","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ruby","tag-ruby"],"aioseo_notices":[],"meta_description":"Rubyのsleepメソッドを基礎から解説。ミリ秒対応、ループ・リトライの実例、非同期やタイマー等の応用と注意点、効果的な使いどころもサンプル付きで紹介します。","_links":{"self":[{"href":"https://freelance.indieverse.co.jp/media/wp-json/wp/v2/posts/80099","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https://freelance.indieverse.co.jp/media/wp-json/wp/v2/posts"}],"about":[{"href":"https://freelance.indieverse.co.jp/media/wp-json/wp/v2/types/post"}],"author":[{"embeddable":true,"href":"https://freelance.indieverse.co.jp/media/wp-json/wp/v2/users/105"}],"replies":[{"embeddable":true,"href":"https://freelance.indieverse.co.jp/media/wp-json/wp/v2/comments?post=80099"}],"version-history":[{"count":3,"href":"https://freelance.indieverse.co.jp/media/wp-json/wp/v2/posts/80099/revisions"}],"predecessor-version":[{"id":93441,"href":"https://freelance.indieverse.co.jp/media/wp-json/wp/v2/posts/80099/revisions/93441"}],"wp:featuredmedia":[{"embeddable":true,"href":"https://freelance.indieverse.co.jp/media/wp-json/wp/v2/media/80039"}],"wp:attachment":[{"href":"https://freelance.indieverse.co.jp/media/wp-json/wp/v2/media?parent=80099"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https://freelance.indieverse.co.jp/media/wp-json/wp/v2/categories?post=80099"},{"taxonomy":"post_tag","embeddable":true,"href":"https://freelance.indieverse.co.jp/media/wp-json/wp/v2/tags?post=80099"}],"curies":[{"name":"wp","href":"https://api.w.org/{rel}","templated":true}]}}