【2026年8月最新】Pythonのtimeモジュールで処理時間を計測する方法|非エンジニアでもClaude Codeでボトルネック診断ができる

【2026年8月最新】Pythonのtimeモジュールで処理時間を計測する方法|非エンジニアでもClaude Codeでボトルネック診断ができる

システム担当やエンジニアから「このバッチ処理、time.time()で計測してみたら想定より遅かったので原因を調べます」と報告を受けて、内心「そもそも何をどう計っているのか」がピンとこなかった経験はないでしょうか。

Pythonの標準ライブラリに含まれるtimeモジュールは、プログラムの処理にかかった時間を計測するための最も基本的な道具です。一見「開始時刻と終了時刻を引き算するだけ」の単純な機能に見えますが、実際には「どの関数を使うか」「どこからどこまでを計測するか」を誤ると、まったく的外れな数値を報告してしまう落とし穴がいくつも存在します。日次バッチが遅い、月次の請求書処理に時間がかかりすぎている、広告レポートの自動生成が重い——こうした「処理が遅い」という悩みの出発点には、必ずこの時間計測という地味な作業があります。

この記事では、非エンジニアの経営者・管理職の方でも仕組みを理解できるよう、業務の比喩を交えながらPythonのtimeモジュールを解説します。さらに後半では、Pythonの文法を一切知らない状態でも、Claude Codeに日本語で指示するだけで正しい計測コードとボトルネック診断を得る実演を公開します。

代表菅澤 代表菅澤
この記事にたどり着いた方の多くは、自分でPythonを書く予定がある方より「システム担当の報告についていきたい」「なぜ処理が遅いのか、AIに調べてもらいたい」という方だと思います。今日はコードを深く読み込まなくても、時間計測の正体を業務の比喩で理解してもらいます。
AI鬼管理山崎 AI鬼管理山崎
そしてもうひとつ。この記事の後半では、Pythonをまったく知らない菅澤が、Claude Codeに日本語で指示するだけで「なぜこの処理は遅いのか」を診断させる様子をそのまま公開します。「時間を計る」ことと「遅さの原因を突き止める」ことは、実は別の話だという実例です。

この記事を最後まで読むと、次の6つが明確になります。

✔️timeモジュールが具体的に何をしている機能なのか、業務の比喩で理解できる
✔️time.time()とtime.perf_counter()の違いと、計測に使ってはいけない理由
✔️time.process_time()が表す「CPU時間」と、待機時間(sleep)の関係
✔️実務のコードでありがちな計測ミス3パターンとその回避方法
✔️弊社GENAIの実運用データから見る、処理時間の計測・改善をAIに任せた場合の効果
✔️Python未経験でもClaude Codeに日本語で指示するだけで、遅さの原因を診断してもらう方法
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理
📌 この記事の結論
【2026年8月最新】Pythonのtimeモジュールで処理時間を計測する方法|非エンジニアでもClaude Codeでボトルネック診断ができる
Pythonのtimeモジュールで処理時間を計測する方法を解説。time.time()とtime.perf_counter()の違い、time.process_timeとsleepの関係、実務でありがちな計測ミスから、非エンジニアがClaude Codeで正しい計測・ボトルネック診断を行う方法まで網羅。

01 timeモジュールとは何か 業務でいう「ストップウォッチ」に近い機能だと考えると理解しやすい

まず結論から言うと、Pythonのtimeモジュールとは「今の時刻を取得したり、処理の開始から終了までの経過時間を計算したりするための、Python標準の道具箱」です。何かのデータを加工する機能ではなく、作業にかかった時間を測るためのストップウォッチだと考えると理解しやすくなります。

業務の場面に置き換えて考えてみましょう。工場のライン作業やコールセンターの応対時間を計測するとき、担当者は「作業開始のボタンを押す→作業をする→作業終了のボタンを押す→差し引いて所要時間を出す」という手順を踏みます。Pythonのプログラムでも考え方はまったく同じで、「処理の直前で今の時刻を記録する」→「処理を実行する」→「処理の直後で今の時刻を記録する」→「2つの時刻を引き算する」という4ステップで所要時間を求めます。

📚 用語解説

timeモジュール:Pythonにあらかじめ組み込まれている、時刻の取得・経過時間の計測・待機処理などを行うための標準ライブラリ。追加のインストールをしなくても import time と書くだけで使える。日時の表示形式を整える機能や、指定した秒数だけ処理を止める time.sleep() のような機能も含まれる。

この「開始と終了の差し引きで時間を求める」という性質が、timeモジュールが実務のあらゆる場面で使われる理由の土台になっています。以下の図は、業務システムの中で処理時間の計測がどの段階で使われるかを示したものです。

①処理の直前
現在時刻を
記録する
(ストップウォッチON)
②本来の処理を
実行

集計・変換・
API呼び出しなど
③処理の直後
再度、現在時刻を
記録する
(ストップウォッチOFF)
④差し引いて
所要時間を算出

遅い処理の
特定・改善に使う

