はじめに
職場によるかも知れませんが、タスクにかかった時間ごとに業務報告が必要です。どのタスクにどれだけの時間を費やしたのかを報告するものです。
時間の計算って面倒じゃないですか?まあ表計算ソフトを使えば簡単なのですが、そのために表計算ソフトを起動して、記入して計算して、閉じて「保存しない」ボタンを押す、と、結構手数が多い。しかも報告を、45分なら 00:45 ではなく 0.75h として報告しなきゃいけない場合とか。
サポンテは常時起動しているプレーンテキストファイルに日誌を書いています。以下のようなものです。
## 2025/09/29(月)
晴れ。
09:00-09:10 全社朝礼
09:10-10:00 メールチェック
10:00-12:00 ドキュメントの修正作業
12:45-18:00 新規機能の開発
15:00-16:00 営業ミーティング
...
などなど。なので、ここから時間範囲文字列をコピペして計算したい。
使用イメージ
常に開いているターミナルで、「コマンド名」+「時刻文字列」を入力し、結果を表示します。
> tc 01:00-01:15
出力結果イメージ
-----
差: 00:15
小数表記: 0.25h
残りまたは残業: 7.75h
-----
Windows でも macOS でも使えるように PowerShell で作成しました。スクリプトファイルを PATH の通っているところに置いてください。macOS お使いの方は実行権限を付与しておいてください。Windows をお使いの方は、拡張子なしで実行したい場合 cmd ファイルを作成しておいてください。
スクリプト名(あるいは cmd 名)は任意です。サポンテは tc (Time Calculation)としました。
param (
[string]$inputRange
)
if (-not $inputRange) {
Write-Error "時間範囲を引数として渡してください。例:'01:00-01:15'"
exit
}
$pattern = '[^0-9:]{1,}'
$times = $inputRange -split $pattern
if ($times.Length -ne 2) {
Write-Error "正しい形式で入力してください。例:'01:00-01:15'"
exit
}
try {
$startTime = [TimeSpan]::Parse($times[0])
$endTime = [TimeSpan]::Parse($times[1])
} catch {
Write-Error "時刻の解析に失敗しました。正しい形式で入力してください。例:'01:00-01:15'"
exit
}
$duration = $endTime - $startTime
if ($duration.TotalSeconds -lt 0) {
$duration = -$duration
}
$lunchStart = [TimeSpan]::Parse("12:00")
$lunchEnd = [TimeSpan]::Parse("12:45")
if ($startTime -lt $lunchStart -And
$lunchEnd -lt $endTime) {
$duration = $duration - [TimeSpan]::Parse("00:45")
}
$break1Start = [TimeSpan]::Parse("10:00")
$break1End = [TimeSpan]::Parse("10:15")
if ($startTime -lt $break1Start -And
$break1End -lt $endTime) {
$duration = $duration - [TimeSpan]::Parse("00:15")
}
$diffMinutes = $duration.TotalMinutes
$diffHourDecimal = [math]::Round($diffMinutes / 60, 4)
$remainingTime = 8.0 - $diffHourDecimal
if ($remainingTime -lt 0) {
$remainingTime = [math]::Abs($remainingTime + 0.25)
}
Write-Output("-----")
Write-Output("差: {0:hh\:mm}" -f $duration)
Write-Output("小数表記: {0}h" -f $diffHourDecimal)
Write-Output("残りまたは残業: {0}h" -f $remainingTime)
Write-Output("-----")
おわりに
Excel をずっと開いているという人や、上記のような日誌を Excel で書いているという人はあまり困っていないかも知れませんね。誰しも一日中つねに起動しているツールがあるかと思いますが(メールソフトやチャットソフトなど)サポンテの場合は Visual Studio Code だったので、統合ターミナルからすぐに使えるものが欲しかったのでした。
上記スクリプトはほとんど AI に作成してもらいました。AI は、ミニツールを作る分にはそこそこ便利ですね。