ハイブリッドでいこうぜ

いいとこ取りを目指して試行錯誤するブログ

TogglのログをGoogleカレンダーに自動記録するスクリプトを書いた

f:id:m-kawaguchi:20171209063552p:plain:w320

こんなことに困っていました

私は長らくタスクログの記録にTogglというツールを使っています。

行動履歴をとることのできる便利なツールなのですが、ログをGoogleCalendarにお金をかけず、出力したい

と、思うようになりました。

解決策として考えられる方法は2つ

  1. Zapierというサービスを経由する
  2. CSVエクスポート/インポートを駆使する

これらで、お金をかけずGoogleCalendarにログを反映することはできます。

Zapier経由のログ反映

一番楽なのは、Zapier経由なのですが、こまめに記録を取っているような使い方をしているとあっという間にフリープランの制限を超えてしまいます。

私の場合は、数日で超えてしまうのでこの方法ではライフログを記録するのには適していませんでした。

普通の使い方または、これからログを取ろうとしている人は、おそらく制限に収まります。 制限に収まる使い方をしているのなら、一番簡単なのでオススメです。

調べたところ、詳しく説明されているブログがありましたのでこちらを参照されると良いでしょう。

Togglの行動履歴をGoogleカレンダーに「無料で」取り込む唯一の方法 - Getting My Life Better

CSV経由のログ反映

この他の方法だとCSV経由という方法があります。

Togglにログインをし、行動履歴をCSVにエクスポート、ちょっとCSVを加工してGoogleCalendarにインポートをすることでGoogleCalendarに反映することもできます。

詳しくはこちら。

TogglのデータをGoogleカレンダーに反映させて行動を可視化する | Rebuild KO

今まで、このCSV経由でなんとかやってきたのですが、はっきりいって手間です。

これらで解決できない人はどうすれば良いのか

CSV経由であれば、制限なくログをGoogleカレンダーに反映することはできますが、

やはりZapier経由のように本当は、

自動的にGoogleCalendarに反映したい

これを見ているあなたも、

そうでしょう?

そこで、作りました

一応、本職、Webエンジニアですので…

とはいえ、Webサービス化するのは時間を要してしまうのでニーズ検証も兼ねた簡易的なものです。

もしも、反響があったり、ニーズがあるようでしたらサービス化してもいいですね。

ひとまず、Googleアカウントは多くの人が持っているだろうという仮説から

GoogleAppsScript経由での実装を行いました。

ソースコードの反映や手順がちょっと手間なのが難点ですが、 この手段であれば、比較的楽に結構やりたいことができるはずだと思い立ち、作り、公開をしてみることにしました。

ソースコードはこちらです。

mkawaguchi/toggl_exporter

使い方

GoogleAppsScriptを作成する

大半の人は有効になっていないと思いますので、まず有効にしましょう。

f:id:m-kawaguchi:20171113082128p:plain:w480

新規ボタン→アプリを追加 (私の場合は、すでに使っていたのでメニューに出ています)

f:id:m-kawaguchi:20171113070218p:plain:w480

Google Apps Scriptを検索して追加します。

初期画面

f:id:m-kawaguchi:20171113070208p:plain:w480

必要なライブラリを追加する

moment.jsというライブラリを使っている関係で、一手間必要です。

プロジェクトキー: MHMchiX6c1bwSqGM1PZiW_PxhMjh3Sh48
f:id:m-kawaguchi:20171113081933p:plain:w480

リソース→ライブラリ...を選択

f:id:m-kawaguchi:20171113070250p:plain:w480

ライブラリを追加のフォームに上記プロジェクトキーを追加します

ソースコードを取得する

mkawaguchi/toggl_exporter

こちらよりソースコードを表示、コピペする

f:id:m-kawaguchi:20171112201032p:plain:w480

TogglのAPI tokenを取得する

Togglにログイン 「自分のアバターをクリック」→「Profile Settings」→「API token」

var TOGGL_BASIC_AUTH = 'REPLACE_ME:api_token';

REPLACE_MEのところだけを先ほど取得した「API token」(英数字の羅列)に置き換えます。

もしも、togglのAPI tokenが ABCDEFG だとしたら、

var TOGGL_BASIC_AUTH = 'ABCDEFG:api_token';

のようになります。

GoogleCalendarのカレンダーIDを取得

「記録を反映したいカレンダーの詳細を表示」→「カレンダーのアドレスの項目にあるカレンダーIDを取得」

var GOOGLE_CALENDAR_ID = 'REPLACE_ME';

同様にREPLACE_MEをxxxxx@group.calendar.google.comに置換します。

以上ができたら、保存をして反映。

最後に自動起動する設定をする

プロジェクトを保存 好きな名前をつけてください。

色々警告が出ますが…AppScriptの仕様によるものなので、許可をしてください。

怪しいことはしてないですが、不安な人はソースコードを読んでいただければ。

f:id:m-kawaguchi:20171113081414p:plain:w480

3つほど許可が必要な理由

  • GoogleDriveへのアクセス 最後にログを記録した日時を保存するのに使います。 こうすることで、ログの多重記録を防ぎます。

  • 外部へのアクセス TogglのサービスのAPI経由でデータを取得するのに必要です。

  • Googleカレンダーへのアクセス これは、取得したログをカレンダーに反映するのに必要です。

「編集」→「現在のプロジェクトのトリガー」→「実行」を「watch」に指定。「時間主導型、分タイマー、15分ごと」で良いでしょう。 実行する間隔はもっと、長くても(1時間くらい?)良いかもしれません。

お疲れ様でした以上で設定完了です。 いつも通りTogglを使っていると、ログがカレンダーに反映されていることでしょう。

最後に

重要なことを一つだけ。

スクリプトは、MIT Licenseとします。 何らかの問題が生じたとしても、作者である私は何の責任も負えないことをご了承ください。

ご要望やご意見、その他わかりにくいことなどあれば、お答えします。 twitterなどで教えてくださいますと、モチベーションにもつながります😃

2018/4/6 追記:

検索エンジン等で、この記事を見て使ってくださっている方がいらっしゃいます。 導入をしてみたもののうまく動かないというフィードバックを時々いただきます。

動かない場合はまず、 Googleドライブに toggl_exporter_cache という前回実行した日時を記録するキャッシュファイルを作成していますが、 こちらの作成ができていることをご確認ください。

もし、作成できているようでしたら、一旦削除していただき、再実行を試みてください。 キャッシュを削除・再実行することで期待した動作をするケースが何例かありました。

2018/05/22追記:

動かないとお問い合わせいただく場合、大半のケースが設定不備によるものとなっています。

特にTogglのAPIキーを設定する場合、REPLACE_MEの部分だけをAPIキーに置き換える必要があるのですが、全て置き換えてしまい、動作しなくなるケースが多いです。

設定の後は、キャッシュをクリアしていただき、動作確認いただけますと幸いです。

記事の内容で導入をしたものの、うまく動かないということでしたらこちらお試し頂けますと幸いです。

それでも、うまく動かないようでしたら、個別お問い合わせください。

問題特定から解決までサポートいたします。

その際は、具体的なコードやスクリーンショット、試したことなどを教えていただけますと、とても助かります。