つまり、timeモジュールを使った計測の本質は「どこが遅いのかを数値で可視化し、改善すべき箇所を特定する下ごしらえ」にあります。日次バッチ処理の監視ログ、広告データ集計ツールの実行時間レポート、Webサイトの応答速度チェックなど、システムの裏側ではほぼ例外なくこの仕組みが使われています。

💡 経営者向けの一言まとめ

timeモジュールは「処理を速くする機能」ではなく「処理にかかった時間を正確に測るための機能」です。システム担当が「time.time()で計測しておきます」と言ったときは、「どこにどれだけ時間がかかっているかを数値で確認しておきます」というニュアンスだと捉えるとほぼ間違いありません。

02 time.time()で処理時間を計測する基本 最も広く知られた計測方法とその仕組み

timeモジュールの中でも最も知られているのがtime.time()という関数です。呼び出すたびに「現在の時刻」を1つの数値(秒)として返してくれます。まずは基本の使い方を見てみましょう。

import time

start = time.time()

# 何らかの処理(ここでは仮に100万回の計算をする例)
total = sum(i ** 2 for i in range(1_000_000))

end = time.time()

elapsed = end - start
print(f"処理時間: {elapsed:.4f}秒")
# 出力例: 処理時間: 0.0812秒

time.time()が返す数値は、1970年1月1日午前0時(UTC)を基準にした、そこから経過した秒数という決まったルールで表現されています。処理の前後でこの数値をそれぞれ記録し、後から引き算するだけで「何秒かかったか」が分かる、という非常にシンプルな仕組みです。

📚 用語解説

UNIX時間(エポック秒):1970年1月1日午前0時(協定世界時)を基準の0秒として、そこから何秒経過したかを表す数値。コンピュータの世界で時刻を単純な数値として扱う際の共通ルールとして広く使われている。time.time()はこのUNIX時間を、小数点以下も含む浮動小数点数(float型)で返す。

この仕組みには大きな利点があります。時刻を「年月日時分秒」のような複雑な形式ではなく1つの数値として扱えるため、単純な引き算だけで経過時間を求められる点です。人間が読む日付表示に変換したい場合は、time.strftime()のような別の関数を組み合わせますが、処理時間を測るだけであれば、time.time()を2回呼んで引き算する、というこの基本形だけで十分な場面がほとんどです。

✔️バッチ処理・集計処理など、ひとまとまりの作業にかかった時間を大まかに把握したいとき
✔️ログファイルに「いつ処理が始まり、いつ終わったか」を記録に残したいとき
✔️複数の処理方式を比べて、どちらが速いかをざっくり比較したいとき
✔️処理が想定より長くかかった場合に、タイムアウトとして中断する判断材料にしたいとき
AI鬼管理山崎 AI鬼管理山崎
ストップウォッチで例えるなら、time.time()は「今、腕時計は何時何分何秒か」を読み取っているイメージです。開始時と終了時、それぞれで時計を読み取って、あとから差し引きしているだけなので、仕組み自体は難しくありません。

03 なぜtime.time()だけでは不十分か time.perf_counter()との違いを理解する

ここが、この記事で最も伝えたいポイントです。実は、処理時間を正確に計測する目的では、time.time()よりtime.perf_counter()を使うことが推奨されています。両方とも「今の時刻に相当する数値」を返す点は同じですが、性質がまったく異なります。

関数基準になる時刻計測用途への向き不向き主な用途
time.time()1970年1月1日からの経過秒(UNIX時間)△ 計測専用には不向き「今が何年何月何日何時か」を知りたいとき
time.perf_counter()決まった基準はない(相対的な値)◎ 処理時間の計測に最適処理の所要時間を正確に測りたいとき
time.process_time()決まった基準はない(相対的な値)△ 用途が異なる(後述)CPUが実際に計算に使った時間を測りたいとき

なぜtime.time()が計測に不向きなのでしょうか。理由は、time.time()が返す時刻はパソコンやサーバーのシステム時計そのものを参照しているためです。システム時計は、インターネット経由で自動的に正しい時刻へ補正される仕組み(NTPと呼ばれる時刻同期の仕組み)によって、裏側で時々刻々と微調整されています。

📚 用語解説

NTP(時刻同期):パソコンやサーバーの内部時計を、インターネット上の正確な時刻サーバーに合わせて自動的に補正する仕組み。ほとんどのパソコン・サーバーで標準的に有効になっている。この補正によって、システムの時計が数ミリ秒〜数秒単位で前後に調整されることがある。

⚠️ time.time()で計測すると、まれに「マイナスの処理時間」が出ることがある

処理の実行中に、裏側でNTPによる時刻補正が働いてシステム時計が巻き戻された場合、time.time()で計測した「終了時刻 - 開始時刻」の結果が、理論上マイナスの値になってしまうことがあります。実際の処理は確かに時間がかかっているのに、計測結果だけが「-0.003秒」のようなありえない数値になる、という事故です。頻度は高くありませんが、24時間稼働のバッチサーバーのように長時間動かし続けるシステムほど、こうした時計の補正に遭遇する可能性が上がります。

