
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 秒