Creator tips

GASでGoogleカレンダーと連携!作業時間を自動記録・可視化する方法【テンプレ付き】


✅ この記事はこんな人におすすめ

  • 自分が何にどれだけ時間を使っているか把握したい
  • Googleカレンダーを使っているけど、記録の整理が面倒
  • GAS(Google Apps Script)で時間管理を自動化したい
  • Excelやスプレッドシートへの集計を効率化したい

はじめに|時間の「見える化」は最強の生産性ツール

「時間がない」「1日が終わるのが早い」と感じていませんか?
原因は、“何に時間を使っているかが見えていない”ことにあります。

Googleカレンダーは予定を記録するのに便利ですが、「あとから見返して集計するには不向き」という欠点もあります。

そこで活躍するのが GAS(Google Apps Script)
GASを使えば、カレンダーのイベントを自動取得して、作業内容ごとに合計時間を算出・スプレッドシートに出力することができます。


実現すること|完成形のイメージ

GASでできること:

内容実現方法
カレンダーイベントの自動取得GASでAPI経由で読み込み
作業カテゴリ別の分類イベントタイトルに「#タグ」などで分類
集計結果をスプレッドシートに出力日別/週別/カテゴリ別に自動集計

👇 スプレッドシートに以下のようなデータが自動で出力されます:

日付カテゴリ作業時間(分)
2025-06-03#執筆120
2025-06-03#会議45
2025-06-04#リサーチ90

ステップ①|Googleスプレッドシートを準備

  1. Googleスプレッドシートを新規作成
  2. シート名を「TimeLog」などに変更
  3. ヘッダー行に以下を入力:
cssコピーする編集するA列:日付  
B列:カテゴリ  
C列:時間(分)  

ステップ②|GASスクリプトを作成

  1. スプレッドシート → 拡張機能 → Apps Script を開く
  2. 以下のコードを貼り付け:
javascriptコピーする編集するfunction logCalendarEvents() {
  const calendarId = 'primary'; // 自分のカレンダーID(基本は primary)
  const calendar = CalendarApp.getCalendarById(calendarId);
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('TimeLog');
  const now = new Date();
  const sevenDaysAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000); // 過去7日間

  // 一旦シートを初期化
  sheet.clearContents();
  sheet.appendRow(['日付', 'カテゴリ', '時間(分)']);

  const events = calendar.getEvents(sevenDaysAgo, now);

  const log = {};

  events.forEach(event => {
    const title = event.getTitle();
    const start = event.getStartTime();
    const end = event.getEndTime();
    const duration = (end - start) / (1000 * 60); // 分単位

    // カテゴリ(例:タイトルに「#執筆」「#会議」などを含める)
    const match = title.match(/#\w+/);
    const category = match ? match[0] : '#未分類';

    const date = Utilities.formatDate(start, Session.getScriptTimeZone(), 'yyyy-MM-dd');

    const key = `${date}_${category}`;
    if (!log[key]) {
      log[key] = 0;
    }
    log[key] += duration;
  });

  // 出力
  Object.keys(log).forEach(key => {
    const [date, category] = key.split('_');
    const duration = Math.round(log[key]);
    sheet.appendRow([date, category, duration]);
  });
}

ステップ③|スクリプトの実行と自動化

  1. 上記関数を保存し、「logCalendarEvents」を選択して実行(初回は認証が必要)
  2. 正常に動作すれば、過去7日間の作業内容と時間がスプレッドシートに記録されます

⏰ 定期実行の設定(トリガー)

  1. Apps Script → 左側メニュー「トリガー」 → 「+トリガーを追加」
  2. 関数:logCalendarEvents
  3. 実行タイミング:時間主導型 → 日次(朝など)でOK

活用Tips|より実用的に使うコツ

✅ カテゴリ分けのタグルールを統一しよう

  • 「#執筆」「#会議」「#学習」など
  • カレンダー予定のタイトルの最後に「#タグ」を付けるだけで分類可能

✅ 色別にカレンダーを使い分けるのもアリ

カレンダーごとにフィルターを変えて処理も可能です(関数を複製してカレンダーIDを切り替える)


よくある質問(FAQ)


Q1. GAS初心者でも使えますか?

→ はい。上記コードを貼り付けて動かすだけで基本動作します。
ただし、初回のみ認証許可が必要です(Gmail連携のため)。


Q2. 日ごとの合計だけでなく「カテゴリ別の累計」が欲しい

→ スプレッドシート側で ピボットテーブル を使えば、カテゴリ別・日別の時間集計も簡単にできます。


Q3. 予定にタグが付いていない場合はどうなる?

→ 自動的に「#未分類」として集計されます。タグ付け忘れが可視化されるので改善にもつながります。


まとめ|GASで時間管理はここまで自動化できる

作業時間を見える化するだけで、ムダな時間や非効率が浮き彫りになり、生産性が格段に上がります。
GASとGoogleカレンダーの連携は、一度設定してしまえばあとは放置でOKの最強の時間管理術です。