Macのメニューバーに様々な機能を追加するアプリは数多くありますが、プラグインシステムを使って文字通り何でもメニューバーに追加できるアプリを見つけました。BitBarというアプリで、無料かつオープンソースです。macOS 10.14 Mojaveと10.15 Catalinaの両方で動作することをテストで確認しました。
BitBarを初めて起動すると、プラグインを保存するディレクトリを選択するように求められます。私はiCloud DriveにBitBarフォルダを作成し、マシン間でプラグインを簡単に同期できるようにしました。これはうまく機能しており、DropboxやGoogle Driveでも同様に機能すると思います。
BitBarウェブサイトには、コミュニティによって作成された豊富なプラグインライブラリがあります。天気、株価、暗号通貨の価格、メールメッセージ、Slack通知などを表示するプラグインに加え、猫が家にいるかいないかなど、思いつく限りのあらゆる機能を備えたプラグインがあります。プラグインのインストールは、プラグインのライブラリページにある「BitBarに追加」ボタンをクリックするだけで、指定したプラグインフォルダにインストールされます。
BitBarプラグインはすべて、シンプルなテキストベースのシェルスクリプトです。プラグインを削除するには、プラグインフォルダから移動し、メニューバーでBitBarをControlキーを押しながらクリックして、「環境設定」>「すべて更新」を選択するだけです(私はプラグインフォルダ内のアーカイブフォルダにプラグインを保存することでプラグインを無効にしています)。同様に、必要なシェルスクリプトをプラグインフォルダにドラッグして更新することで、プラグインフォルダに簡単にアクセスできます。BitBarをControlキーを押しながらクリックし、「環境設定」>「プラグインフォルダを開く」を選択すれば、プラグインフォルダに簡単にアクセスできます。
BitBarの優れた点は、ターミナルで動作するあらゆるスクリプトをBitBarプラグインにできることです。シンプルなシェルスクリプト、Pythonスクリプト、Rubyスクリプト、さらには適切なフックを組み込めばAppleScriptにもなります。また、利用可能なプラグインはすべて、任意のテキストエディタで簡単に変更できるため、スクリプト言語に精通していなくても、スクリプトの例に従うだけで小さな変更を加える方法を理解できる可能性があります。実際、これはよくある状況です。
BitBarプラグインを変更して目的を達成する
自分が求めている機能に似たプラグインを見つけたものの、完全には期待通りではないとしたらどうでしょう。幸いなことに、プラグインは簡単に変更することができます。
たとえば、私は Got Internet? プラグインを使って、そのping_address
変数を8.8.8.8
(Google DNS) から に変更しtidbits.com
、表示テキストを変更して、私たちの Web サイトにアクセスできる場合には「TidBITS 👍」、アクセスできないときには「TidBITS 👎」が表示されるようにしました。
ちょっとしたハックが役に立つかもしれません。Simple RSS Readerプラグインをインストールし、ファイルを開いて、FEED_URL
変数(デフォルトではhttp://feedpress.me/sixcolors?type=xml
)を に変更してくださいhttps://tidbits.com/feed/
。これで、メニューバーから最新のTidBITS記事にアクセスできるようになります!
Coinbase Pricesプラグインにも手を加えました。デフォルトでは様々な仮想通貨が表示されますが、私が最も関心のあるChainlinkは表示されません。そこでdash_price
、コード行をコピーしてブロックの末尾に貼り付け、名前を に変更しlink_price
、DASH-USD
CoinbaseのURLを に変更しましたLINK-USD
。最後に、末尾に1行追加しましたecho $link_price
。これは単なるモンキースクリプトです。スクリプトはPythonで書かれていますが、私はあまり詳しくありません。価格の横に派手なアイコンが表示されなかった以外は、私の変更は問題なく動作しました。
私が最も大きく変更したプラグイン、そして実際にBitBarへと導いたプラグインはmpd-controlです。iTunes/Musicが私の音楽ライブラリを混乱させることにうんざりしたので、コマンドラインベースのmpd音楽デーモンを試してきました。これには複数のフロントエンドがあります。ターミナルベースのncmpcppは気に入っていますが、音楽を一時停止するためにターミナルウィンドウに切り替えなければならないのは面倒です。mpd-controlプラグインは、デフォルトで現在再生中のトラックを表示し、それをクリックすると音楽の再生または一時停止ができます。これを変更して、再生/一時停止、次のトラックまたは前のトラックへの移動、ターミナルウィンドウでncmpcppを開くためのコマンドメニューを表示するのは簡単でした。
もしあなたが私ほどオタクでないなら、メニューバーから音楽をコントロールできる便利な iTunes Now Playing プラグインもあります。
極端な例として、Linuxで天気予報を見るために使っているメニューバースクリプトを移植してみました。驚いたことに、ほぼそのまま動作しました。ターミナルを開いて というオプションを追加するように修正し、curl wttr.in
コンソールベースの天気予報を表示できるようにしました。
BitBarでプラグインを作成する
BitBarプラグインの作成がいかに簡単か、お見せしましょう。シェルスクリプトを全く知らない方にとって、これは素晴らしい学習方法です。シェルスクリプトをmacOSのネイティブインターフェースに簡単に統合でき、リスクもほとんどありません。もし学びたくない場合は、誰かに頼んだり、お金を払って必要なプラグインを作成してもらうこともできます。
ゼロから始める必要はありません。BitBarのドキュメントには、徹底的なサンプルがいくつか掲載されており、プラグインギャラリーには様々なコンセプトを解説したチュートリアルプラグインも用意されており、自由にカスタマイズできます。しかし、プラグインをゼロから作成する方法をお見せすることで、いかにシンプルに作成できるかをお見せしたいと思います。
でターミナルを開きます/Applications/Utilities
。心配しないでください。何も怖いことをするわけではありません。入力してdate
Returnキーを押します。現在の日付と時刻が表示されます。
これをBitBarに簡単に入力できます。BBEditを開いて、date.shという簡単なスクリプトを作成しました。
#!/bin/bash
date
最初の行は#!/bin/bash
、システムにスクリプトであることを伝えます。このテキストファイルを実行可能にすると、macOSはそれをプログラムとして認識し(手順については下記を参照)、最初の行に続くターミナルコマンドを実行します。次の行は、単にdate
コマンドを呼び出すだけです。つまり、date
ターミナルに入力すると現在の日付と時刻が表示され、そのコマンドをBitBarスクリプトに記述すれば、同じことが実行されます。
ターミナルに慣れていないと、スクリプトファイルを実行可能にするのは少し気が引けるかもしれませんが、難しくはありません。プログラムとして実行できるようにするには、この操作が必要です。
- ターミナルを開きます。
- Finder で BitBar プラグイン フォルダを開きます。
- ターミナルで、
chmod +x
(末尾のスペースを含む)と入力して、スクリプトを実行可能にします。 date.sh
Finder ウィンドウからアイコンをターミナルにドラッグすると、ディレクトリ パスが挿入されます。- Return キーを押します。
BitBar を更新すると、日付と時刻が表示されるようになります。
ターミナルでdateコマンドのマニュアルページを開くman date
と、出力をカスタマイズする方法の例が表示されます。ぜひ試してみてください。
しかし、日付をクリックするとカレンダーアプリが開くようにしたい場合はどうすればよいでしょうか? 簡単に実現できますが、少し調整が必要です。BitBarのGitHubページに掲載されているように、スクリプトにBitBarアクションを追加するための特別な書式設定フックがあります。ただし、これらのフックはコマンドのコンテキストecho
、つまりターミナルにテキストや変数の値を表示する単純なUnixコマンド内でのみ機能します。
そこでまず、スクリプトを変更して、date
コマンドの出力を変数に代入するようにしました。MYDATE
例を次に示します。MYDATE=$(date)
(イコール記号の前後にスペースがないことに注意してください。) 記号に怖気付かないでください。単に という変数を作成するだけですMYDATE
。ドル記号と括弧は、dateコマンドの出力をその変数に代入するようにシステムに指示します。
次に、BitBarに日付を表示してクリック可能にする行を作成しました。 とだけ書くとecho $MYDATE
、変数の内容だけが表示されMYDATE
、以前と変わりません。しかし、その後に特別なBitBarフックを追加したので、次のようになります。
echo "$MYDATE | href=file:///Applications/Calendar.app"
まず、MYDATE
変数をエコーします。(シェルスクリプトでは、変数名の前にドル記号($)を付けて変数を参照することに注意してください。)引用符の中に、MYDATE
変数だけでなく、パイプ記号で区切られたBitBar固有のコマンドも入れています。HTMLに精通している方なら、リンクを指定するコマンドがお分かりいただけるでしょうhref
。私はこれを使って、カレンダーアプリへのリンクを作成しています。
更新後、日付をクリックしてカレンダーアプリを開くことができました。スクリプト全体は以下のとおりです。
#!/bin/bash MYDATE=$(date)
echo "$MYDATE | href=file:///Applications/Calendar.app"
では、コマンドメニューを表示したい場合はどうすればよいでしょうか?echo "---"
BitBarプラグインのスクリプトの任意の場所にコマンドを追加することで実現できます。しかし、現在のプラグインの設定では、クリックするたびにカレンダーが開くため、メニューが表示されません。そのため、クリックできないように変更する必要があります。
#!/bin/bash date
echo "---"
しかし、メニューにはどのようなコマンドを配置すればよいでしょうか?カレンダーアプリへのクリック可能なリンクを次のように作成してみましょう。
echo "Calendar | href=file:///Applications/Calendar.app"
ここで行っているのは、「Calendar」という単語をエコーし、前の例のコードを使用して、クリックしたときにカレンダー アプリが開くようにすることだけです。
最終的なプラグイン スクリプトは次のようになり、カレンダー アプリを開くことができるメニューとして日付が表示されます。
#!/bin/bash date
echo "---"
echo "Calendar | href=file:///Applications/Calendar.app"
報告される時刻がわずかにずれていることに気付くかもしれません。デフォルトでは、各BitBarプラグインは1分ごとに更新されます。ファイル名にタイムスタンプを追加するだけで、この設定を変更できます。例えば、次のようにします。1時間ごとに更新するdate.1s.sh
場合は、 1日に1回更新する場合は に変更してください。詳しくはBitBarのドキュメントをご覧ください。date.1h.sh
date.1d.sh
この基本的な例をいくつかの方法で拡張することができます。
- 日付形式を変更する
- FantasticalやBusyCalなどの他のカレンダーアプリを開く
- 日付と時刻の設定パネルへのショートカットを作成する
ブックマークプラグインの作成
私は頻繁にWebブラウザを切り替えており、ブックマークを同期させるのにうんざりしています。Alco BlomのURL Manager Proを使うこともできますが、自分で作ることを考えれば、1行に1つのURLを記したシンプルなテキストファイルが良い解決策になるのではないかと考えていました。BBEditのようなテキストエディタを使えば、テキストファイル内のURLを簡単にたどることができます(BBEditでは、Commandキーを押しながらURLをクリックすると、デフォルトのブラウザで開きます)。BitBarをいじっている時に、「ちょっと待て、リンクリストをプラグインにできるんじゃないか」と思いつきました。実際にやってみると、かなり簡単にできましたが、まだ改良中です。
こうした流れで私が最初に作ったプラグインは、非常に基本的なものでした。URLのリストを作成し、 に保存しました~/Documents/urls.txt
。(この手順に沿って進めたい場合は、好きな名前を付けて、好きな場所に保存してください。)
次に、スクリプトを次のように構成しました。
#!/bin/bash # Tell the system this is a script LINKFILE=~/Documents/urls.txt
# Create a variable called LINKFILE that points to my URL list,
# which is cleaner than referring to the list directly in the code. echo "URLs"
echo "---"
これらの 2 行は、BitBar に「URL」を表示名にするように指示し、echo は---
サブメニューを示します。
ここからが面白いところです。URLリストを読み込み、各行をエコーし、BitBarにリンクであることを通知するコマンドも出力します。
while read line; do echo "$line|href=$line"
done <$LINKFILE
<$LINKFILE
重要なのは、ファイルのすべての行をループにインポートするようにシェルに指示する の最後の部分ですwhile
。はwhile read line
、「このファイルにまだ処理していない行がある場合は、その行を読み込んで変数 に格納しますline
。」と解釈されます。 は、do
単に実行することを意味します。処理する行がある間は、その行$line
とパイプ文字 がエコーされ、href=
BitBarに後続のテキストがリンクであることを通知します。2番目は、$line
タイトルを$line
URL にリンクするようにBitBarに指示するだけです$line
。この場合、リンクのタイトルとリンクURLは同じです。
実際には次のようになります。
それでうまくいきましたが、生のURLではなく、説明的な名前を使いたいです。それに、ブックマークはたくさんあるのに画面のスペースが限られているので、Markdownベースのブックマークファイルを作成して、説明的な名前とメニュー階層を記述してみました。このようなテキスト処理には正規表現を使う必要があり、シェルスクリプトでこれを行う最も簡単な方法はsed
コマンド ですが、あまり使い慣れていません。そこで、何とかsed
使えるようにコマンドをGoogleで検索してみました。
#!/bin/bash LINKFILE=~/Documents/SyncThing/links.md echo "Bookmarks"
echo "---" while read line; do [ -z "$line" ] && continue LINKNAME=`echo $line | sed 's/^.*\[//;s/\].*$//'` LINK=`echo $line | sed 's/^.*(//;s/).*$//'` echo "$LINKNAME|href=$LINK"
done <$LINKFILE
上記のコードは、最初のブックマークスクリプトとそれほど違いはありません。リンクリストを循環的に処理しますが、今回はMarkdown形式で記述されています。各行でsed
タイトルまたはURLを抽出し、変数に追加します。その後、変数をエコーしLINKNAME
、BitBarにその変数を に格納されているURLにリンクするよう指示しますLINKURL
。ループ[ -z "$line" ] && continue
の先頭行は、while
シェルに空行をスキップするよう指示しています。
LINKNAME
およびに代入されたコマンドを囲むバッククォート(`)に注意してくださいLINK
。これは、macOS に、コマンドの結果を単なるテキストではなく変数に代入するように指示します。
この設定には一つ問題があります。BitBarのサブメニューの作り方が変です。Markdownでは、見出しは以下のように動作します。
#Bookmarks
[TidBITS](https://tidbits.com/)
[TidBITS Talk](https://talk.tidbits.com/)
[The Prepared](https://theprepared.com/) ##News
[Slashdot](https://slashdot.org/)
シングルは#
トップレベルのヘッダー、##
サブヘッダーなどを表します。ただし、BitBarで動作させるには、Markdown URLリストを次のようにフォーマットする必要があります。
[TidBITS](https://tidbits.com/)
[TidBITS Talk](https://talk.tidbits.com/)
[The Prepared](https://theprepared.com/) News
[--Slashdot](https://slashdot.org/)
サブフォルダ名は「News」なので、アイテムがそのサブフォルダに入ることを示すには、行の先頭にダッシュを2つ付ける必要があります。Markdownヘッダー以下の行数をカウントし、文字を削除して#
、--
ヘッダー以下の各行の先頭にダッシュを挿入するスクリプトを作成できるはずですが、私にはよく分かりませんsed
。awk
(もしご存知でしたら教えてください。正規表現に関して、私の永遠の感謝の気持ちをお伝えします。)
しかし、BitBar の結果は見事に整理されており、メニューからこれらのブックマークのいずれかを選択すると、デフォルトの Web ブラウザで開きます。ブラウザを切り替えるときは、デフォルトのブラウザを変更するだけで、新しいブラウザでもブックマークが使えるようになります。
BitBarはあなたの望むものすべてになる
ターミナルやスクリプトにあまり慣れていない方でも、BitBarでできることを少しでも理解していただけたら嬉しいです。「メニューバーにあれを追加したい」と思ったことがあるなら、BitBarを使えばきっと実現できるはずです。制限されるのは、あなたの想像力と、あなたやあなたの知り合いがシェルスクリプトでできることだけです。
私が使用、作成、編集している BitBar プラグインをダウンロードしたい場合は、私の GitHub ページから入手できます。