5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RaycastAdvent Calendar 2024

Day 22

Raycastでアプリの起動回数を自分に知らせる

Last updated at Posted at 2024-12-21

先日Raycastを開くと2024年のサマリーが見られるようになっていました。

image.png

アプリケーションを開いた回数もカウントされており、僕はSlackを一番開いていることがわかりました。hotkeyに登録しているアプリケーションが少ないためSlackの使用回数が多いこと想像していましたが、改めて見ると流石に多すぎると感じました。

そこで、自分の使用状況を監視するために、RaycastのExtensionを作成してみることにしました。

やりたいこと

  • 1日にSlackを開く回数の傾向を把握する
  • 感覚よりも多く開いている場合に、「お前開きすぎちゃう?」と指摘してもらう

本来はRaycast経由でないSlackを開いた数もカウントしたかったのですが、今回は普段自分が使っているhotkeyで開いた回数のみのカウントになっています。あらかじめご了承ください。

やったこと

  • hotkeyでExtensionを実行し、その中でSlackを開くように設定
  • 起動回数をカウントし、一定回数以上になると通知する仕組みを作成

最終的に、以下の2つの機能を作成しました。
① 設定したしきい値以上の回数開いた場合、Macのdisplay notificationで通知
image.png

② 使用するたびにRaycastのshowHUDを使ってディスプレイにその日の使用回数を表示

コード例

以下はサンプルコードです。
普段Slackを開くのに使用していたhotkeyをこのExtensionの実行に割り当てることで実現しました。Slackを開く前に拡張機能を経由することになりますが、操作感は従来と変わりませんでした。

import { getFrontmostApplication, LocalStorage, showHUD } from "@raycast/api";
import { exec } from "child_process";

interface DailyTracker {
  date: string;
  count: number;
}

export default async function main() {
  const now = new Date();
  const today = now.toLocaleDateString('ja-JP');

  const storedData = await LocalStorage.getItem<string>("slack-tracker");
  let dailyTracker: DailyTracker;

  if (storedData) {
    const parsed = JSON.parse(storedData) as DailyTracker;
    if (parsed.date === today) {
      dailyTracker = parsed;
    } else {
      dailyTracker = { date: today, count: 0 };
      await LocalStorage.clear()
    }
  } else {
    dailyTracker = { date: today, count: 0 };
  }

  const frontmostApplication = await getFrontmostApplication();
  if (frontmostApplication.name !== "Slack") {
    dailyTracker.count += 1;
    exec("open -a Slack");
    if (dailyTracker.count >= 20) {
      exec(`osascript -e 'display notification "今日は${dailyTracker.count}回もSlackを開いているので辞めときましょう" with title "Slack Tracker"'`)
    } else {
      await showHUD(`Slack opened! (Today: ${dailyTracker.count} times)`);
    }
  }
  await LocalStorage.setItem("slack-tracker", JSON.stringify(dailyTracker));
}

最後に

RaycastでExtensionを自作するのは初めてでしたが、とても簡単に作成することが出来ました。APIのドキュメントも充実しており、さらに深く活用していきたいと思います。
今回は、拡張機能を経由してSlackを開く方法しか思いつきませんでしたが、将来的には他のアプリケーションも含めて監視できるようにしたいです。

※ 初めは30回Slackを開いたら通知する設定にしていたのですが、意外とすぐに通知が来てしまい、自分の使用頻度の多さを実感しましたw

Happy Raycast Life!

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?