概要
ポモドーロ・テクニックの本を読みました。
なんだか集中できて便利らしい、さっそく使おう! と思ったけどタイマーがなかった。
あるいは職場のWindowsに勝手にソフトを入れられないけど、ポモドーロ・テクニックを使いたいぞ! という瞬間がありますよね。
ダブルクリックでタイマーセットしたいだとか。
毎回4回のポモドーロ+30分休憩タイマーをかけるのが面倒だとか。
Windowsにもとから入ってるコマンドプロンプトを使ってポモドーロできないかな・・・と思った結果がこちらの記事になります。
メモ帳などのテキストエディタで.batファイルを作るだけでタイマーがかけられて便利です。
更新履歴
2021/01/25 終了時に警告音を鳴らせるようにした
2021/04/15 微妙だったコードを修正
2021/08/19 4回のポモドーロ+30分休憩用のbat作成
参考
![](https://maku77.github.io/assets/img/logo-windows.jpg)
作り方
作成方法は、メモ帳などのテキストエディタで下記のコードを書いて、拡張子を.batにします。
「新しいテキスト ドキュメント.txt」を「5min.bat」とか「25min.bat」とかいうファイル名にする感じです。
「.txt」「.bat」の部分が拡張子になります、環境によっては表示されないので、拡張子を表示してから変更しましょう。
あとは.batファイルをクリックするだけで秒数をカウントダウンしてくれるタイマーがかけられて便利です。
集中できないときとかにどうぞ。
コード
25分のポモドーロ(作業用)
@echo off REM 25分のタイマーを掛けたい場合、minに25と書く set /a min=25 REM タイマーを秒数にする set /a sec=%min%*60 REM タイマーを掛ける timeout %sec% REM 終了時に音声を鳴らす rundll32 user32.dll,MessageBeep REM 終了時にアラートを出す echo MsgBox "%min%分が経ちました。",vbInformation,"情報" > %TEMP%\msgbox.vbs & %TEMP%\msgbox.vbs del /Q %TEMP%\msgbox.vbs
5分のポモドーロ(休憩用)
@echo off REM 5分のタイマーを掛けたい場合 set /a min=5 REM タイマーを秒数にする set /a sec=%min%*60 REM タイマーを掛ける timeout %sec% REM 終了時に音声を鳴らす rundll32 user32.dll,MessageBeep REM 終了時にアラートを出す echo MsgBox "%min%分が経ちました。",vbInformation,"情報" > %TEMP%\msgbox.vbs & %TEMP%\msgbox.vbs del /Q %TEMP%\msgbox.vbs
時間指定できるタイマー
実行するとタイマーをかける時間(分)を入力できるタイプのタイマー
@echo off REM タイマーを掛ける時間を入力する set /p min="タイマーにセットしたい分数を入力してください:" REM 1分のタイマーを掛けたい場合 REM set /a min=1 REM タイマーを秒数にする set /a sec=%min%*60 REM タイマーを掛ける timeout %sec% REM 終了時に音声を鳴らす rundll32 user32.dll,MessageBeep REM 終了時にアラートを出す echo MsgBox "%min%分が経ちました。",vbInformation,"情報" > %TEMP%\msgbox.vbs & %TEMP%\msgbox.vbs del /Q %TEMP%\msgbox.vbs
4回の作業+30分休憩ができるポモドーロタイマー
独学大全にも出ていた2時間30分のポモドーロを実現するbatファイルです。
これだけあればいいはず。
タイマー終了後のウィンドウでOKボタンか閉じるボタンを押さないと次のカウントが始まらない点に注意してください。
@echo off REM 分数とカウント終了時の追加メッセージ call :TimerFunc 25 "作業時間が終わり ました(1回目)" call :TimerFunc 5 "1回目の休憩時間がおわりました。" call :TimerFunc 25 "作業時間が終わりました(2回目)" call :TimerFunc 5 "2回目の休憩時間がおわりました。" call :TimerFunc 25 "作業時間が終わりました(3回目)" call :TimerFunc 5 "3回目の休憩時間がおわりました。" call :TimerFunc 25 "作業時間が終わりました(4回目)35分休憩です。" call :TimerFunc 35 "4回目の休憩時間がおわりました。" exit /b REM ======Timer関数====== :TimerFunc setlocal REM 変数取得 set /a min=%1 set message=%~2 REM タイマーを秒数にする set /a sec=%min%*60 REM タイマーを掛ける echo %min%分のタイマー開始 timeout %sec% REM 終了時に音声を鳴らす rundll32 user32.dll,MessageBeep REM 終了時にアラートを出す echo %message% echo MsgBox "%min%分が経ちました。%message%",vbInformation,"情報" > %TEMP%\msgbox.vbs & %TEMP%\msgbox.vbs del /Q %TEMP%\msgbox.vbs exit /b
解説
Windows7以降ならtimeout関数が使えるそうなのでそれを使ってカウントダウンしています。
timeout関数は引数の秒数だけ待機してくれる関数です。
これだけだと終了したかどうかがわからないので、アラートを表示させます。
警告音を鳴らすのにMessageBeepが使えます。
アラートはメッセージボックス表示させるvbsを作って実行、削除という方法で実現しています。
文字化けする場合は.batファイルの文字コードがshift-jisになっているか確認してみてください。
逆にコマンドプロンプトの文字コードがshift-jsでない場合も文字化けしたりします。
実行のようす(分数を指定するバージョン)
起動時
待機したい分数を入力してEnterを押すとカウントダウンが始まります。
(カウントダウン中になにかのキーを押すとアラートまで進んでしまうので、カウント中はウィンドウを最小化しておきましょう)
おわり。