なぜ「シンプル時計」を作ったのか——大画面のPCでも見失わない、常に最前面の時計が欲しかった
大画面のPCで作業していると、メニューバーの時計をふと確認したくなっても、視界の隅すぎて見えづらいことがあります。目を動かして探す一手間が、地味に気になっていました。背景を透過させて、常に最前面に置けるシンプルな時計があればいいのに——探しても、ちょうどよいものが見つからなかったので、自分で作りました。
メニューバーの時計は、大画面だと「隅すぎる」
メニューバーの時計は、画面の端にひっそりと表示されます。ノートPCの小さな画面なら視界に収まりますが、大きな外部ディスプレイで作業していると、作業中の視線からはずいぶん離れた位置になります。
かといって、見るたびに視線を大きく動かすほどのことでもありません。ちらっと見えるところに、常に置いておきたい——そのくらいの、ささやかな要望でした。
見つからなかったのは「透過して常に最前面」の一点
時計アプリ自体は探せばいくつも見つかります。ただ、私が欲しかった条件に合うものには行き当たりませんでした。
- 通知センターのウィジェットは、通知センターを開かないと見えません。常時表示にはなりません
- サードパーティの時計アプリの多くは、背景がはっきり主張してしまい、作業中の画面に置くには目立ちすぎます
- 常に最前面に固定できるものは少なく、あっても機能が多すぎたり、無料でなかったりしました
「透過していて、常に最前面で、余計な機能がない」——この組み合わせだけを満たすものが見つからなかったので、自分で作ることにしました。
作ったもの: シンプル時計
シンプル時計 は、Mac用のネイティブアプリです。SwiftUIとAppKitで作った、モノクロ・枠なしの小さな時計です。
- 常に最前面に表示され、すべてのデスクトップ(Space)に追従します。作業スペースを切り替えても見失いません
- 背景の透過度をスライダーで調整できます。壁紙に馴染ませることも、はっきり見せることもできます
- macOS標準の全画面表示にも対応。PCを使わないときや音楽を聴くときに全画面表示にすれば、余計なものが目に入らず気が散りません。全画面に入ると背景は自動で真っ黒になります
- Spaceを切り替えない軽量な「ウィンドウ最大化」も別に用意しました。画面いっぱいに広げつつ、透過度はそのまま引き継ぎます
- 秒の表示・日付の表示・12/24時間表示・フォント3種を、右クリックのメニューから切り替えられます
- ログイン時の自動起動、ウィンドウの位置とサイズの記憶にも対応しています
使い方は、GitHub Releases から .app をダウンロードして /Applications に置くだけです。登録不要・広告なし・完全無料で、Apple SiliconとIntelの両方のMacで動きます。
初回起動時、Appleに登録していない開発元として警告が出ます。.app を右クリックして「開く」を選ぶか、ターミナルで xattr -dr com.apple.quarantine を実行すれば起動できます。
手順は README にも書いています。
作ってみて分かったこと
小さなアプリですが、作る過程でいくつかつまずきました。技術的な話なので、興味のある方だけどうぞ。
SwiftUIのcontextMenuは、生のNSViewを渡すとdisabled表示になる
透過度の調整にスライダーを使いたくて、SwiftUIの.contextMenuにスライダーを組み込んだところ、灰色のまま操作できない状態になりました。
調べていくと、.contextMenuはSwiftUI標準のコントロール(ToggleやButton)は問題なく扱える一方、NSViewRepresentableで包んだ生のNSViewは disabled 表示になってしまう制約があるようでした。
最終的に、右クリックメニューそのものをAppKitのNSMenuで手組みし、rightMouseDownを直接オーバーライドしてポップアップする方式に切り替えました。遠回りに見えますが、こちらのほうが結果的に確実でした。
独自のkeyDownオーバーライドが、標準の全画面のEsc処理を止めていた
枠なしウィンドウでもEscキーでウィンドウ最大化を解除できるようにしようと、NSWindowのkeyDownをオーバーライドしました。ところがこれを実装した直後、macOS標準の全画面表示に入るとEscキーで抜けられなくなる不具合が出ました。
原因は単純で、keyDownが受け取ったキー入力を無条件に消費し、superに渡していなかったことでした。macOSの標準の全画面表示は、自前でEscキーによる解除処理を持っています。それを黙って握りつぶしてしまっていたわけです。
未処理のキー入力は必ずsuper.keyDownに委譲するよう直し、解決しました。
ほかにも、日本語ロケールの環境では12時間表示のAM/PMが自動で「午後」に差し替わってしまうDateFormatterの癖に足をすくわれたり、自宅にある別のMac(Intel機)でも動かすためにUniversalバイナリでビルドしたりと、小さなつまずきはいくつかありました。
使ってみてください
シンプル時計 は登録不要・無料で、ダウンロードしてすぐ使えます。「大画面でも、ちらっと見えるところに時計を置いておきたい」——そんな方に届くとうれしいです。
筆者:yokafolio。「シンプルなアプリと、余白のある暮らし。」をテーマに、登録不要で開いてすぐ使えるWebアプリを作っています。