1. はじめに
投稿記事を書いたり勉強してたりすると「30分だけ集中して書き上げたい」なんて場面がよくあります。
でも、いちいちアプリを切り替えて残り時間を確認するのは地味にストレス。
「メニューバーに残り時間が常時表示されてたら便利なのに……」
そう思って探したものの、これだというアプリが見つからず。
だったら自分で作ってしまえ!ということで、xbar
というツールを使って、
Macのメニューバーにタイマーを表示する仕組みを作ってみました。
2. 特徴
- 20分、30分など時間を決めて作業に集中・没頭できる
- 残り時間を 視線をちょっと動かすだけで確認 できる
- ターミナルから1コマンドでタイマーを開始
3. 導入:xbarのインストール
xbarとは?
xbar
は、Macのメニューバーに好きな情報を表示できるツールです。
表示内容はシェルスクリプトなどで制御できるため、
今回のようなタイマー機能も簡単に追加できます。
インストール手順
brew install --cask xbar
4. 導入:xbarプラグインを自作する
xbarでは「プラグイン」として実行間隔付きのスクリプトファイルを作ることで、メニューバーに好きな情報を表示できます。
今回は「1秒ごとに更新」されるタイマー表示を作ります。
timer.1s.sh
ファイル名は timer.1s.sh
とし、xbarのプラグインディレクトリに配置します。
#!/bin/bash
SCRIPT_DIR="$(cd "$(dirname "$0")"; pwd)"
STATE_FILE="$SCRIPT_DIR/.timer_state"
NOTIFY_FLAG="$SCRIPT_DIR/.notified"
SND_FILE="/System/Library/Sounds/Ping.aiff"
if [ ! -f "$STATE_FILE" ]; then
echo "⌛No timer"
rm -f "$NOTIFY_FLAG"
exit 0
fi
IFS=':' read -r START_TIME END_TIME DESCRIPTION < "$STATE_FILE"
NOW=$(date +%s)
REMAINING=$((END_TIME - NOW))
if [ "$REMAINING" -le 0 ]; then
echo "⌛$DESCRIPTION 終了"
echo "---"
echo "Clear | bash='rm \"$STATE_FILE\"' refresh=true"
if [ ! -f "$NOTIFY_FLAG" ]; then
afplay "$SND_FILE" &
touch "$NOTIFY_FLAG"
fi
else
MINUTES=$((REMAINING / 60))
SECONDS=$((REMAINING % 60))
printf "⏳%02d:%02d %s\n" "$MINUTES" "$SECONDS" "$DESCRIPTION"
echo "---"
echo "Clear | bash='rm \"$STATE_FILE\"' refresh=true"
fi
プラグインのインストール
mv timer.1s.sh "~/Library/Application Support/xbar/plugins/"
chmod +x "~/Library/Application Support/xbar/plugins/timer.1s.sh"
5. タイマーをセットするスクリプト
ターミナルから簡単にタイマーを設定できるスクリプトも用意します。
これで1コマンドでタイマーを開始できます。
xbar-timer.sh
#!/bin/bash
DURATION_MIN=$1
DESCRIPTION=$2
DST_DIR="$HOME/Library/Application Support/xbar/plugins/"
STATE_FILE="$DST_DIR/.timer_state"
NOTIFY_FLAG="$DST_DIR/.notified"
if [ -f "$NOTIFY_FLAG" ]; then
rm "$NOTIFY_FLAG"
fi
START_TIME=$(date +%s)
END_TIME=$((START_TIME + DURATION_MIN * 60))
echo "$START_TIME:$END_TIME:$DESCRIPTION" > "$STATE_FILE"
echo "⏳${DURATION_MIN}分タイマー開始: $DESCRIPTION"
実行権限を付ける
chmod +x xbar-timer.sh
6. 使い方
たとえば、Qiita投稿に30分集中したいときは、次のように実行します。
./xbar-timer.sh 30 Qiita投稿
すると、メニューバーに次のように表示され、
1秒ごとにカウントダウンが進んでいきます。
タイマーが終了すると「ピンッ」という音で通知してくれます。
7. おわりに
ちょっとしたスクリプトですが、
日常の中でちょっと集中みたいな場面ではとても役に立っています。
興味のある方はぜひ試してみてください。
xbarは他にも天気やGitHub通知なども表示できるので、
いろいろカスタマイズして遊ぶのも楽しいですよ。