毎日行う動作を習慣にするためにメニューバー常駐macOSアプリを作った

みなさんは毎日一回見るWebページはありますか?私はあります。

今回は毎日一回Webページを見る、という動作を習慣にするためにエンジニアリングで仕組み化したことを紹介します。

この記事は、はてなエンジニア Advent Calendar 2022の19日目の記事です。昨日は id:onk さんで git push -f が更に安全になる --force-if-includes - id:onk のはてなブログ でした。

TL;DR

  • メニューバー常駐macOSアプリを作った
  • あるWebページを毎日一回見るというきっかけ作りをメニューバー常駐macOSアプリに任せた
  • macOS Ventura 13ではメニューバーのみで動作するアプリ開発がMenuBarExtraによって楽になった
  • 日々の暮らしをエンジニアリングで改善することは楽しい

モチベーション

毎日意識して行う動作をエンジニアリングで仕組み化して習慣にするためにメニューバー常駐macOSアプリを作りました。

みなさんは毎日見るWebページはありますか?私はあります。何だか恥ずかしいのですが、意識することを列挙したページを一日一回見るようにしています。

毎日見るWebページの例

今までは "あるWebページを毎日一回見る" という動作はChromeのブックマークバーの目立つ位置に置いたブックマークを意識して開く、ということをしていました。このやり方の欠点として、見ることを忘れてしまうことが多々ありました。人間が何かを意識することには限界があり、エンジニアリングで解決したいところです。

そこで、その日にリンクを開いたら導線が消えるような仕組みを作れば忘れることが少なくなるのではないか?と考え、メニューバー常駐macOSアプリを作ってみることにしました。

作ったもの

最終的に以下の機能を満たしたmacOSアプリを作りました。

  • メニューバーに常駐する
  • ログイン時に起動する
  • 設定したリンクを開くとアプリを終了する
  • リンクを開いた後は再度ログインして日付を跨がないとアプリを起動しない

github.com

GitHub - tokizuoh/DailyLink

Openを押すとSettingsで設定したURL(↓)をブラウザで開く

macOSアプリ開発は初めてでしたが、macOS Ventura 13で登場したMenuBarExtraを使うことで短時間で実装できました。

MenuBarExtra

MenuBarExtraを使うことでメニューバーにのみ表示されるmacOSアプリを楽に作成することができます。

今まではNSApplicationDelegateや、NSApplicationDelegateをNSApplicationDelegateAdaptor経由で利用してメニューバーのアイテム表示を行う必要がありました。macOS Ventura 13では今回のような簡単な要件の実装の際にはNSApplicationDelegateが不要になり、MenuBarExtraを使うだけで事が済むようになりました。

ログイン時に起動する処理

アプリケーションの機能として実装せずに、OSの設定を利用する形を取りました。

support.apple.com

良かったこと

  • 社のチームで行っているHuman Interface Guidelines*1を読む会で学んだことを活かせた
    • メニューアイテムのアクションとしてユーザーに入力させるためのウィンドウを表示する際は末尾に省略記号(...)を付ける
    • Menus > 「Append an ellipsis ...」
  • 別テーマでメニューバー常駐macOSアプリを実装し終えていたが、こっちはMenuBarExtra使わずに実装したのでそれはそれとして良い勉強になった

一週間使ってみて

実際に一週間使ってみましたが非常に良いです。役割を終えるとメニューバーからアイコンが消えるため、常駐してる時の違和感があります。違和感を消すためにWebページを開くため、動作を忘れることがありません。

おわりに

日々の暮らしをエンジニアリングで改善することの楽しさを改めて感じることができました。普段はiOSアプリを開発していますが今回でmacOSアプリが書けるようになり、手札が増えて楽しくなってきました。来年も日々の暮らしをエンジニアリングで豊かにしていきたいです。

はてなエンジニア Advent Calendar 2022、明日は id:Windymelt さんです。