Windows環境向けの定期ログ記録ツール

設計作業中に時間を意識せずに過ごしてしまうことはよくある。重要なメモや思考をその場で記録しないと、後から振り返ることができず、自身の生産性や成長を分析する手段を失ってしまう。このような問題を解決するために、毎時自動でログ入力を促すスクリプトを開発した。

このツールは Windows のタスクスケジューラにより1時間ごとに起動され、Tcl/Tk を用いた簡易GUIウィンドウを表示。ユーザーが短いメモを入力すると、現在時刻とともに指定されたMarkdownファイルに追記される。

BAT起動スクリプト

hourly_log_launcher.bat

set script_dir=%~dp0
set tcl_script="%script_dir%hourly_log_ui.tcl"
start "Log Prompt" %SF_P_WISH% %tcl_script:\=/%

Tcl/Tk GUIスクリプト

hourly_log_ui.tcl

encoding system utf-8

set script_path [file normalize [info script]]
set base_dir [file dirname $script_path]

# 5分後に自動終了
set timeout_id [after 300000 {exit}]

proc save_log {content log_file timeout_id} {
    set timestamp [clock format [clock seconds] -format "%D %H:%M:%S"]
    set fd [open $log_file a+]
    puts $fd "---"
    puts $fd "## $timestamp"
    puts $fd $content
    close $fd
    
    after cancel $timeout_id
    exit
}

cd $base_dir
set config_file "config.ini"
set fp [open $config_file r]
set config_data [read $fp]
close $fp

# 設定ファイルからログパスを抽出
if {[regexp {\s*log_path\s*=(.+)} $config_data -> log_path]} {
    set log_file [string trim $log_path]
} else {
    error "log_path not found in config.ini"
}

# GUI構築
set user_input ""
label .lbl -text "今時の活動内容:"
entry .inp -width 100 -textvariable user_input -relief sunken -bd 2
button .btn -text "保存" -command "save_log \$user_input {$log_file} $timeout_id"
bind . <Return> "save_log \$user_input {$log_file} $timeout_id"

grid .lbl .inp .btn -padx 20 -pady 5
focus .inp

設定ファイル

config.ini(スクリプトと同じディレクトリに配置)

; ログ出力先のMarkdownファイルパス
log_path=D:/logs/hourly_notes.md

Windowsタスクスケジューラ設定

「タスク スケジューラ」より、新しい基本タスクを作成し、以下の設定を行う:

  • トリガー:「繰り返し」を有効にし、1時間ごと
  • 操作:上記の.batファイルを起動

出力例

---
## 04/12/2023 23:06:56
* 小規模スクリプトを公開

タグ: TCL Tk Windows Task Scheduler Batch Script Markdown Logging

7月22日 01:53 投稿