一方、time.perf_counter()は「1970年基準」のような決まった起点を持たず、OSが提供する最も精度の高いカウンター(時計とは別の、単調に増え続ける数値)を参照しています。この値は外部からの時刻補正の影響を受けず、必ず増え続ける(後戻りしない)性質を持っているため、処理時間の計測に適しています。

📚 用語解説

モノトニック(単調増加):値が常に増加し続け、決して減少したり巻き戻ったりしない性質のこと。time.perf_counter()はモノトニックな値を返すため、NTPによる時刻補正の影響を受けず、「後から測った値の方が必ず大きい」ことが保証される。処理時間の計測ではこの性質が重要になる。

import time

# 非推奨:time.time()での計測
start1 = time.time()
total = sum(i ** 2 for i in range(1_000_000))
end1 = time.time()
print(f"time.time()での計測: {end1 - start1:.4f}秒")

# 推奨:time.perf_counter()での計測
start2 = time.perf_counter()
total = sum(i ** 2 for i in range(1_000_000))
end2 = time.perf_counter()
print(f"time.perf_counter()での計測: {end2 - start2:.4f}秒")

両者は多くの場合ほぼ同じような数値を返すため、普段の利用では違いに気づきにくいものです。しかし「短い処理を高精度に測りたい」「長時間稼働するサーバーで正確な計測を続けたい」という場面では、この違いが結果の信頼性を左右します。

💡 迷ったらperf_counterを使う

「今の日付・時刻を知りたい」のではなく「処理にかかった時間を測りたい」のであれば、時計としての性質を持つtime.time()ではなく、計測専用に設計されたtime.perf_counter()を使うのが安全です。この使い分けさえ押さえておけば、この章の内容はほぼ理解できたと言えます。

代表菅澤 代表菅澤
正直、この違いを最初に聞いたときは「どちらも似たような数字が出るなら別にどちらでもいいのでは」と思いました。ですが、24時間動き続けるバッチサーバーの計測ログでたまに変な数値が出ていた原因が、まさにこのtime.time()の特性だったと知って納得しました。
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

04 「経過時間」と「CPU時間」は別物 time.process_time()とtime.sleep()の関係を理解する

もう1つ、実務の計測でよく混同されるのがtime.process_time()です。この関数もtime.perf_counter()と同じく計測用の値を返しますが、意味が異なります。time.perf_counter()が「時計としての経過時間(壁にかかった時計が進んだ時間、英語ではウォールタイム)」を返すのに対し、time.process_time()は「そのプログラムのために、CPUが実際に計算していた時間」だけを返します。

📚 用語解説

CPU時間とウォールタイム:CPU時間は「コンピュータの頭脳(CPU)が実際に計算作業をしていた時間」を指す。ウォールタイム(壁時計時間)は「人間が壁の時計を見て感じる、実際に経過した時間」を指す。両者は、プログラムが何かを待っている時間(通信待ち・ディスクの読み書き待ち・意図的な一時停止など)がある場合にズレが生じる。

この違いが分かりやすく表れるのが、time.sleep()(指定した秒数だけ処理を一時停止する関数)を含む処理です。sleep中はCPUが何も計算していない「待機」の状態になるため、ウォールタイムでは経過するのに、CPU時間としてはカウントされません。

import time

start_wall = time.perf_counter()
start_cpu = time.process_time()

time.sleep(2)  # 2秒間、何もせず待機する(通信待ちを模した処理)
total = sum(i ** 2 for i in range(500_000))  # ここは実際にCPUを使う処理

end_wall = time.perf_counter()
end_cpu = time.process_time()

print(f"経過時間(perf_counter): {end_wall - start_wall:.4f}秒")
print(f"CPU時間(process_time):  {end_cpu - start_cpu:.4f}秒")

# 出力例:
# 経過時間(perf_counter): 2.0817秒   ← sleepの2秒がそのまま含まれる
# CPU時間(process_time):  0.0813秒   ← sleepの2秒はカウントされない

この例では、sleep(2)によって「経過時間」は2秒以上になりますが、「CPU時間」にはそのsleep分がほとんど含まれません。これは、CPUがsleep中は他の作業に手を回せる状態(何も計算していない状態)にあるためです。

⚠️ 外部API・DB通信を含む処理を「CPU時間」だけで評価すると誤診断になる

広告データの取得やデータベースへの問い合わせのように、外部のシステムからの応答を待つ処理(通信待ち)を含む場合、その待ち時間はCPU時間にはほとんど反映されません。「CPU時間で計測したら一瞬だったのに、体感では10秒も待たされた」という状況は、まさにこの通信待ち(I/O待ち)がCPU時間に含まれないために起きます。実務で「体感の遅さ」を診断したい場合は、process_time()ではなく必ずperf_counter()(ウォールタイム)を基準に判断してください。

逆に言えば、time.process_time()が役立つのは「通信待ちなどの外部要因を除外して、純粋に自社のコード・計算処理そのものがどれだけ重いのかを切り分けたい」という場面です。ウォールタイムとCPU時間の両方を並べて計測すると、遅さの原因が「自社のロジックの重さ」なのか「外部との通信待ち」なのかを切り分けられます。

