時間管理アプリ:Toggl Track活用術 ~アプリ版、Integration、APIで「どこでもタイマー」
はじめに
考現学をご存知でしょうか。今 和次郎(こん わじろう:1888-1973)が提唱・実践し、現代(同時代)の生活諸相を悉く観察・記録せんとする学問で、その観察対象は民家の垣根、植木鉢、ベンチから、銀座を歩く人々の服装・髪型・髭の形、茶碗の割れ目、学生の机上の配置物、日常のあらゆる場面・物体に及びます。
今和次郎の仕事のアンソロジー『考現学入門 (ちくま文庫)』を読んだ私は「何か身の回りのものを観察・記録してみたい」と思い立ちました。
身の回りにあって、見逃しがちなもの。...そうだ、時間だ。
というわけで日々の仕事に費やされる時間を観察・記録するために仕事でToggl Trackを愛用しています。これがまた使いやすく、楽しい。
もっとも「Toggl Trackが便利・最高!」という記事は世に数多あります。それでも、あまりに便利なので屋上屋を架し、Toggl Trackの私的活用術を記事にすることにしました。ときに「屋上に架された屋」だって面白いものです。超芸術トマソン[1]です。
先に線引きをしておくと、この記事ではシームレスにどこからでも、簡単に計測する工夫の共有を主眼として、Toggl Trackの基本的な使い方は先行記事にゆずり、マルチデバイスアプリ、連携機能(Integration)、APIの利用例に記述を割いています。まずは目次を眺めてみてください。
読者はToggl Trackを使ったことのない方、使っていたけれど飽きてしまった方、今和次郎のような物好きを想定しています。そうでない方は、今和次郎の本を読んでみてください。⇒ 今和次郎: 考現学入門 (ちくま文庫)
目次
- Toggl Trackとは
- スマホアプリ・デスクトップアプリを活用する
- スマホアプリ
- 主な機能
- デスクトップアプリ
- ショートカット設定(起動、計測の開始/停止)
- 自動停止(Idle Detection)
- 計測漏れリマインド
- 自動追跡(Autotracker)
- スマホアプリ
- 外部アプリと連携する(Integration)
- Googleカレンダー
- Gmail
- GitHub
- APIで自在に連携 ~Slackステータスを同期させる
- APIキーを取得
- Google Apps Scriptを書く
- 実行
- 無料版でも充実のPDFレポート
Toggl Trackとは
ホームページに標榜の通り、「時間とお金を節約するためのシンプルな時間追跡」アプリがToggl Track。ユーザーは500万人を越え。日本でもリモートワークでの時間管理ツールとしてよく紹介されていました。
有料・無料版とありますが、個人で使う場合は無料プランでも十分な機能が揃っています。
- 計測数制限無し
- プロジェクト、タグ等の設定制限なし
- データのExport、Import
- 100種類超の連携(integration)
全般的にUIがわかりやすいので、アカウント登録して、とりあえず計測しながら、あちこちいじってみるのがおすすめです。導入や概要は下記の記事等を参考にしてください。
さて、以下では シームレスにどこからでも、簡単に時間計測するうえで、個人的に役に立ったポイントに焦点を当てて紹介します。
スマホアプリ・デスクトップアプリを活用する
どこからでも計測できるように、Toggl Trackにはスマホアプリ、ブラウザアプリがあります。
いずれも無料版でも広告やアップグレード要求はなく、ストレスない使用感です。なにより、デバイス間の同期が優れています。
スマホアプリ
iOS版を使用。座右で計測[2]ができ、カレンダー参照にも便利です。
iOS
Android
主な機能
- 時間の計測開始・停止(新規エントリー/過去エントリーの再開)
- カレンダーの確認
計測履歴のほか、後述の連携でGoogleカレンダーの予定も参照できます。
過去の計測一覧 項目名とプロジェクトごとにまとまる。 |
カレンダー 計測履歴と連携カレンダーがチェックできる |
- 統計レポートの確認
日ごとの計測時間累計(棒グラフ)/プロジェクトごとの使用時間(円グラフ)/期間指定 - ウィジェット対応
iOS16で追加されたホームウィジェットこそまだありませんが、サイズは1/6、1/3、2/3まで揃っています。アプリを開かず計測開始、過去の計測の再開ができます。
レポート | ウィジェット |
なお、Apple Watchにも対応しているそうですが、過去の計測の再開のみとのこと。この記事のようにiOSの「ショートカット」でAPIを叩く技があります。
どうしてもApple Watchで計測したい場合はデスクトップアプリ
PC(Windows)にもデスクトップアプリを入れています。これまた良いものです。
好みにあわせて、下記のような設定ができます。
ショートカット設定(起動、計測の開始/停止)
自動停止(Idle Detection)
設定した分数操作がない場合、PCを閉じたときに自動停止する設定ができます。
何分で停止するか設定
サボってるでしょ!
計測漏れリマインド
リマインド間隔と勤務時間を指定し、その間計測がないと通知を出してくれます。
通知はこんな感じ
曜日で指定できるのも素敵
自動追跡(Autotracker)
時間や開いているウインドウ名でトリガを設定し、自動追跡することもできます。
私は
- 始業時間に無題の計測を開始
- 「受信トレイ」を含むウインドウが開いたら、「メールチェック」の計測を開始
の二つを設定をしています。
タイマーがすでに走っている場合は自動追跡しない、追跡前の確認モーダルを出さない、といった細部への気遣いがToggl Trackの神アプリたるゆえん。
外部アプリと連携する(Integration)~Googleカレンダー/Gmail/GitHub
100以上の外部アプリ連携を誇るToggl Trackから、GoogleカレンダーとChrome(Gmail、GitHub)の連携を紹介します。
Googleカレンダー
ダッシュボードの「Integrations」からGoogleカレンダーを選択し、アカウント認証するだけで連携できます。また、連携するカレンダーも選択可能です。
連携が完了すると、External CalenderとしてGoogleカレンダーの内容が追加されます。
Gmail / GitHub連携(Chrome)
メールやissueからワンクリック計測。かなり捗ります。
Chrome拡張機能を追加
まずはChrome拡張機能を追加し、各サービスと連携します。
手順
- Chrome拡張機能をダウンロード
- 拡張機能のオプションを開く
- 連携したいサービスを選択
拡張機能を固定しておくとChromeから計測ができます。固定しましょう。
連携を有効化すると有効化したサイトに、ピンクの計測ボタンが現れます。
Gmail
連携設定が完了すると計測ボタンが出現
クリックすると、メールのsubjectを項目名にした計測が可能です。
GiHub
GitHubのissueごとにどのくらい時間がかかっているか、Toggl Trackだと簡単に計測ができます。
Gmailと同じような計測ボタンが出現
issueタイトルが入った状態で計測開始
一度計測した項目はスマホアプリやChromeの計測ボタンなどから再計測することができます。さらに項目名とプロジェクトが一致した計測は自動でまとまるので、issueごとの累計時間の管理も容易です。
ただし、GitHubプロジェクトで開いたissueとの連携にまだ難があり、正常にissueが認識されません。GitHubプロジェクトのリリースから日が浅いので今後のアップデートに期待です。[3]
"Loading..."になる
APIで自在に連携 ~Slackステータスを同期させる
デフォルトでも様々な連携が可能なToggl Trackですが、よりflexibleな連携を行いたいユーザーのために Toggl Track API が用意されています。
一例として、Toggl Trackの計測内容をSlackのステータスに同期させてみます。
完成図
APIキーを取得
Toggl Track
APIキーは「Profile」欄から取得できます。
Slack
ワークスペースからアプリを作成し、取得します。詳細は割愛します。
Google Apps Scriptを書く
取得したAPIキーをGoogle Apps Scriptのスクリプトプロパティ("TOGGL_APIKEY"/"SLACK_TOKEN")に格納のうえ、下記コード例のSlackのUser IDを置き換えてください。
Toggl APIの認証は、
headers: { Authorization: "Basic " + Utilities.base64Encode(<Toggl API Key>) }
を渡します。
コードサンプル
/**
* Toggl Trackの計測内容をSlackに反映
* Toggl Trackのプロジェクト内容に応じてSlackのアイコンを変更
*/
function getTogglData() {
const authkey = PropertiesService.getScriptProperties().getProperty("TOGGL_APIKEY");
const toggleEndpoint = "https://api.track.toggl.com/api/v9/me/time_entries/current";
const options = {
method: "get",
headers: { Authorization: "Basic " + Utilities.base64Encode(authkey) },
};
const response = JSON.parse(UrlFetchApp.fetch(toggleEndpoint, options).getContentText());
if (!response) {
changeSlackStatus("", ":zzz:");
return;
}
const description = response.description;
const emoji = (description) => {
if (description.indexOf("ミーティング") > -1 || response.project_id == getProjectId("ミーティング")) {
return ":virtual-meeting:";
}
else if (description.indexOf("休憩") > -1) {
return ":bento:";
}
else {
return ":alarm_clock:";
}
};
if (!changeSlackStatus(description, emoji(description))) {
console.error("エラーが発生しました。");
return "エラー";
}
return `同期完了:${response.description}`;
}
/**
* Slackのステータスを変更する
*/
function changeSlackStatus(text, emoji) {
const status_url = "https://slack.com/api/users.profile.set";
const headers = {
Authorization: "Bearer " + PropertiesService.getScriptProperties().getProperty("SLACK_TOKEN"),
"Content-Type": "application/json; charset=utf-8",
};
const payload = {
user: "<Your Slack User ID>",
profile: {
status_text: text,
status_emoji: emoji,
},
};
const options = {
method: "post",
headers: headers,
payload: JSON.stringify(payload),
};
const response = UrlFetchApp.fetch(status_url, options).getContentText();
console.log(response);
if (JSON.parse(response).ok) {
return true;
}
else {
return false;
}
}
/**
* 引数に一致するToggl TrackのプロジェクトIDを取得
*/
function getProjectId(projectName) {
const authkey = PropertiesService.getScriptProperties().getProperty("TOGGL_APIKEY");
const toggleEndpoint = "https://api.track.toggl.com/api/v9/me/projects";
const options = {
method: "get",
headers: { Authorization: "Basic " + Utilities.base64Encode(authkey) },
};
const response = JSON.parse(UrlFetchApp.fetch(toggleEndpoint, options).getContentText());
let result;
response.some((project) => {
if (project.name == projectName) {
result = project.id;
return true;
}
});
return result;
}
これを実行すると同期ができます。
実行
実行方法は、
- Google Apps Scriptの定期トリガ
- デプロイし、URLで実行する
などでしょうか。後者の場合は、以下のコードを追加し、デプロイしてください。
function doGet(e) {
return ContentService.createTextOutput(getTogglData());
}
私はトリガの空打ちを嫌ってAutoHotkeyを使い、ショートカットキーにGoogle Apps ScriptへのHTTPリクエストを割り当て、任意のタイミングで実行しています。
AutoHotkeyのスクリプトサンプル
;Togglの情報をSlackに反映させる
;CapsLockをF13に充てている
F13 & z::
req := ComObjCreate("WinHttp.WinHttpRequest.5.1")
req.Open("GET","https://script.google.com/macros/s/XXXXXXXXX/exec", true)
req.Send(Data)
req.WaitForResponse()
MsgBox % req.ResponseText
return
無料版でも充実のPDFレポート
しっかりデータが取れたら、お楽しみのレポート出力です。
計測結果のヴィジュアライゼーション、項目・プロジェクト・tagでのグループ化、期間指定、ダウンロードなど、無料版でも十分な機能が利用できます。
レポートは無料版だとリンク共有はできませんが、pdfでダウンロードすることができます。
pdfの内容はプロジェクトごとの割合(円グラフ)、項目別の集計と基本は抑えられています。
Reportから期間指定してダウンロード
日ごとの計測時間
プロジェクト別 | 項目別 |
さながら資産ポートフォリオを見ているようで、Time is Moneyを刷り込まれている気がしますが、感覚と数値が異なるところを見つけたり、リバランス(時間の再配分)を考えたり、楽しいです。
おわりに
時間について考えるとき、ミヒャエル・エンデの『モモ』の印象的な一節を思い出します。
時間をはかるにはカレンダーや時計がありますが、はかってみたところであまり意味はありません。というのは、だれでも知っているとおり、その時間にどんなことがあったかによって、わずか一時間でも永遠の長さに感じられることもあれば、ほんの一瞬と思えることもあるからです。
なぜなら時間とは、生きるということ、そのものだからです。そして人のいのちは心を住みかとしているからです。(ミヒャエル・エンデ『モモ』大島 かおり訳、岩波書店)
でもToggl Trackで時間をはかって見ると、かえって自分の時間感覚と計測された機械的な時間とのズレに気付かされます。あたりまえのようにあるけれど、掴みどころなく流れていく日常の秘密、時間。つくづく不思議なものです。
効率化を目指すもよし、時間について考える機会にするもよし。Toggl Track、ぜひお試しください。
-
超芸術トマソンとは、...ここで説明するよりもWikipediaの記事でもご覧ください。「超芸術トマソン」を「発見」した赤瀬川原平は、今和次郎の考現学に私淑する「路上観察学会」のメンバー。「路上観察学会」の研究成果を集めた『路上観察学入門』(ちくま文庫)はおすすめです。 ↩︎
-
私は左手で持つため、スマホは机の左側、座左に置くことが多いです。 ↩︎
-
Toggl Trackにフィードバックしたところ、調査するとのお返事がありました。はたして。 ↩︎
Discussion