BitBar を試してみる

任意のスクリプトを定期実行して、標準出力結果を Mac OS Xのメニューバーに表示してくれるアプリ「BitBar」を試してみました。

公式サイト

活用事例

対応言語

  • bash
  • zsh
  • Ruby
  • Python
  • JavaScript (node)
  • CoffeeScript
  • Swift
  • Go
  • Lisp
  • Perl5
  • PHP

インストールと使い方

  • GitHubのリリースページからzipファイルをダウンロードし、解凍後Applicationsフォルダに配置。
  • 実行時に求められるプラグインフォルダの場所を適当に指定
  • 実行したいスクリプトを書いてプラグインフォルダに保存、または、公開プラグインを利用。

公開プラグインを利用してみる

以下、プラグイン公開ページに行き利用したいプラグインを選んで「Add to BitBar」ボタンを押すと、プラグインフォルダにダウンロードされ実行される。

Real CPU Usage」プラグインを使用してみる。

install plugin

ツールバーにプラグインの実行結果が表示される。

run plugin

「Real CPU Usage」プラグインの中身

ファイル名:real-cpu-usage.10s.sh

#!/bin/bash

# <bitbar.title>Real CPU Usage</bitbar.title>
# <bitbar.author>Mat Ryer and Tyler Bunnell</bitbar.author>
# <bitbar.author.github>matryer</bitbar.author.github>
# <bitbar.desc>Calcualtes and displays real CPU usage stats.</bitbar.desc>
# <bitbar.version>1.0</bitbar.version>

IDLE=$(top -F -R -l3 | grep "CPU usage" | tail -1 | egrep -o '[0-9]{0,3}\.[0-9]{0,2}% idle' | sed 's/% idle//')

USED=$(echo 100 - "$IDLE" | bc)

echo "CPU: $USED%"

プラグインを書いてみる

今回書いたプラグイン置き場。

ファイル名:myplugin.10s.sh

#!/bin/bash

disp1=":smile: 1つ目 | color=red"
disp2=":zzz: 2つ目 | color=green"
echo "$disp1"
echo "$disp2"
echo "---" # 以下はプルダウンで表示される
echo "CodeGrid | href=https://app.codegrid.net/"
echo "---" # これはセパレートになる
echo "絵文字 | href=http://qiita.com/koukun/items/ae673f2bae8f1525b6af"

echo "---" より上に書いた echo がツールバー部分に出力され、複数行の出力がある場合は、定期実行のタイミングで順番に切り替わる。

chmod +x myplugin.10s.sh

my plugin

定期実行のタイミング

定期実行のタイミングはプラグインファイルのファイル名で指定する。

  • {ファイル名}.{実行間隔}.{拡張子}

実行間隔

  • 10s 10秒おき
  • 1m 1分おき
  • 2h 2時間おき
  • 1d 1日おき

JavaScriptで書いてみる

ファイル名:jsplugin.10s.js

#!/usr/bin/env /Users/cyokodog/.anyenv/envs/ndenv/versions/v4.2.4/bin/node

console.log("JSもOK! | color=#00aaff");
console.log("anyenvもOK! | color=#ff5577");

1行目で node の実行ファイルを指定する。上記は anyenv 環境の記述。

JSで書いたプラグイン

node 用の bitbar モジュールを使ってみる

npm でインストール

npm install --save bitbar

ファイル名:myplugin2.10s.js

#!/usr/bin/env /Users/cyokodog/.anyenv/envs/ndenv/versions/v4.2.4/bin/node

var bitbar = require('bitbar');

bitbar([
  {
    text: '❤',
    color: bitbar.darkMode ? 'white' : 'red',
    dropdown: false
  },
  bitbar.sep,
  {
    text: 'Unicorns',
    color: '#ff79d7',
    submenu: [
      {
          text: ':tv: Video',
          href: 'https://www.youtube.com/watch?v=9auOCbH5Ns4'
      },
      {
          text: ':book: Wiki',
          href: 'https://en.wikipedia.org/wiki/Unicorn'
      }
    ]
  },
  bitbar.sep,
  'Ponies'
]);

JSON 形式で書けて楽。

JSで書いたプラグイン

感想

  • Alfred だと有料パックじゃないとできないことができてうれしいかも
  • ツールバーに実行結果がでるのがうれしいけど、全画面表示多用してるとあんまり見ず...
  • npm が使えるんで楽していろいろ作れそう