関数何を測っているかsleepや通信待ちの扱い向いている診断
time.perf_counter()実際に経過した時間(体感の遅さ)含まれる「ユーザーが実際にどれだけ待たされたか」
time.process_time()CPUが計算に使った時間だけ含まれない「自社のロジックそのものがどれだけ重いか」
AI鬼管理山崎 AI鬼管理山崎
「体感は遅いのに、CPU時間だけ見ると一瞬」という報告があれば、それは通信待ちが原因である可能性が高い、というのがこの章の要点です。両方の数値を並べて見るだけで、原因の切り分けがかなり進みます。

05 実務でありがちな計測ミス3パターン 「動いているのに数字が信用できない」を防ぐ

ここまでtimeモジュールの基本を見てきましたが、実務のコードでは関数の選び方以外にも、計測する範囲の取り方を誤って、正しくない数値を報告してしまうケースがよくあります。代表的な3つのパターンを整理します。

5-1. 測る範囲が広すぎる(無関係な処理を巻き込む)

最も多いミスが、計測したい処理とは無関係な部分まで計測範囲に含めてしまうケースです。例えば「集計処理の速度」を知りたいのに、ファイルの読み込みや、結果を画面に表示する処理まで一緒に計測してしまうと、本来のボトルネックが見えなくなります。

import time

start = time.perf_counter()

data = load_large_csv("sales.csv")   # ファイル読み込み(実は重い処理)
result = aggregate(data)             # 本来計測したい集計処理
print(result)                        # 表示処理

end = time.perf_counter()
print(f"処理時間: {end - start:.4f}秒")
# ↑ これでは「集計処理」単体の速さが分からない
⚠️ 計測したい処理だけを、開始と終了で正確に挟む

「集計処理の速さ」を知りたいなら、time.perf_counter()の呼び出しはaggregate(data)の直前と直後だけに置くべきです。ファイル読み込みや表示処理まで含めてしまうと、実際にはファイル読み込みが遅いだけなのに「集計処理が遅い」という誤った結論を出してしまう可能性があります。

5-2. 1回だけの計測結果を鵜呑みにする

パソコンやサーバーは、裏側で他のプログラムやOSの処理も同時に動いています。そのため、まったく同じコードを実行しても、実行するたびに処理時間が数%〜数十%ばらつくことがあります。1回だけ計測した数値を「これが正しい処理時間だ」と判断してしまうのは危険です。

import time

times = []
for _ in range(10):  # 10回計測して平均を取る
    start = time.perf_counter()
    total = sum(i ** 2 for i in range(1_000_000))
    end = time.perf_counter()
    times.append(end - start)

average = sum(times) / len(times)
print(f"平均処理時間: {average:.4f}秒({len(times)}回計測)")
print(f"最小: {min(times):.4f}秒 / 最大: {max(times):.4f}秒")

📚 用語解説

ばらつき(分散):同じ処理を複数回実行しても、毎回まったく同じ時間になるとは限らず、実行のたびに結果が上下する性質のこと。他のプログラムの動作状況やパソコンの負荷状態などが影響する。1回だけの計測ではなく、複数回計測して平均・最小・最大を見ることで、より信頼できる判断ができる。

5-3. 初回実行だけ極端に遅いことに気づかない

プログラムの種類によっては、1回目の実行だけ極端に遅く、2回目以降は速くなるという現象が起きることがあります。例えば、外部データを一度読み込んでメモリ上に保持しておく仕組み(キャッシュと呼ばれる仕組み)を使っている処理では、1回目はデータの読み込みが発生するため遅く、2回目以降はメモリ上のデータをそのまま使えるため速くなります。

💡 初回実行を計測対象から外す、または明記する

複数回計測する場合、1回目の実行結果を「ウォームアップ(準備運転)」として計測対象から除外するか、少なくとも「1回目だけ他と傾向が違う」ことをレポートに明記しておくと、誤解のない報告になります。

✔️計測したい処理だけを、time.perf_counter()の呼び出しで正確に挟めているか確認する
✔️1回だけでなく複数回計測し、平均・最小・最大を見て判断する
✔️初回実行だけ極端に遅い/速い場合、その傾向を認識した上で判断する
✔️体感の遅さを診断したいならperf_counter、CPU負荷そのものを診断したいならprocess_timeを使う
代表菅澤 代表菅澤
ここで紹介した3つのミスに共通しているのは、「コード自体は動いているので、間違いに気づきにくい」という点です。数字が出てくると、それだけで正しいと信じてしまいがちですが、計測範囲や回数を疑う視点が実務では欠かせません。

06 何度も使い回せる「計測の型」を作る コンテキストマネージャとデコレータで計測コードを共通化する

ここまでの内容を踏まえると、「開始時刻を記録→処理を実行→終了時刻を記録→差し引く」という4ステップを、計測したい処理のたびに毎回手書きするのは非効率だと感じるはずです。Pythonには、この一連の流れを1か所にまとめて、何度でも使い回せる形にする書き方が用意されています。

