Lua Academy · レッスン

期間を測定する

コードの実行時間を測定します。

レッスン 4/413 ステップ

「期間を測定する」はCoddyKit上の無料Lua Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLua Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Lua Academyコースには全4レッスンが含まれています。

コードの実行時間を測る

ファイルの読み込み、ループの実行、レベルの構築など、タスクにかかった時間を知りたいことがあります。処理時間を測定すると、遅い箇所を見つけて改善できます。

Luaには、このためのツールが2つあります。大まかな時間計測にはos.time、高精度な時間計測にはos.clockを使います。

ストップウォッチのパターン

基本的な考え方は簡単です。処理の前に時刻を記録し、処理を実行してから、もう一度時刻を記録して差を求めます。

その差が経過時間です。この開始と停止のパターンが、あらゆるタイマーの基本になっています。

local start = os.time()
-- work happens here
local stop = os.time()
print("Elapsed:", stop - start)

os.timeは大まかな計測

os.timeは整数の秒数を扱うため、1秒未満の処理を測定できません。短い間隔で2回呼び出すと、差が0になることがよくあります。

短い処理には、より精度の高い時計が必要です。そこでos.clockを使います。

local a = os.time()
local b = os.time()
print(b - a)

os.clockを使う

os.clock()は秒数を返しますが、小数を含む数値として返します。プログラムが使用したCPU時間を高い精度で測定できます。

そのため、1秒未満の短い処理の時間を高精度に測るのに適しています。

print(os.clock())

ループの時間を測る

ループを2回のos.clockの呼び出しで挟むと、ループの実行時間を確認できます。その差が秒単位の経過時間です。

大きなループほど時間がかかるため、実装方法を比較する簡単な手段になります。

local t1 = os.clock()
local sum = 0
for i = 1, 1000000 do sum = sum + i end
local t2 = os.clock()
print("Took", t2 - t1, "seconds")

結果を整形する

小数点以下の桁数が多い数値は読みにくいため、string.formatを使って表示する桁数を整えます。

ここでの%.3fは小数点以下3桁を表示し、ミリ秒レベルの詳細さで時間を確認できます。

local t1 = os.clock()
for i = 1, 500000 do end
local elapsed = os.clock() - t1
print(string.format("%.3f seconds", elapsed))

os.timeとos.clockの比較

適切なツールを選びましょう。「ユーザーがログインしてから何秒経過したか」のような現実の時間の経過にはos.timeを使います。

コードの性能測定にはos.clockを使います。こちらは精度が高く、実際の時計の時間ではなくCPU時間を測定するためです。

再利用可能なタイマー関数

このパターンを関数にまとめることができます。指定した関数を実行し、その時間を測定して結果を表示します。

これにより、時間計測の処理を1か所にまとめ、簡単に再利用できます。

local function timeIt(fn)
  local s = os.clock()
  fn()
  print(string.format("%.4f s", os.clock() - s))
end
timeIt(function() for i=1,100000 do end end)

時間単位で差を求める

現実の長い時間差には、2つのos.timeの値に対してos.difftimeを使うのが分かりやすい方法です。時間差が秒単位で返されます。

分で表示するには60で、時間で表示するには3600で割ります。

local started = os.time({year=2025, month=1, day=1, hour=9})
local ended = os.time({year=2025, month=1, day=1, hour=17})
local hours = os.difftime(ended, started) / 3600
print(hours, "hours")

分と秒を表示する

経過時間を分と秒で表示するには、整数除算と剰余演算子を使います。

//は整数の分を、%は分に含まれない残りの秒数を求めます。

local total = 145
local mins = total // 60
local secs = total % 60
print(string.format("%d:%02d", mins, secs))

シンプルなカウントダウン計算

ここまでの考え方を組み合わせて、残り時間を表示します。目標時刻から現在時刻を引き、秒数を分と秒に整形します。

これにより、見やすいカウントダウン表示を作成できます。

local target = os.time() + 90
local left = os.difftime(target, os.time())
print(string.format("%d:%02d left", left // 60, left % 60))

確認問題

高精度な時間計測に最適なツールを選びましょう。

まとめ

経過時間を測るには、前後の時刻を読み取り、その差を求めます。整数秒単位の現実の時間差にはos.timeを、秒未満のコード実行時間を高精度に測るにはos.clockを使います。

string.formatで結果を整形し、//と%を使って秒数を分と秒に変換します。これらのツールを使えば、ループから勤務時間まで、さまざまな処理の時間を測定できます。

無料で開始

AI チューターと学ぶ Lua — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
40
レッスン
159

よくある質問

「期間を測定する」レッスンは無料ですか?

はい。「期間を測定する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Lua Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Lua Academyコースには全4レッスンが含まれています。

「期間を測定する」で何を学びますか?

コードの実行時間を測定します。 ブラウザで直接実行するハンズオンコードでLua Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Lua Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLua Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「期間を測定する」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLua Academyレッスンでコードを書いて実行できますか?

はい。すべてのLua Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. os.timeとos.date
  2. 日付をフォーマットする
  3. 時間の算術演算
  4. 期間を測定する
← Lua Academyに戻る