XENEXE

Google Apps Script を用いて Toggl のデータを Google カレンダーに移行する


heroImage

1. はじめに

筆者は,タイムトラッキングアプリである Toggl を日常的に愛用しています。しかし,記録データはワークフローの関係上 Google カレンダーで一括管理したい。そこで,本記事では Google Apps Script を用いて Toggl に記録されているデータを Google カレンダーに一括移行するスクリプトについて記述する。

2. 要件定義

実現したい要件として,以下の 2 つが挙げられます。

  1. Toggl に記録されている Time Entrys を Google カレンダーに移行する
  2. Toggl に記録されている Time Entrys を削除する

3. 事前準備

事前準備として,以下の 2 つを取得する必要があります。

TOGGLAPI_TOKEN は,_Profile settings に表示されているので記録しておきます。

GOOGLE*CALENDAR_ID は,*設定と共有_ に表示されているので記録しておきます。

4. 実装

先行記事Toggl API doc を参考に実装したソースコードを以下に示します。[TOGGL_API_TOKEN][GOOGLE_CALENDAR_ID] は,上記で取得した TOGGL_API_TOKENGOOGLE_CALENDAR_ID に置換します。

1
function main() {
2
const TOGGL_API_TOKEN = '[TOGGL_API_TOKEN]'
3
const GOOGLE_CALENDAR_ID = '[GOOGLE_CALENDAR_ID]'
4
5
// 終了時刻が設定されている + タグが付いていない Time Entrys を取得する
6
const timeEntrys = JSON.parse(
7
UrlFetchApp.fetch(
8
(url = 'https://www.toggl.com/api/v8/time_entries'),
9
(params = {
10
method: 'GET',
11
headers: { Authorization: 'Basic ' + Utilities.base64Encode(TOGGL_API_TOKEN + ':api_token') },
12
muteHttpExceptions: true,
13
}),
14
),
15
).filter(function (x) {
16
return x.stop && !x.tags
17
})
18
19
const calApp = CalendarApp.getCalendarById(GOOGLE_CALENDAR_ID)
20
21
timeEntrys.forEach(function (x) {
22
// Google Calendar にイベントを追加する
23
calApp.createEvent((title = x.description), (startTime = new Date(x.start)), (endTime = new Date(x.stop)))
24
// Time Entrys にタグを追加する
25
UrlFetchApp.fetch(
26
(url = 'https://www.toggl.com/api/v8/time_entries/' + x.id),
27
(params = {
28
method: 'PUT',
29
headers: { Authorization: 'Basic ' + Utilities.base64Encode(TOGGL_API_TOKEN + ':api_token') },
30
contentType: 'application/json',
31
payload: JSON.stringify({ time_entry: { tags: ['Logged'], tag_action: 'add' } }),
32
muteHttpExceptions: true,
33
}),
34
)
35
})
36
}

Toggl の Free プランでは,Time Entrys を Delete する API が叩けないため,要件の「② Toggl に記録されている Time Entrys を削除する」を満たすことができません。そこで,Google カレンダーに移行した Time Entrys には Logged タグを付与し,Logged タグが付いている Time Entrys は Google カレンダー に移行しない仕様としました。

5. 運用

新しい Google Apps Script のプロジェクトを作成し,上記のソースコードをコピー&ペーストします。初回実行時は認証手続きが必要になるので,認証手順記事を参考に認証します。また,トリガーを設定しておくことで,Toggl に記録されている Time Entrys を自動的に Google カレンダーへ移行することができます。

6. おわりに

ここまで,本記事では Google Apps Script を用いて Toggl に記録されているデータを Google カレンダーに一括移行するスクリプトについて記述してきました。Google Apps Script と Google が提供しているサービスを組み合わせると様々なことができるので,Google Apps Script を触ったことない方は Google Apps Script で遊んでみてほしいです。