1. はじめに
筆者は,タイムトラッキングアプリである Toggl を日常的に愛用しています。しかし,記録データはワークフローの関係上 Google カレンダーで一括管理したい。そこで,本記事では Google Apps Script を用いて Toggl に記録されているデータを Google カレンダーに一括移行するスクリプトについて記述する。
2. 要件定義
実現したい要件として,以下の 2 つが挙げられます。
- Toggl に記録されている Time Entrys を Google カレンダーに移行する
- Toggl に記録されている Time Entrys を削除する
3. 事前準備
事前準備として,以下の 2 つを取得する必要があります。
- TOGGL_API_TOKEN
- GOOGLE_CALENDAR_ID
TOGGLAPI_TOKEN は,_Profile settings に表示されているので記録しておきます。
GOOGLE*CALENDAR_ID は,*設定と共有_ に表示されているので記録しておきます。
4. 実装
先行記事と Toggl API doc を参考に実装したソースコードを以下に示します。[TOGGL_API_TOKEN] と [GOOGLE_CALENDAR_ID] は,上記で取得した TOGGL_API_TOKEN と GOOGLE_CALENDAR_ID に置換します。
function main() { const TOGGL_API_TOKEN = '[TOGGL_API_TOKEN]' const GOOGLE_CALENDAR_ID = '[GOOGLE_CALENDAR_ID]'
// 終了時刻が設定されている + タグが付いていない Time Entrys を取得する const timeEntrys = JSON.parse( UrlFetchApp.fetch( (url = 'https://www.toggl.com/api/v8/time_entries'), (params = { method: 'GET', headers: { Authorization: 'Basic ' + Utilities.base64Encode(TOGGL_API_TOKEN + ':api_token') }, muteHttpExceptions: true, }), ), ).filter(function (x) { return x.stop && !x.tags })
const calApp = CalendarApp.getCalendarById(GOOGLE_CALENDAR_ID)
timeEntrys.forEach(function (x) { // Google Calendar にイベントを追加する calApp.createEvent((title = x.description), (startTime = new Date(x.start)), (endTime = new Date(x.stop))) // Time Entrys にタグを追加する UrlFetchApp.fetch( (url = 'https://www.toggl.com/api/v8/time_entries/' + x.id), (params = { method: 'PUT', headers: { Authorization: 'Basic ' + Utilities.base64Encode(TOGGL_API_TOKEN + ':api_token') }, contentType: 'application/json', payload: JSON.stringify({ time_entry: { tags: ['Logged'], tag_action: 'add' } }), muteHttpExceptions: true, }), ) })}
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 で遊んでみてほしいです。