sleep関数とは?プログラムの待機処理をClaude Codeで活用する|C言語・Python対応版
この記事の内容
「Claude Codeが作った自動化スクリプトに time.sleep(2) という行があるが、なぜ待機するのか?削除してはいけないのか?」——こんな疑問を持ったことはありませんか?
プログラムのsleep関数(待機処理)は、自動化スクリプトやバッチ処理で「なぜここで止まるのか」が分かりにくい機能の一つです。しかし、APIのレート制限(利用制限)への対処やサーバー負荷分散において、sleep関数を削除すると処理が壊れることが多くあります。
この記事では、C言語のsleep()usleep()から、Claude Codeがよく生成するPythonのtime.sleep()まで、非エンジニアの方が「何をしているのか」を読み取れるように解説します。
この記事で得られること:
sleep・usleep・Sleep(Windows)の単位と違いtime.sleep()——Claude Codeが使う形式の読み方01 BASICS sleep関数の基本——プログラムを「待機」させる仕組み 一言で言うと「プログラムの実行を指定時間だけ停止する命令」
sleep関数(スリープ関数)は、プログラムの実行を指定した時間だけ一時停止させる命令です。人間が「3秒待ってから次の作業をして」と指示するのと同じです。
| 概念 | 日常の例え | プログラムでの動作 |
|---|---|---|
| sleep(3) | タイマーを3秒セット、鳴ったら続行 | 3秒間処理を停止、経過後に次の行を実行 |
| time.sleep(0.5) | 「ちょっと待って」(半秒) | 0.5秒間処理を停止 |
| Sleep(1000) | (ミリ秒=1/1000秒)1秒待機 | 1000ミリ秒=1秒間処理を停止 |
📚 用語解説
sleep関数(スリープ関数):プログラムの実行を指定した時間だけ一時停止する命令。C言語・Python・JavaScript・Javaなど全ての主要言語で提供されている。引数(カッコ内の数値)に指定した秒数・ミリ秒・マイクロ秒が経過すると、プログラムは次の処理に進む。CPU処理を他のプロセスに譲るためシステム負荷が軽減される。
sleep関数がない世界では、プログラムは全ての処理を「最速・無停止」で実行します。これは人間が夜も寝ずに仕事し続けるようなもので、短期的には効率的に見えますが、以下の問題が起きます。
sleep中はCPUを他のプロセスに譲るため、実際にはシステム全体のパフォーマンスが向上します。「待機中」とはいえ、コンピュータ全体でみると他の作業を並行して進められる状態です。一方、while(1){}のような「ビジービープ待機」(CPU をフル稼働させながら待つ)はパフォーマンスを大幅に下げるため、sleep関数を使う方が正しい設計です。
02 C LANGUAGE SLEEP C言語のsleep・usleep・Sleep(Windows)の違い 秒・マイクロ秒・ミリ秒の3種類と使用するヘッダの違い
C言語では、待機時間の「単位」によって使う関数が異なります。また、OS(Windows/Linux/Mac)によっても使用できる関数が違います。
| 関数名 | 単位 | ヘッダ | 動作OS | 例(3秒待機) |
|---|---|---|---|---|
| sleep(n) | 秒(整数) | Linux/Mac | sleep(3) | |
| usleep(n) | マイクロ秒(μs) | Linux/Mac | usleep(3000000) | |
| Sleep(n) | ミリ秒(ms) | Windowsのみ | Sleep(3000) |
📚 用語解説
マイクロ秒(μs / マイクロセカンド):1秒の100万分の1の時間単位。usleep(1000000)が1秒待機を意味する。C言語のusleep()で使用。Pythonのtime.sleep()は秒単位で小数が使えるため、0.001秒(1ミリ秒)の待機は time.sleep(0.001) と書ける。精密なタイミング制御が必要な場合に使用する。
📚 用語解説
ミリ秒(ms / ミリセカンド):1秒の1000分の1の時間単位。Sleep(1000)が1秒待機を意味する(Windows)。Webのレスポンスタイムや動画のフレームレート(1秒30フレーム≒33ms/フレーム)で日常的に使われる単位。
2-1. C言語でのsleep関数の書き方
C言語 sleep関数の基本(Linux/Mac)
#include <stdio.h>
#include <unistd.h> // sleep・usleepを使うために必要
int main() {
printf("処理開始\n");
sleep(3); // 3秒待機(秒単位)
printf("3秒後\n");
usleep(500000); // 0.5秒待機(マイクロ秒: 500,000μs = 0.5秒)
printf("0.5秒後\n");
return 0;
}
Windows向けSleep関数(ミリ秒単位)
#include <stdio.h>
#include <windows.h> // Windowsでは windows.h を使う
int main() {
printf("処理開始\n");
Sleep(3000); // 3000ミリ秒 = 3秒待機(先頭が大文字Sに注意)
printf("3秒後\n");
return 0;
}
C言語にはLinux/Mac用の「sleep()」(小文字)とWindows用の「Sleep()」(大文字)の2種類があります。WindowsでLinux向けのsleep()を使うとコンパイルエラーになります。また単位が違うため、sleep(3)は3秒、Sleep(3)は3ミリ秒(= 0.003秒)という全く異なる結果になります。
なぜ3つの関数があるのか——それは歴史的経緯と、待機時間の精度(粒度)が異なるためです。秒単位のsleep()では0.5秒待機ができませんが、usleep()やtime.sleep()(Python)では小数秒の待機が可能です。
03 PYTHON SLEEP Pythonのtime.sleep()——Claude Codeがよく使う形式 小数秒もシンプルに指定できるPythonの時間制御
Claude Codeが生成する業務自動化スクリプトのほとんどはPythonで書かれており、時間待機にはtime.sleep()が使われます。C言語の3種類と違い、秒単位で小数も指定できるためシンプルです。
Python time.sleep()の基本
import time # timeモジュールをインポート(使えるようにする)
print("処理開始")
time.sleep(3) # 3秒待機
print("3秒後に続行")
time.sleep(0.5) # 0.5秒待機(C言語のusleepより直感的)
time.sleep(0.1) # 0.1秒待機(100ミリ秒)
print("完了")
📚 用語解説
timeモジュール(Python):Pythonでtime.sleep()やtime.time()などの時間関連機能を使うために読み込む(import)モジュール(機能の集まり)。「import time」の1行を書くだけで使えるようになる。sleep以外にも時刻取得(time.time())や日付フォーマット機能を持つ。
3-1. Claude Codeが生成するAPIリクエストスクリプトでのsleep
Claude Code生成パターン(APIの連続リクエスト時)
import time
import requests # HTTPリクエスト(外部APIを叩く)ライブラリ
商品リスト = ["商品A", "商品B", "商品C", "商品D", "商品E"]
for 商品 in 商品リスト:
# APIにリクエストを送る
response = requests.get(f"https://api.example.com/products/{商品}")
print(f"{商品}のデータ取得完了: {response.status_code}")
time.sleep(1) # ← ここがsleep! 1秒待機してから次の商品へ
このコードの「time.sleep(1)」を削除するとどうなるか——5件のリクエストが1秒以内に全部発火します。多くの外部APIは「1秒間に5回以上のリクエスト禁止」のようなレート制限があり、制限を超えるとアクセス拒否(HTTP 429エラー)が返ってきて処理が止まります。
04 COMPARISON sleep関数の比較表——言語・単位・使い分け 全言語・全関数の一覧で迷わない
| 言語/OS | 関数名 | 時間単位 | 例(1秒待機) | 小数指定 | ヘッダ/モジュール |
|---|---|---|---|---|---|
| C(Linux/Mac) | sleep(n) | 秒(整数のみ) | sleep(1) | 不可 | #include |
| C(Linux/Mac) | usleep(n) | マイクロ秒 | usleep(1000000) | 実質可能 | #include |
| C(Windows) | Sleep(n) | ミリ秒 | Sleep(1000) | 実質可能 | #include |
| Python | time.sleep(n) | 秒(小数可) | time.sleep(1) | 可能 | import time |
| JavaScript(Node.js) | setTimeout(fn, n) | ミリ秒 | setTimeout(fn, 1000) | 実質可能 | 組み込み |
| JavaScript | await sleep(n)ms | ミリ秒(自作) | — | 実質可能 | ライブラリ依存 |
実務でClaude Codeを使う場合、Pythonのtime.sleep()が最も多く登場します。秒単位で小数も使えるため、「APIの制限に合わせて0.5秒待機」「処理ログを確認しやすいよう2秒インターバル」などの調整がしやすいためです。
・APIのレート制限が「1秒5リクエスト」なら sleep(0.2)(0.2秒ごと)で安全圏
・安全マージンを取りたい場合は制限の2〜3倍の間隔(1秒5回制限→0.5秒間隔)
・明確な制限が不明なら sleep(1)(1秒)から始めて、エラーが出なければ調整
・ローカルの処理間隔(DB操作・ファイルI/O)なら sleep(0.1)程度で十分なことが多い
05 BUSINESS USE CASES 業務自動化でsleepが必要になる場面——APIレート制限対策 削除すると壊れる「sleep」の実際の役割
経営者・マネージャーがClaude Codeで業務自動化を進める際、sleepが必要になる代表的な場面を整理します。
タスク開始
リスト100件など
API叩く
DB更新
ファイル操作
指定時間待機
(レート制限対策)
ループして
繰り返す
結果レポート
Slack通知
5-1. sleepが必要になる代表的なビジネスシーン
| 業務シーン | なぜsleepが必要か | 適切な待機時間 |
|---|---|---|
| 顧客リストへの一括メール送信 | メールサーバーの同時送信制限(スパム防止) | 0.5〜2秒/件 |
| ECサイトの在庫・価格を自動取得 | 外部ECサイトのスクレイピング制限 | 1〜3秒/リクエスト |
| Google Analytics / GSCのデータ取得 | Google APIのレート制限(1分あたり上限あり) | 0.5〜1秒/リクエスト |
| freeeやkintoneへの一括データ書き込み | クラウドサービスのAPI制限 | 1〜2秒/リクエスト |
| Slackへの一括通知送信 | Slack APIのレート制限(1秒1メッセージ推奨) | 1秒以上/メッセージ |
「スクリプトが遅いのでsleepを全部削除した」→ 翌日にGoogleのAPIキーがBANされて復旧に3日かかった——という事例があります。特にGoogleやSlack、Stripe等のAPIはレート制限を超えると自動でアクセス制限がかかり、制限解除まで時間がかかります。sleepは「安全弁」であり、削除前に必ずAPI制限を確認してください。
📚 用語解説
レート制限(Rate Limit / レートリミット):外部API(GoogleやSlack等のサービス)が「1秒間・1分間・1日に何回まで」と設定しているリクエスト数の上限。制限を超えると「HTTP 429 Too Many Requests」エラーが返ってきて処理が止まる。Claude Codeが生成するスクリプトのsleep関数は主にこの制限への対処として挿入される。
06 CODE READING Claude Codeが生成するsleep付きバッチスクリプトの読み方 sleepがあるコードを見たときの解釈ガイド
Claude Codeに業務自動化を依頼すると、以下のようなパターンでsleepが登場します。読み方と意図を整理します。
| コードのパターン | 意味と意図 |
|---|---|
| time.sleep(1) | 1秒待機。最も一般的なAPIレート制限対策。 |
| time.sleep(0.5) | 0.5秒待機。1秒より速いが制限をある程度守るバランス型。 |
| time.sleep(60) | 60秒(1分)待機。1分当たりの制限があるAPIの次の枠を待つ処理。 |
| time.sleep(rate_limit) | 変数でsleep秒数を指定。設定ファイルで変更可能な設計。 |
| time.sleep(retry_after) | APIのエラーレスポンスが「X秒後に再試行」を返した場合の自動対応。 |
エラー時に自動リトライするパターン(Claude Codeがよく生成)
import time
def api_request_with_retry(url, max_retries=3):
for attempt in range(max_retries):
try:
response = requests.get(url)
if response.status_code == 429: # レート制限エラー
wait_time = int(response.headers.get('Retry-After', 60))
print(f"レート制限: {wait_time}秒後にリトライ")
time.sleep(wait_time) # APIが指定した秒数待機
continue
return response.json()
except Exception as e:
print(f"試行{attempt+1}失敗: {e}")
time.sleep(2 ** attempt) # 2秒→4秒→8秒と指数的に増加
return None
このパターンの`time.sleep(2 ** attempt)`は「指数バックオフ」と呼ばれる手法で、失敗するたびに待機時間を倍にします(2秒→4秒→8秒)。これもClaude Codeがよく生成するパターンなので覚えておくと便利です。
APIを叩く
200 OK
→ 結果取得
レート制限
→ sleep待機
リトライ
最大3回まで
失敗ログ
07 CONCLUSION まとめ|時間制御の理解が業務自動化の品質を上げる sleep関数を知ることでコードレビューと修正指示の質が向上する
この記事では、C言語のsleep/usleep/SleepからPythonのtime.sleep()まで、プログラムの待機処理について解説しました。
「このスクリプト、なぜここで止まるの?」と感じたとき、それはほぼ確実にAPIや外部サービスへの安全配慮です。sleepの仕組みを知ることで、Claude Codeへの修正指示が「もっと速く」から「APIレート制限の範囲内で最速にして」という具体的・適切な指示に変わります。
業務自動化スクリプトの設計・レビューをAI鬼管理が支援
「Claude Codeでバッチ処理を作ったが、sleepの秒数が適切か分からない」「APIのレート制限内で安全に動かすスクリプトを作りたい」——そんな課題をAI鬼管理の導入支援でサポートします。
NEXT STEP
この記事の内容を、あなたのビジネスで
実践してみませんか?
AI活用を自社で回せるようになりたい方へ
AI鬼管理
Claude Code・Cowork導入支援から業務設計・社内浸透まで実践ベースで伴走。「自社で回せる組織」を90日で作る経営者向けトレーニング。
よくある質問
Q. time.sleep()を使うとプログラム全体が止まってしまいますか?
A. 通常のtime.sleep()はそのスレッド(実行単位)だけを止めます。Pythonのマルチスレッドやasync/awaitを使った並列処理の場合は、sleep中に他の処理を続けることができます。Claude Codeが生成するシンプルなバッチスクリプトでは「1件ずつ処理→sleep→次の件」という流れが一般的で、この場合はsleep中は他の処理も止まります。
Q. sleep秒数を0にしても大丈夫ですか?
A. time.sleep(0)は技術的には動作しますが、「OSに他のプロセスへCPUを一瞬譲る」程度の効果しかありません。実質的には待機なしと同じで、APIレート制限対策にはなりません。制限内に収めたい場合は適切な秒数(例:1秒5回制限なら0.2秒以上)を設定してください。
Q. C言語のusleep()で1.5秒待機する書き方は?
A. usleep(1500000)です。1マイクロ秒(μs)= 0.000001秒なので、1.5秒 = 1,500,000マイクロ秒です。Pythonならtime.sleep(1.5)の方が直感的で分かりやすいです。
Q. Windowsのコマンドラインでsleepを実行する方法はありますか?
A. Windowsのバッチファイル(.bat)では「timeout /t 3 /nobreak」コマンドで3秒待機できます。PowerShellでは「Start-Sleep -Seconds 3」または「Start-Sleep -Milliseconds 3000」が使えます。Claude Codeに「Windowsのバッチ処理に待機を入れて」と指示すると、これらを自動で使用します。
Q. sleep中にCtrl+Cで処理を止めることはできますか?
A. できます。sleep中にCtrl+Cを押すと、PythonではKeyboardInterruptという割り込み(中断)が発生してスクリプトが終了します。バッチ処理の途中で止めたい場合は有効な方法ですが、途中まで処理したデータの整合性に注意が必要です。
Q. JavaScriptのsetTimeout()はtime.sleep()と同じですか?
A. 概念は似ていますが動作が異なります。time.sleep()はその場で処理を止めて待ちますが、setTimeout()は「X ミリ秒後にこの関数を実行して」という予約で、予約後の処理は止まらず続きます。JavaScriptでtime.sleep()と同じ動作をするには async/await + Promise を組み合わせたパターンが必要です。Claude Codeはこのパターンも自動で生成します。
Q. APIのレート制限(429エラー)が出た場合の復旧方法は?
A. 多くのAPIでは、しばらく(数秒〜数分)待機すると制限がリセットされます。レスポンスヘッダの「Retry-After」に待機秒数が記載されている場合はその秒数待ってから再実行します。Claude Codeに「429エラーが出た場合に自動でリトライする処理を追加して」と指示すると、指数バックオフ付きのリトライ処理を生成してくれます。
Claude Codeで業務自動化を90日で叩き込む
経営者向けの伴走型パーソナルトレーニング
Claude Code を業務に落とし込む
専門研修コース一覧
受講者本人の業務を題材に、「使いこなせる」状態になるまで伴走する研修プログラム。1対1特化型・ハンズオン・法人講座の3コースを展開中。業務特化・実装まで踏み込むタイプのClaude Code研修です。
研修コース一覧を見る →AI鬼管理へのお問い合わせ
この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。




