【入門編】Sublime Textでの「コーディング・フロー」を自動記録!ActivityWatchと連携して作業時間を可視化する設定術 – 軽量・高機能テキストエディタ生産性向上バイブル

「なんとなく忙しい」を卒業する。Sublime Text × ActivityWatch で開発の「解像度」を極限まで高める

こんにちは。開発環境の最適化こそがエンジニアの生産性を決定づけるという信念を持つ、あなたのテックリードです。

「今日は一日中コードを書いていた気がするのに、なぜか進捗が薄い……」
そんな感覚に陥ったことはありませんか? 多くのエンジニアが陥るこの「生産性のブラックボックス」を解消する唯一の方法は、作業の実績をデータとして可視化することです。

今回は、爆速エディタ「Sublime Text」のイベント駆動アーキテクチャをフル活用し、オープンソースの自動トラッキングツール「ActivityWatch」と連携させることで、あなたのコーディングフローを精密に計測する仕組みを構築しましょう。

—

1. なぜ「外部ツール」との連携が必要なのか?

多くのタイマーアプリは「手動」です。しかし、人間は集中し始めるとタイマーを押し忘れます。そこで、エディタが自ら「今、このファイルを開いた」と報告する仕組みを作ります。

今回構築するアーキテクチャの要は以下の3点です。

  • ActivityWatch (Watcher/Server): データの記録と分析エンジン。
  • Sublime Text (Event Listener): ファイルのフォーカス変更を検知するトリガー。
  • HTTP API: エディタから計測データ(ファイル名、パス、プロジェクト)をActivityWatchへ飛ばすパイプライン。

この構成により、「どの機能の実装に時間がかかり、どのファイルで詰まっているのか」が、誤差0秒の精度で明らかになります。

—

2. 基盤となる「ActivityWatch」の準備

まずは、データを受け取る母艦を立てます。

1. [ActivityWatch公式サイト](https://activitywatch.net/)からデスクトップ版をインストール。
2. 起動すると `localhost:5600` でWebダッシュボードが立ち上がります。
3. これで、システム全体のアクティビティを記録する準備は完了です。

—

3. Sublime Textを「計測デバイス」に変える

Sublime Textには、強力なPython APIが搭載されています。これを使って、ファイルを開いた瞬間にその情報をActivityWatchのAPIに投げるプラグインを書きましょう。

ステップ1:プラグインフォルダを開く

メニューの `Tools` > `Developer` > `New Plugin…` を選択してください。

ステップ2:イベントリスナーの実装

以下のコードをコピーして、`activity_logger.py` という名前で保存してください。

import sublime
import sublime_plugin
import urllib.request
import json
import threading

ActivityWatchのAPIエンドポイント(デフォルト設定)
AW_URL = “http://localhost:5600/api/default/buckets/sublime-text-tracker/events”

class ActivityLogger(sublime_plugin.EventListener):
def on_activated(self, view):
# ファイルが特定された場合のみ記録(無題ファイルなどは除外可能)
if view.file_name():
self.send_to_aw(view.file_name())

def send_to_aw(self, file_path):
# 非同期スレッドで処理し、エディタのUIを一切止めないのがコツ
threading.Thread(target=self._post_data, args=(file_path,)).start()

def _post_data(self, file_path):
data = {
“label”: file_path,
“timestamp”: None, # ActivityWatch側で補完させる
“data”: {“file”: file_path}
}
req = urllib.request.Request(AW_URL, data=json.dumps(data).encode(), method=’POST’)
req.add_header(‘Content-Type’, ‘application/json’)
try:
urllib.request.urlopen(req)
except:
# サーバーが落ちている時は静かに無視する(エディタの安定性優先)
pass

—

4. 精度高い「HelloWorld」的動作確認

コードを保存した瞬間に、プラグインはアクティブになります。

1. Sublime Textで適当なファイルを開いてみてください。
2. `http://localhost:5600` にアクセスし、「Buckets」セクションを確認します。
3. `sublime-text-tracker` という項目があれば成功です。

もしデータが見当たらない場合は、Sublime Textのコンソール (`Ctrl + ` `) を開き、エラーが出ていないか確認しましょう。このコンソールこそが、開発環境の健康診断ツールです。

—

5. この環境がもたらす「知見」

この設定を行うと、あなたは「自分のコーディングの癖」を客観視できるようになります。

  • ボトルネックの発見: 特定のディレクトリやファイルを開いている時間が異様に長い場合、そこが「リファクタリングすべき複雑なコード」である可能性が高い。
  • 集中力の可視化: どの時間帯に最も生産的なコーディングができているか(あるいは、どの時間帯に無駄なスイッチングが多いか)がグラフで明確になります。

最後に:エンジニアは「計測」から成長する

「なんとなく」で作業をしているうちは、一生「なんとなく」の生産性しか出せません。しかし、今回のようにエディタを拡張し、自分の作業ログをデータ化し始めた瞬間、エンジニアとしてのステージは確実に一段上がります。

まずは今日から、この「Sublime Textのログ」を眺めてみてください。きっと、昨日までの自分とは違う「改善のヒント」が見えてくるはずです。

何か設定で詰まったら、いつでもコンソールを開いてください。そのエラーログこそが、あなたの開発環境が進化するための道しるべになりますよ。

タイトルとURLをコピーしました