ログ採取時の課題
ソフトウェアの不具合を再現しながらログを採取するとき、再現した正確な時刻 も記録したいですよね。
正確な再現時刻があれば、ログのタイムスタンプと突き合わせてスムーズにログを分析できます。でも、時計が写り込んだ画面を連写する機能は Windows の標準機能にありません。
そこで、時計オーバーレイ付きスクリーンレコーダー を作ってみました。動画撮影も検討しましたが、スクリプトだけで簡潔に実装できるように写真を撮影することにしました。
特徴
- 時計オーバーレイ - 常に最前面に表示。マウスホイールでサイズ変更、自動で隠すことも可能
- スマートキャプチャ - 直前の写真と差分がある場合のみ保存
- マルチモニター対応 - 単一または複数モニターを同時キャプチャ
- 外部依存なし - PowerShell と .NET だけで動作
- インストール不要 - .ps1 ファイル単体でも実行可能
ユースケース
バグ再現の記録
Start-ScreenRecorder -RecordFor 0:10:00 -FPS 5
画面写真は yyyyMMdd_HHmmss_ff.jpg という名前で保存されるので、ログの時刻と簡単に照合できます。-RecordFor 0:10:00 を指定すると、起動時に自動で録画を開始し、10分後に自動で終了します。
操作手順書の作成
Start-ScreenRecorder -Quality 90 -Scale 1.0
録画を開始したら、一連の手順をまとめて操作してください。その後、自動で撮影された写真の中からいい感じのを選んで貼るだけで、すぐに手順書を作成できます。
CI/テスト自動化
Start-ScreenRecorder -RecordFor 0:30:00 -OutputPath $env:BUILD_ARTIFACTPATH
インストール
PowerShell Gallery から
PowerShell コンソールで、次を実行します。
Install-Module ScreenRecorder -Scope CurrentUser
直接ダウンロード
ネット環境がなく Install-Module できない環境では、ほかの PC で Start-ScreenRecorder.ps1 をダウンロードして当該の PC に配置してください。このファイル単体で動きます。
使い方
基本的な流れ
- PowerShell コンソールを起動
-
Start-ScreenRecorderを実行 - 時計ウィンドウが表示される
- REC ボタンで録画開始
- もう一度押すと停止、自動で出力フォルダが開く
カレントフォルダに ScreenCaptures\yyyyMMdd_HHmmss\ フォルダが作成され、画面写真が保存されます。
コマンド例
# 基本
Start-ScreenRecorder
# 高フレームレート(1秒10枚)
Start-ScreenRecorder -FPS 10
# 自動で録画開始し、5分後に自動終了
Start-ScreenRecorder -RecordFor 0:05:00
# 写真の出力先を指定
Start-ScreenRecorder -OutputPath D:\Screenshots
操作方法
| 操作 | 説明 |
|---|---|
| REC ボタン | 録画開始/停止 |
| マウスホイール | 時計サイズの変更 |
| ドラッグ | ウィンドウ移動 |
| 右クリック | 設定メニュー |
| A キー | Auto-hide 切り替え |
| X キー | 終了 |
パラメータ
| パラメータ | 既定値 | 説明 |
|---|---|---|
| -FPS | 2 | フレームレート(1-60) |
| -Scale | 0.75 | 画像スケール(0.1-1.0) |
| -Quality | 75 | JPEG 品質(1-100) |
| -RecordFor | - | 自動録画の時間(例: 00:05:00) |
| -OutputPath | - | 出力先ディレクトリ |
ウィンドウの位置・サイズや、右クリックメニューで変更した設定は、終了時に自動保存されます。次回起動時に復元されます。
仕組み
スマートキャプチャ
撮影した写真のハッシュ値を計算し、直前の写真と比較して、差異があるときだけ保存します。時計領域は比較しないようにしてあるので、時計の更新だけでは写真は保存されません。
これにより、ディスク容量の無駄を削減します。
バックグラウンド動作
スクリプトを実行する PowerShell コンソールは、実行が完了するまで固まってしまいます。そこで、Start-ScreenRecorder.ps1 は最初に別の PowerShell プロセスを起動して、そこで続きを実行するように工夫してあります。これにより、呼び出し元のコンソールはすぐに開放され、固まることはありません。
トラブルシューティング
Install-Module が使えない
PowerShell Gallery で最新バージョンを選択し、FileList から Start-ScreenRecorder.ps1 を直接ダウンロードして、PS console から実行してください。モジュールのインストールは不要です。
.\Start-ScreenRecorder.ps1
ダウンロードしたファイルがブロックされていたら、次で解除できます。
Unblock-File .\Start-ScreenRecorder.ps1
実行ポリシーエラーが出る
Set-ExecutionPolicy Bypass -Scope CurrentUser
動作環境
- PowerShell 5.1 以降(Windows PowerShell / PowerShell 7 両対応)
- Windows(WPF と System.Windows.Forms を使用)
まとめ
- 時計オーバーレイで、画面写真とログの時刻照合が簡単
- スマートキャプチャで無駄な画面写真は保存しない
- 外部ツール/ライブラリ不要、PowerShell だけで動作
RPA 開発のトラブルシューティングにも便利だと思います。せひご活用ください!