6-1. コンテキストマネージャで計測処理をまとめる

with文と組み合わせて使える「コンテキストマネージャ」という仕組みを使うと、計測したい処理をwithブロックで囲むだけで、自動的に時間を測ってくれる部品を作れます。

import time
from contextlib import contextmanager

@contextmanager
def stopwatch(label):
    start = time.perf_counter()
    yield
    end = time.perf_counter()
    print(f"[{label}] {end - start:.4f}秒")

# 使う側はこれだけでよい
with stopwatch("売上集計処理"):
    total = sum(i ** 2 for i in range(1_000_000))

with stopwatch("請求データの整形処理"):
    formatted = format_invoice_data(raw_data)

📚 用語解説

コンテキストマネージャ(with文):ある処理の「前後」に必ず決まった動作(今回で言えば計測の開始・終了)を挟み込むための書き方。ファイルを開いたら必ず閉じる、といった処理でもよく使われる。withブロックの中に書いた処理が終わると、自動的に後処理(ここでは終了時刻の記録と表示)が実行される。

6-2. デコレータで関数の実行時間を自動計測する

特定の関数の実行時間を毎回自動で記録したい場合は、デコレータという書き方も便利です。関数の定義の直前に一行加えるだけで、その関数が呼ばれるたびに自動的に時間が計測されるようになります。

import time
import functools

