見出し画像

#5 タイムトラッキングツールActivityWatchの解説

 前の投稿で、タイムトラッキングツールのActivityWatchについて紹介しましたが、今回の投稿でもう少し詳細な解説を加えていきます。

ActivityWatchのインストール

 最新のリリースは下記のページからダウンロードできます。
https://github.com/ActivityWatch/activitywatch/releases

 このページには、Winows版、macOS版、Linux版のダウンロードモジュールが用意されています。また、「very work-in-progress」となっていますが、アンドロイド版も下記にあります。
https://github.com/ActivityWatch/aw-android/releases

 Windowsではインストール時にWindows起動時に自動的に実行されるよう設定されますが、MacやLinuxでは基本的に起動時の自動実行の設定が必要です。
MacOSの場合は、「システム設定」→「一般」→「ログイン項目」で「ログイン時に開く」の項目にActivityWatchを追加します。これにより起動時にActivityWatchのモジュールがバックグラウンドで動くようになり、タスクトレイにActivityWatchのトレイアイコンが表示されます。

画像
トレイアイコン

ウォッチャーとデータの保存

 ウォッチャーというのは、PCの状態に関するデータを収集するモジュールです。デフォルトでは2つのウォッチャーが提供されています。

  • aw-watcher-window : アクティブになっているウインドウとそのタイトルやURLの情報を収集します。

  • aw-watcher-afk : マウスとキーボードのイベントから「端末から離れている(afk : away from keyboard)」か「端末の前で作業をしている(not-afk)」の状態を判断します。

 ウォッチャーが取った情報は、 周期的にローカルで起動されているaw-serverに送られ、ここでデータベースに保存されます。保存された情報は、APIを使ってLocalhost:5600にアクセスすることで取り出せます。保存されたデータの単純な取得だけでなく、統計したり加工したりした情報(指定された作業カテゴリーごとの総時間、時間による並び替えなど)を取得することもできます。

画像
ActivityWatchのアーキテクチャー

 データは「イベント」という形で保存されます。イベントは、「タイムスタンプ」、「継続時間」、「データ」の集合です。データはキーバリュー形式で表され、イベントの種類によってキーバリューの構成は変わります。

画像
イベント

aw-watcher-afkで取得されたイベントのデータは、キー'Status'を持ち、その値として’afk’か’not-afkのどちらかの値をとります。
 aw-watcher-windowで取得されたイベントのデータは、'app'と'title'のキーを持ち、それぞれ、アプリケーション名、 ウインドウのタイトルとして表示されている文字列を値として取ります。

イベントを作業カテゴリー別に色分けする

 表示を行うクライアントは、aw-serverから情報をとり、ウォッチャーで取ったイベントを仕分け、作業カテゴリー別に色分けをして表示をしてくれます。
画面は、タスクトレイのトレイアイコンから「Open Dashboard」を選び、さらに「Activity」をクリックすると表示されます。

画像
Activity画面

ちなみに、上の例では、緑色は「原稿を書いていた時間」黄色は「ソフトウェアプログラムを作っていた時間」青色は「財務関連の作業の時間」です。

この仕分けは、アクティブになっていたアプリケーション、あるいはウインドウのタイトルにどのような単語が含まれていたかを元に行なわれます。

作業カテゴリーの振分けルールの設定

カテゴリーの設定をする画面が以下です。

画像
カテゴリーの設定

 カテゴリーとは複数のイベントをグループ化するもので、“Work”, “Gaming” “Social Media”などのラベルと、グループを表現する色を設定することができます。カテゴリーの中にさらにサブカテゴリーを階層的に設定することもできる。例えば”Work”のサブカテゴリとして、“プログラミング”とか、”原稿の作成”とかを設定することができます。

 イベントがどのカテゴリに属するかは、イベントの持つデータに、どのような文字列がどのように含まれているかによって決定されます。各カテゴリーの「ルール」として、どういう文字列がどのように含まれているかをマッチングするための「正規表現」を記載します。画面例の赤文字の部分が正規表現のルールを示しています。例えば、単純に「データ」「エンジニアリング」「マネージャー」のいずれかの文字列をデータに含むイベントとマッチングさせるためには、orを意味する記号 ”|” を使って以下のように書きます。

データ|エンジニアリング|マネージャー

「データ」と「システム」の両方の文字列をデータに含むイベントとマッチングさせるためには、以下のように書きます。

^(?=.*データ)(?=.*システム).*$

設定を保存した後で、「Activity」をもう一度表示すると、設定が反映された結果が表示されます。

ActivityWatchの欠点

 一番の問題は、日本語文字列を扱ったときに色々と不都合が起きることです。Unicodeの結合文字列が入ったイベントデータはうまくマッチングができないことがあります。MacOSで「アジャイル開発」という名前のWordファイルを作ると「ジ」の部分が結合文字列になってしまいます。ActivityWatchの設定で「アジャイル」という文字列を設定しても、こちらは通常の文字列になってしまうのでマッチングしません。(以下に詳しく書いています)

 また、Category Builder(Categorization helper)という画面の中で、まだ仕分けされていないイベントの中に頻繁に出てくる単語をサジェストしてくれる便利そうな機能があるのですが、スペースで区切られた単位で単語として取り出してしまう
ので日本語の単語はうまく取り出せません。

画像
日本語は単語として取り出せない

また、ユーザインタフェースのデザインがあまり良くないという声も多いようです。特に設定が分かりにくく「正規表現」による設定のハードルが高いという人も多い印象です。

 ただ、ActivityWatchはOSSであり、継続的に開発がされているので、このような問題もそのうち解決されていくかもしれませんし、ソースコードもありますので何なら自分で改造して解決するのも良いかもしれません。

2025/7/16 追記:
 ActivityWatchのアップデートは、この2年ほどあまり頻繁には行われておらず、新たな機能などはあまり期待できないようです。新たに同じように自動的にタイムトラッキングをしてくれるツールを作り、OSSとしてリリースしていますので、こちらも試してみてはどうでしょう? 下記の記事を参照ください。


いいなと思ったら応援しよう!

ピックアップされています

タイムトラッキングで忙しさを見える化する

  • 11本

コメント

コメントするには、 ログイン または 会員登録 をお願いします。
ITコンサルタント。2023年5月に個人事業として、System Design K2 を開業。 それまでの33年間は、電機メーカーの会社員でした。趣味はランニングと、一向に上手くならないゴルフ。 https://www.systemdesignk2.jp
#5 タイムトラッキングツールActivityWatchの解説|久山 和宏 (System Design K2)
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1