WindowsのPowerShellのtimeコマンドで処理時間を測定する方法

timeコマンドで処理時間を測定

timeコマンドとはプログラムやコマンドの実行時間を測るコマンドです。

macOSでは「time sleep 3」のようにコマンドを実行すると時間が計測されます。

$ time sleep 3
sleep 3  0.00s user 0.00s system 0% cpu 3.013 total

しかし、WindowsのPowerShellにはtimeコマンドが存在しないため、デフォルトの状態ではtimeコマンドは使用できません。

WindowsのPowerShellにはtimeコマンドに似た、Measure-Commandというコマンドがあるので、実行時間の計測はこちらを使用します。

※ sleepコマンドもないので、代わりにStart-Sleepを使用しています。

PS C:\Users\iwb> Measure-Command { Start-Sleep -Seconds 3 }
Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 3
Milliseconds      : 3
Ticks             : 30012345
TotalDays         : 3.0012345E-05
TotalHours        : 0.0007203
TotalMinutes      : 0.04322
TotalSeconds      : 3.0012345
TotalMilliseconds : 3001.2345

普通に実行すると色々な形式の時間が表示されてしまうので、通常は以下のように語尾に「.TotalSeconds」を付けてTotalSecondsだけ表示すると見やすいです。

PS C:\Users\iwb> Measure-Command ({ Start-Sleep -Seconds 3 }).TotalSeconds
3.0012345

Measure-Commandが使用できるのはPowerShellのバージョン7以上なので、バージョンが古い場合は以下のコマンドでアップデートしてください。

Invoke-Expression "& { $(Invoke-RestMethod https://aka.ms/install-powershell.ps1) } -UseMSI"

PowerShellのバージョンは「$PSVersionTable」で確認できます。

PS C:\Users\iwb> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.19041.6280

PowerShellでもtimeコマンドで計測

PowerShellではtimeコマンドは使えませんが、Measure-Commandは存在するので、ps1ファイルに関数を保存してtimeでMeasure-Commandを実行するようにすれば、macOSのようにtimeで実行時間を計測できます。

ps1ファイルの場所は「$PROFILE」を実行すると表示されます。

PS C:\Users\iwb> $PROFILE
C:\Users\iwb\OneDrive\Documents\PowerShell\Microsoft.PowerShell_profile.ps1

time関数は以下のように作成します。

Microsoft.PowerShell_profile.ps1
function time {
    param(
        [Parameter(ValueFromRemainingArguments = $true)]
        [string[]]$Command
    )
    $cmd = $Command -join ' '
    $result = Measure-Command { Invoke-Expression $cmd }
    Write-Output ("実行時間: {0:N3} 秒" -f $result.TotalSeconds)
}

time関数を保存したらPowerShellを再起動すれば使用可能になります。

PS C:\Users\iwb> time Start-Sleep -Seconds 3
実行時間: 3.017 

PS C:\Users\iwb> time npm run lint
実行時間: 2.014