ハイブリッドでいこう

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

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

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

【対応が必要です】本スクリプトをご利用の皆様へ

Toggl APIの仕様変更があり、APIのホスト名が2021年6月30日に変更されます。 これに伴い、本スクリプトで使用しているToggl APIのホスト名も変更が必要です。

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

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

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

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

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

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

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

方法1. Zapier経由のログ反映

一番楽なのは、Zapier経由なのですが、こまめに記録を取っているような使い方をしていると、無料プランの月間100リクエストを超えてしまいます。

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

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

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

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

方法2. CSV経由のログ反映

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

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

詳しくはこちら。

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

かつて、このCSV経由で毎週一度のリピートタスクとしてなんとかやってきたのですが、はっきりいって手間です。

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

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

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

自動的にGoogleCalendarに、しかも、制限なく反映したい

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

そうでしょう?

そこで、第3の方法作りました

GoogleAppScriptを使って、本問題を解決するスクリプトを作りました。

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

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

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

スクリプトは、

一度設定してしまえば、あとは放置しておくだけで、 自動的にGoogleCalendarに制限なく記録することができるようになります。

お金もかかりません。

ひとまず、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というライブラリを使っている関係で、一手間必要です。

プロジェクトキー: 15hgNOjKHUG4UtyZl9clqBbl23sDvWMS8pfDJOyIapZk5RBqwL3i-rlCo
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などで教えてくださいますと、モチベーションにもつながります😃

機能改善、バージョンアップ、サポートは、私個人のSlackのワークスペースで受け付けることにしました。

無料です。

どうして無料でサポートなどをするのか?

無料でサポートや要望を受け入れる理由ですが、使ってくださる方との接点を持ちたいからです。

商材やコンサルなどを売るための営業をしたい…わけではなく、

機能改善や修正をしたときに、使ってくれる人に直接、「こんなの作ってみたけれど、どう?」とコミュニケーションをとる手段を持っていたいからです。

明確に使ってくださる方をイメージして、作ることができると正直、私の開発意欲が全然違います(笑)

この話は、いずれブログ記事に書こうかと思います。

Slackのワークスペースはこちら

お問い合わせいただく際は、

具体的なソースコードや設定方法などを、何をどこまでやってできなかったかの等のヒアリングをまず最初にさせていただきます。

そのあと、問題特定を行い実際に解決までお付き合いをさせていただきます。

今までの実績ですと15分程度あれば、解決したケースが多かったです。

その後のトラブル対応などで学んだことを追記してます

2018/4/6 追記:

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

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

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

2018/05/22追記:

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

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

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

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

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

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

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

2019/03/16追記:

要望をいただいていた「プロジェクト名も一緒に出力したい」の対応をしました。

2021/03/07追記: GoogleAppScriptの仕様変更に伴いmoment.jsのライブラリのIDが変更になりました。 (旧スクリプトIDから新スクリプトIDに置き換わっただけで中身は同じです)