def measure_time(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        start = time.perf_counter()
        result = func(*args, **kwargs)
        end = time.perf_counter()
        print(f"{func.__name__}: {end - start:.4f}秒")
        return result
    return wrapper

@measure_time
def aggregate_sales(data):
    return sum(x ** 2 for x in data)

# 呼び出すだけで自動的に計測される
aggregate_sales(range(1_000_000))
# 出力例: aggregate_sales: 0.0805秒

📚 用語解説

デコレータ:既存の関数の中身を書き換えずに、その関数の前後に追加の処理(今回は計測処理)を挟み込むための書き方。関数の定義の直前に @関数名 という一行を加えるだけで適用できる。「毎回同じ準備・後片付けが必要な作業に、あらかじめテンプレート化した手順書を差し込む」ような発想に近い。

コンテキストマネージャとデコレータのどちらを選ぶかは、計測したい範囲によります。「コードの一部分だけを都度計測したい」場合はコンテキストマネージャ、「特定の関数を呼ぶたびに毎回自動で計測したい」場合はデコレータが向いています。どちらも一度作ってしまえば、以降は計測のためのコードを毎回書き直す必要がなくなります。

💡 自分で書けなくても「型」の存在を知っておくだけで十分

ここで紹介したコンテキストマネージャやデコレータのコードを、非エンジニアの方が自分で書ける必要はありません。「計測処理は毎回手書きしなくても、共通の部品として使い回せる」という考え方さえ知っておけば、システム担当への質問や、後述するClaude Codeへの指示出しの精度が上がります。

AI鬼管理山崎 AI鬼管理山崎
弊社の社内ツールでも、この「計測の型」を1つ作っておいて、色々な処理に使い回しています。バッチ処理のどこが遅いかをすぐに数値で確認できる状態にしておくと、改善の優先順位を判断しやすくなります。
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

07 【独自データ】GENAI社内でのバッチ処理計測とClaude Code活用 処理時間の計測・改善という専門知識を、非エンジニアがどこまでAIに任せられるか

ここまでtimeモジュールの技術的な中身を見てきましたが、多くの読者にとって本当に知りたいのは「結局、こうした計測作業を自分で行えるようになる必要があるのか」という点だと思います。弊社(株式会社GENAI)ではClaude Max 20xプラン(月額$200・約30,000円)を契約し、経営・営業・広告・開発・経理・秘書業務まで全社でClaude Codeを活用しています。

項目内容
契約プランClaude Max 20x(月額$200 / 約30,000円)
利用開始2025年後半〜
利用部署経営・営業・広告・開発・経理・秘書業務・個人業務まで全社
主な利用モデルSonnet 4.6(日常業務)/ Opus 4.6(複雑な判断が必要なとき)

弊社では「開発」領域もClaude Codeの活用対象に含めており、広告レポートの自動生成や経理データの突合バッチなど、複数の処理を組み合わせたスクリプトの「どこが遅いのか」を診断する場面でも日常的にClaude Codeを使っています。以下は業務領域別の概算削減時間です(肌感ベース・2026年4月時点)。

業務領域主な用途概算削減時間
広告運用週次レポート・CPA分析・配信内容調整週10h → 週1h
開発処理速度の診断・スクリプトの書き捨て都度数時間の削減
経理請求書チェック・経費仕訳・Freee連携月40h → 月5h
秘書業務日報生成・議事録・スケジュール調整日2h → 日15分
営業提案書・見積・顧客別資料の自動生成週20h → 週2h
⚠️ 数値の注意書き

上記は弊社の肌感ベースの数値であり、業種・業態・担当者のスキルによって削減時間は変動します。「完全自動化された」わけではなく、レビューや微調整の工程は都度発生している前提でご覧ください。

注目したいのは「開発」領域です。広告レポートや経理データの自動処理は、複数のステップ(データ取得→整形→集計→出力)が連なった処理になりがちで、どこか1か所が想定外に遅くなると全体の完了時刻が後ろにずれます。弊社の代表・菅澤自身はPythonのtimeモジュールを体系的に学んだ経験があるわけではありませんが、それでも「この処理、なぜか毎回時間がかかっている」という違和感をClaude Codeに伝えるだけで、この記事で紹介したような計測コードを差し込んで原因を切り分けてもらえる状態が、日常的に成立しています。

Step 1
「なんとなく
遅い」という
違和感を伝える
Step 2
Claude Codeが
各処理に計測
コードを差し込む
Step 3
実行して
どこが遅いか
数値で特定
Step 4
遅い箇所だけ
改善策を
提案・実装
代表菅澤 代表菅澤
正直に言うと、私はいまだにperf_counterとprocess_timeの使い分けを誰かに説明しろと言われたら怪しいです。それでも、Claude Codeに「このバッチ処理、体感で遅いから原因を調べて」と頼めば、この記事で紹介したような計測コードを適切に選んで差し込み、結果まで報告してくれます。理解と診断は、切り離して考えていい時代になったと感じています。

08 【実演】Python未経験の菅澤が、日本語の指示だけでボトルネック診断を依頼してみた 専門用語を使わず、業務の言葉のままClaude Codeに依頼する

ここからは実演です。Pythonの文法をほとんど知らない状態でも、Claude Codeにどのような日本語で話しかければ、この記事で紹介した落とし穴(time.time()の誤用・計測範囲の取り違え・1回だけの計測を鵜呑みにする)を避けた、正しい診断が得られるのかを見ていきます。

8-1. ステップ1:業務の言葉のまま、やりたいことを伝える

専門用語を使う必要はありません。「time.perf_counter()で計測してください」ではなく、以下のような伝え方で十分です。

指示例:
「この売上集計スクリプト、実行するたびに時間がかかったり
かからなかったりして不安定に感じる。どの処理が原因で
遅くなっているのか、正確に計測して教えてほしい。
ファイルの読み込みが遅いのか、計算そのものが重いのかも
分けて確認してほしい。」

この指示には「time.perf_counter」「process_time」「デコレータ」といった技術的な単語は一切含まれていません。それでも「ファイルの読み込みが遅いのか、計算そのものが重いのかも分けて確認してほしい」という業務目線の一言を添えるだけで、Claude Codeは3章・4章で解説した使い分け(perf_counterでウォールタイムを、process_timeでCPU時間を、それぞれの処理ブロックごとに計測する)を踏まえた診断コードを返してきます。

8-2. ステップ2:Claude Codeが返してくるコードのイメージ

import time

def diagnose(label, func, *args, repeat=5, **kwargs):
    wall_times, cpu_times = [], []
    for _ in range(repeat):
        w0, c0 = time.perf_counter(), time.process_time()
        result = func(*args, **kwargs)
        w1, c1 = time.perf_counter(), time.process_time()
        wall_times.append(w1 - w0)
        cpu_times.append(c1 - c0)

    avg_wall = sum(wall_times) / repeat
    avg_cpu = sum(cpu_times) / repeat
    print(f"[{label}] 経過時間(平均): {avg_wall:.4f}秒 / CPU時間(平均): {avg_cpu:.4f}秒")
    if avg_wall - avg_cpu > avg_wall * 0.3:
        print(f"  → 待機時間(通信・読み込み待ちなど)が大きい可能性があります")
    return result

diagnose("ファイル読み込み", load_large_csv, "sales.csv")
diagnose("集計処理", aggregate, data)

重要なのは、コードそのものだけでなく「なぜ経過時間とCPU時間の両方を測ったのか」「差が大きい場合に何を疑うべきか」という補足説明まで日本語で返ってくる点です。Pythonの文法を理解していなくても、この補足を読めば「読み込み処理が重いのか、計算そのものが重いのか」という業務判断に必要な材料を自分で把握できます。

8-3. ステップ3:動作確認と改善提案までAIに任せる

Claude Codeはコードを書くだけでなく、実際にそのコードを実行して結果を確認するところまで自律的に行える点が、通常のチャット型AIとの大きな違いです。「このスクリプトを実際に動かして、どこがボトルネックか教えて」と伝えれば、実際に実行して数値を確認した上で、改善の優先順位まで提案してくれます。

💡 コードすら書かせず、診断結果だけ受け取る選択肢もある

ここまではPythonのコードを得る流れを紹介しましたが、そもそも自社システムに組み込む予定がなく「今このスクリプトの遅さの原因だけ知りたい」という場合は、コードを一切書かせずにClaude Codeへ直接ファイルを渡し「このスクリプトのどこが遅いか、実行して確認して」と依頼するだけでも完結します。コードを書く・書かないは目的次第で選べる、という点も覚えておくと便利です。

この一連の流れが示しているのは、「Pythonのtimeモジュールを正しく書けるようになる」ことと「処理が遅い原因を正しく特定する」ことは、もはや同じスキルを必要としないという事実です。前者はエンジニアの専門スキルのままですが、後者は「体感の違和感を具体的に言語化する力」に置き換わりつつあります。

Step 1
業務の言葉で
違和感を
そのまま伝える
Step 2
Claude Codeが
計測コード+
補足説明を返す
Step 3
実行して
ボトルネックを
数値で特定
Step 4
改善案を
そのまま
業務に反映
AI鬼管理山崎 AI鬼管理山崎
弊社のお客様の中にも、プログラミング経験がまったくない管理職の方が、Claude Codeを使って自社の日次バッチの遅さを診断させ、改善につなげているケースがあります。大事なのは文法の暗記ではなく、「何がどれくらい遅いと感じるか」を具体的に言語化する力です。

09 まとめ ── 「時間を計る」より先に、「遅さの原因を突き止める」時代へ 経営者に必要なのは文法知識ではなく、違和感を言語化する力

この記事では、Pythonのtimeモジュールについて、time.time()の基本、time.perf_counter()との違い、time.process_time()とsleepの関係、実務でありがちな計測ミス、そして計測コードを使い回す型までを、非エンジニア向けの比喩を交えて解説しました。最後にポイントを振り返ります。

✔️timeモジュールは「処理の開始と終了の差し引きで所要時間を求める」ためのPython標準の道具箱
✔️time.time()はシステム時計を参照するため、処理時間の計測には不向き。計測にはtime.perf_counter()を使う
✔️time.process_time()はCPUが実際に計算した時間だけを返す。sleepや通信待ちの時間は含まれない
✔️体感の遅さを診断したいならperf_counter(ウォールタイム)、ロジックそのものの重さを見たいならprocess_time
✔️計測範囲の取り違え・1回だけの計測を鵜呑みにする・初回実行の特殊性を見落とす、が3大ミス
✔️コンテキストマネージャやデコレータで「計測の型」を作れば、毎回手書きせずに使い回せる
✔️Python未経験でも「体感の違和感を言葉で伝える」ことで、Claude Codeが正しい診断コードを返してくれる

最も伝えたいメッセージは、timeモジュールの文法を暗記することと、処理が遅い原因を正しく特定することは、もはや別のスキルになっているという点です。システム担当やエンジニアとの会話で置いていかれないための「教養」としてこの記事の内容を知っておくのは有益ですが、実務でバッチ処理や集計スクリプトの遅さそのものが問題になっている場面では、Claude Codeのような自律型のAIエージェントに診断そのものを任せてしまう方が、時間対効果は圧倒的に高くなります。

弊社では、こうした「専門知識の壁でAI活用を諦めている」経営者・管理職の方に向けて、Claude Codeを実務に組み込むための伴走支援を行っています。処理速度の診断に限らず、日々の業務の中で「これは専門的すぎるから」と後回しにしていた作業があれば、まずは無料相談でご相談ください。

代表菅澤 代表菅澤
弊社では「AI鬼管理」というサービスで、Claude Codeを使った業務自動化の設計から伴走まで支援しています。「なぜか処理が遅い」「原因が分からないまま放置している」というバッチ処理があれば、実は任せてみる価値があります。まずは無料相談でお気軽にご相談ください。

「なぜか遅い」処理も、Claude CodeとAI鬼管理で原因を突き止める

Pythonのtimeモジュールのように「専門的すぎて手が出せない」と感じていた処理速度の診断も、Claude Codeなら日本語の指示だけで原因の切り分けから改善提案までたどり着けます。
貴社の業務のどこにこの仕組みが使えるか、無料相談で一緒に見つけます。

AI鬼管理山崎 AI鬼管理山崎
「専門知識がないから任せられない」という思い込みを外すところから、導入支援はスタートします。まずは日常業務の中で一番「なぜか遅い」と感じている処理を1つ、教えてください。

NEXT STEP

この記事の内容を、あなたのビジネスで
実践してみませんか?

AI鬼管理 — Claude Code導入支援トレーニング

AI活用を自社で回せるようになりたい方へ

AI鬼管理

Claude Code・Cowork導入支援から業務設計・社内浸透まで実践ベースで伴走。「自社で回せる組織」を90日で作る経営者向けトレーニング。

AIBPO by AI鬼管理 — 定型業務の丸ごと代行

業務を丸ごと任せたい方へ

AIBPO by AI鬼管理

請求処理・データ入力・問い合わせ対応などの定型業務を、AI×人の品質管理体制で丸ごと代行。いまのコストの75%目安で、日々は成果物を承認するだけ。

よくある質問

Q. time.time()とtime.perf_counter()、結局どちらを使えばいいですか?

A. 「今の日付・時刻そのものを知りたい」場合はtime.time()、「処理にかかった時間を正確に測りたい」場合はtime.perf_counter()を使うのが基本の使い分けです。time.time()はシステム時計を参照しているため、NTPによる自動補正の影響を受け、まれに計測結果がずれることがあります。処理時間の計測が目的であれば、time.perf_counter()を使う方が安全です。

Q. time.process_time()はどんなときに使うと便利ですか?

A. 通信待ちやファイルの読み込み待ちといった「待機時間」を除外して、CPUが実際に計算処理に使った時間だけを知りたいときに便利です。例えば「体感では遅いのに、CPU時間で見るとほとんどかかっていない」という結果が出た場合、遅さの原因は自社のロジックではなく、外部との通信待ちである可能性が高いと判断できます。

Q. なぜ1回だけの計測結果を信じてはいけないのですか?

A. パソコンやサーバーは裏側で他の処理も同時に動いているため、まったく同じコードを実行しても、実行のたびに数%〜数十%処理時間がばらつくことがあります。1回だけの計測結果を「これが正しい処理時間だ」と判断すると、たまたま遅かった(または速かった)1回に引きずられて誤った結論を出してしまう可能性があります。複数回計測して平均・最小・最大を確認するのが安全です。

Q. time.sleep()を使うと、なぜCPU時間にはカウントされないのですか?

A. time.sleep()は「指定した秒数だけ処理を一時停止する」機能であり、その間CPUは他の作業に手を回せる待機状態になります。time.process_time()はCPUが実際に計算作業をしていた時間だけを積算するため、計算が発生していないsleep中の時間はカウントされません。一方でtime.perf_counter()(経過時間)にはsleepの時間もそのまま含まれます。

Q. 計測したい処理の範囲を、正しく取れているか自信がありません。どう確認すればいいですか?

A. time.perf_counter()の呼び出しを、計測したい処理の直前と直後だけに置き、それ以外の処理(ファイル読み込みや表示処理など)を挟み込んでいないか確認してください。複数の処理をまとめて計測すると、本来のボトルネックがどこにあるのか分からなくなります。判断に迷う場合は、処理を1つずつ細かく分けて、それぞれ個別に計測するのが確実です。

Q. プログラミング未経験でも、Claude Codeに処理速度の診断を正しく依頼できますか?

A. できます。この記事で紹介したように、専門用語を使わず「体感で遅い」「どこが原因か分からない」といった業務目線の違和感を伝えるだけで、Claude Codeのような自律型AIエージェントは適切な計測方法(perf_counterとprocess_timeの使い分けなど)を選んで診断コードを返してくれます。理解してから使うのではなく、使いながら理解が追いつく順序で進められます。

Q. Claude Codeは診断だけでなく、実際にコードを実行して結果を確認してくれますか?

A. できます。Claude Codeはコードを書いて説明するだけでなく、実際にそのコードを実行し、出力された数値を確認した上で、どこがボトルネックかを報告するところまで自律的に行えます。「実行して確認して」と伝えるだけで、計測から診断、改善提案までを一連の流れとして任せられます。

AIAI鬼管理

AI鬼管理へのお問い合わせ

この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。

会社名を入力してください
業種を選択してください
お名前を入力してください
※法人・事業用のメールアドレスでお願いします(Gmail等の個人用フリーメールは受付できません)
正しいメールアドレスを入力してください

1つ以上選択してください
1つ以上選択してください
月額コストを選択してください

約1時間のオンライン面談(Google Meet)です

空き枠を取得中...
面談日時を選択してください

予約確定後、Google Calendarの招待メールをお届けします。
しつこい営業は一切ございません。

監修 最終更新日: 2026年8月8日
菅澤孝平
菅澤 孝平 株式会社GENAI 代表取締役
  • AI業務自動化サービス「AI鬼管理」を運営 — Claude Code を活用し、経営者の業務を「AIエージェントに任せる仕組み」へ転換するパーソナルトレーニングを 伴走構築 で提供。日報・採用・問い合わせ対応・経費精算・議事録・データ集計・営業リスト等の定型業務を、AIに代行させる体制を経営者と一緒に作り込む
  • Claude Code 実装ノウハウを 経営者・法人クライアント に直接指導。生成AIを「便利ツール」ではなく 「業務を任せる存在」 として運用する手法を体系化
  • 「やらせ切る管理」メソッドの開発者。シンゲキ株式会社(2021年設立・鬼管理専門塾運営)にて累計3,000名以上の学習者を志望校合格に導いた管理メソッドを、AI × 経営者支援 に転用
  • 著書『3カ月で志望大学に合格できる鬼管理』(幻冬舎)、『親の過干渉こそ、最強の大学受験対策である。』(講談社)
  • メディア出演: REAL VALUE / カンニング竹山のイチバン研究所 / ええじゃないかBiz 他
  • 明治大学政治経済学部卒
現在は AI鬼管理(Claude Code活用の伴走型パーソナルトレーニング)を主事業とし、経営者と二人三脚で「AIに業務を任せる仕組み」を実装。「実行を強制する環境」を AI で構築する手法を、自社の実運用知見をもとに発信している。