YouTubeでも発信中!!ガジェット中心

Googleカレンダーが最強になった。Gemini+GASで「タスクの不満」を自動化する方法

こんにちは、Yujiです。

Googleカレンダーは便利だけど、タスク管理については正直ちょっと使いにくい。

僕自身、これが理由で長い間Googleカレンダーへ完全移行できませんでした。以前使っていたのは「FirstSeed Calendar」。

FirstSeed Calendar自体はかなり使いやすく、特に気に入っていたのがタスク管理です。

それでも最近、

  • GeminiをはじめとしたAIや、
  • Googleサービスとの連携を考えて、

Googleカレンダーへ本格的に移行しました。とはいえ、Googleカレンダーの使いにくい部分を我慢して乗り換えたわけではありません。

その不満を解消するために、

Gemini+Google Apps Script(GAS)を使って、自分が不満だった部分をカスタマイズしました。

これが想像していた以上に便利。しかも僕自身、プログラミングができるわけではありません。むしろキホンの『キ』すら知らない。

けど、Geminiにコードを書いてもらえば、僕がやるのは基本的に完成したコードを貼り付けて設定するだけ。

今回の内容

僕が実際に行ったGoogleカレンダー+Google Tasksのカスタマイズ方法を、GASを使ったことがない人にも分かるように紹介します。

Googleカレンダーへ移行した理由

最初に言っておくと、Googleカレンダーがすべてにおいて一番使いやすいと思っているわけではありません。

むしろ、カレンダーアプリ単体の使い勝手ならFirstSeed Calendarはかなり優秀です。

僕も長く使っていましたし、特にタスク管理についてはGoogleカレンダーより気に入っている部分もあります。それでもGoogleカレンダーへ移行した大きな理由が、AIとの連携。

僕は以前、YouTubeでも「課金するAIならGeminiがおすすめ」という内容を紹介しました。

そしてGeminiを使えば使うほど、

  • Gメール
  • Googleカレンダー
  • Google Tasks
  • Googleドライブ
  • Googleドキュメント
  • Googleスプレッドシート

など、Googleサービスをまとめて使うメリットが大きくなってきたと感じています。

カレンダー単体で考えるのではなく、「今後AIを含めて仕事や生活を効率化するなら、どのサービスを中心にするか?」

ここまで考えた結果、僕はGoogleカレンダーを選びました。

Googleカレンダーに乗り換えられなかった2つの理由

以前から何度かGoogleカレンダーへの移行は考えていました。それでもFirstSeed Calendarを使い続けていたのには、大きく2つ理由があります。

① 定期タスクでカレンダーが見づらくなる

1つ目が定期的なタスクの管理です。

僕が主に登録してるタスク
  • 毎月行うタスク
  • 3ヶ月ごとのタスク
  • 半年ごとのタスク
  • 1年ごとのタスク

一度タスクとして登録しておけば、自分で「そろそろやらないと」と覚えておく必要がありません。FirstSeed Calendarでは、この運用がかなりやりやすかったんですよね。

もちろんGoogle Tasksにも繰り返し設定があります。

ただ、繰り返しタスクをいくつも登録していくと、今後のタスクもGoogleカレンダー上に表示されるため、僕の場合はカレンダーがかなり見づらく感じました。

そこで今回、「タスクを完了したら次回分を自動的に作る」という仕組みに変更します。

例えば

3ヶ月ごとのタスクなら、今日のタスクを完了したあとに3ヶ月後のタスクを自動生成するイメージ。

これなら未来のタスクを必要以上に並べずに済みます。

② 未完了タスクを翌日に持ち越したい

もう1つ、僕にとってかなり重要なのが未完了タスクの自動繰り越しです。

僕はタスクを、「○月○日に絶対これをやる」という使い方だけではなく、「あ、これやらないと。とりあえず今日のタスクに入れておこう」という使い方をよくします。

その日のうちに終われば問題ありません。

ただ、

  • 仕事が忙しかったり
  • 別の予定が入ったりして、

できない日も当然あります。

FirstSeed Calendarを使っていたときは、こうした未完了タスクを翌日に持ち越す運用をしていました。

翌日になれば再び目に入るので、

「タスクを登録したこと自体を忘れる」

ということが減ります。

一方、Googleカレンダーでは期限を過ぎたタスクが元の日付に残るため、僕の使い方では見逃しやすいのが不満でした。

そこでGASを使って、

期限を過ぎた未完了タスクを今日の日付へ自動的に変更する

ようにしました。

Gemini+GASでGoogleカレンダーの不満を解決

今回実現したかったことをまとめると、こんな感じ。

項目カスタマイズ前カスタマイズ後
定期タスク標準の繰り返し機能を利用完了したら次回分を自動生成
未来のタスク繰り返し分が表示される必要な次回分だけ作成
未完了タスク過去の日付に残る今日へ自動繰り越し
コード作成プログラミング知識が必要Geminiを使って準備
タスク処理手動GASで自動化

この仕組みを実現するために使うのが、Google Apps Script(GAS)です。

Google Apps Script(GAS)とは?

「そもそもGASって何?」

という人もいると思います。僕も最初は難しそうなイメージしかありませんでした。

Google Apps Scriptとは簡単にいうと、『Googleのサービスを自動化できる仕組み』です。

例えばこんな事ができる
  • Googleカレンダー
  • Gmail
  • Google Tasks
  • Googleドライブ
  • Googleスプレッドシート

などを、決めたルールに沿って自動的に処理できる。

「プログラム」と聞いた瞬間に、「自分には無理……」と思うかもしれませんが安心してください。僕も同じです。そして今はそんな僕達のためにGeminiがあります。

自分でゼロからコードを書くのではなく、「こういうことを自x動化したい」とGeminiに伝えてコードを準備してもらい、それをGASへ貼り付ける。

僕自身も、プログラマーとしてGASを使っているわけではありません(むしろ使えません)。基本的には完成したコードをコピペして使っています。

そのくらいの感覚から始めて大丈夫です。

Googleカレンダーのタスクを自動化する方法

それでは、ここから実際の設定方法を紹介します。

大きく分けると3ステップ
  1. Google Tasksでタスクを作る
  2. Geminiでコードを準備する
  3. Google Apps Scriptにコードを貼り付けて自動実行する

一つずつ設定していきます。

STEP1:Google Tasksでタスクを作る

まずタスク自体は『Google Tasks(Google ToDo リスト)』で管理します。

日付を設定したGoogle Tasksのタスクは、Googleカレンダーにも表示されます。

定期タスクには「◆」を付ける

今回のコードでは、定期タスクとして処理したいタスクに一定のルールを設けています。

基本は、

タスク名の先頭に「◆」を付け、その後に繰り返したい周期を記載する

という方法です。

例えばこんな感じで登録する
  • ◆経費入力【毎月月末】
  • ◆おこづかい【毎月15日】
  • ◆空気清浄機のフィルター交換【3ヶ月後】
  • ◆日用品の買い物【毎週】

先頭の「◆」が、GAS側で定期タスクかどうかを判断する目印です。

タスクを完了すると次回分が作られる

例えば、『◆経費入力【毎月月末】』というタスクがあったとします。

このタスクを完了すると、GASが完了済みのタスクを検知。そこから毎月の月末に同じ内容のタスクを自動生成します。

つまり、

現在のタスクを完了 → 次回必要になるタイミングで新しいタスクを作成

という流れです。

これなら、最初から未来の繰り返しタスクを大量に表示する必要がありません。

STEP2:Geminiでコードを準備する

次にGeminiを使ってGASで使用するコードを準備します。

今回僕が実際に使用しているコードは、このあとそのまま掲載しています。ただし、

  • 「毎月ではなく2ヶ月ごとにしたい」
  • 「タスク名のルールを変更したい」

など、自分の使い方に合わせて変更したい場合はGeminiへ相談もできます。

例えば

「Google Tasksで完了したタスクを判定して、3ヶ月後に同じタスクを作成したい。GASで使えるコードを作って。」

これでGeminiがコードを書いてくれます。

さらに、「期限切れになった未完了タスクは今日の日付へ自動的に移動したい」と条件を追加していけば、自分の使い方に合わせたコードへ調整できます。

ここがAI時代の便利なところ。(マジでさまさまです)

ただし、AIが生成したコードが必ず正しいとは限らないので、いきなり大切なタスクで運用せず、まずはテスト用のタスクを作って正常に動作するか確認するのがおすすめです。

STEP3:GASにコードを貼り付ける

ここから実際にGoogle Apps Scriptを設定していきます。

初めて見ると難しそうですが、基本的には順番通り進めれば大丈夫です。

① Apps Scriptを開く

まずGoogle Apps Scriptを開きます。

② 新しいプロジェクトを作成する

「新しいプロジェクト」を選択します。

プロジェクト名は、自分が分かる名前でOKです。『Googleカレンダーのタスク自動化』みたいなのタイトルでOKです。

後から見たときに「何のGASだったっけ?」とならない名前にしておくのがおすすめです。

③ GASコードを貼り付ける

プロジェクトを作成するとコードエディタが表示されます。

最初からサンプルコードが入力されている場合は削除し、以下のコードを貼り付けます。

/**
 * 1. すべてのリストの完了タスク(◆付き)を検知して次回タスクを生成
 * 2. 期限切れ未完了タスクを今日の日付へ自動持ち越し(タイムゾーン補正版)
 */
function handleCompletedRecurringTasks() {
  const taskLists = Tasks.Tasklists.list();
  if (!taskLists.items || taskLists.items.length === 0) return;

  const now = new Date();
  const todayYMD = Utilities.formatDate(now, 'Asia/Tokyo', 'yyyy-MM-dd');
  const todayDueFormatted = `${todayYMD}T00:00:00.000Z`;

  taskLists.items.forEach(list => {
    const listId = list.id;

    const tasks = Tasks.Tasks.list(listId, {
      showCompleted: true,
      showHidden: true
    });

    if (!tasks.items) return;

    tasks.items.forEach(task => {
      // 機能①:完了済み定期タスクの次回生成
      if (task.status === 'completed' && task.title && task.title.startsWith('◆') && !task.title.startsWith('【処理済】')) {
        
        let baseDate = task.due ? new Date(task.due) : new Date();
        const baseYear = parseInt(Utilities.formatDate(baseDate, 'Asia/Tokyo', 'yyyy'), 10);
        const baseMonth = parseInt(Utilities.formatDate(baseDate, 'Asia/Tokyo', 'MM'), 10) - 1;
        const baseDay = parseInt(Utilities.formatDate(baseDate, 'Asia/Tokyo', 'dd'), 10);

        let nextDate = new Date(baseYear, baseMonth, baseDay);
        const title = task.title;
        let matched = false;

        if (title.includes('【毎月月末】') || title.includes('【月末】')) {
          nextDate = new Date(nextDate.getFullYear(), nextDate.getMonth() + 2, 0);
          matched = true;
        } else if (/【毎月(\d+)日】/.test(title)) {
          const day = parseInt(title.match(/【毎月(\d+)日】/)[1], 10);
          nextDate.setMonth(nextDate.getMonth() + 1);
          nextDate.setDate(day);
          matched = true;
        } else if (/【(\d+)(?:ヶ月|カ月|ケ月|ヶ月後|カ月後|ケ月後|ヶ後|か月後|ヶカ月後|ヵ月後)後?】/.test(title)) {
          const months = parseInt(title.match(/【(\d+)(?:ヶ月|カ月|ケ月|ヶ月後|カ月後|ケ月後|ヶ後|か月後|ヶカ月後|ヵ月後)後?】/)[1], 10);
          nextDate.setMonth(nextDate.getMonth() + months);
          matched = true;
        } else if (/【(\d+)年後】/.test(title)) {
          const years = parseInt(title.match(/【(\d+)年後】/)[1], 10);
          nextDate.setFullYear(nextDate.getFullYear() + years);
          matched = true;
        } else if (title.includes('【毎週】')) {
          nextDate.setDate(nextDate.getDate() + 7);
          matched = true;
        } else if (/【(\d+)週間後】/.test(title)) {
          const weeks = parseInt(title.match(/【(\d+)週間後】/)[1], 10);
          nextDate.setDate(nextDate.getDate() + (weeks * 7));
          matched = true;
        } else if (/【(\d+)日後】/.test(title)) {
          const days = parseInt(title.match(/【(\d+)日後】/)[1], 10);
          nextDate.setDate(nextDate.getDate() + days);
          matched = true;
        } else {
          nextDate.setMonth(nextDate.getMonth() + 1);
          matched = true;
        }

        if (matched) {
          const nextYMD = Utilities.formatDate(nextDate, 'Asia/Tokyo', 'yyyy-MM-dd');
          const nextDueFormatted = `${nextYMD}T00:00:00.000Z`;

          const newTask = {
            title: task.title,
            notes: task.notes || '',
            due: nextDueFormatted
          };
          Tasks.Tasks.insert(newTask, listId);

          task.title = '【処理済】' + task.title;
          Tasks.Tasks.update(task, listId, task.id);
        }
      }

      // 機能②:未完了タスクの今日への自動持ち越し
      if (task.status === 'needsAction' && task.due) {
        const taskDueYMD = Utilities.formatDate(new Date(task.due), 'Asia/Tokyo', 'yyyy-MM-dd');

        if (taskDueYMD < todayYMD) {
          task.due = todayDueFormatted;
          Tasks.Tasks.update(task, listId, task.id);
        }
      }
    });
  });
}

④ Google Tasks APIを追加する

今回のコードではGoogle Tasksを操作するため、Tasks APIをサービスとして追加します。

Apps Scriptの画面にある「サービス」から追加を選択して、一覧からTasks APIを探して追加します。

『+』から追加する
一覧に追加されてるので完了

ここを設定していないと、今回のコードは正常に動きません。忘れずに設定してください。

⑤ プロジェクトを保存する

コードを貼り付けてTasks APIを追加したら、プロジェクトを保存します。

  • Windowsの場合:Ctrl+S(上書き保存)
  • Macの場合:⌘+S(上書き保存)

⑥ 初回実行して権限を許可する

次に一度コードを実行します。初回実行時には、Googleアカウントへのアクセス許可を求められます。

画面の案内に従って、

  1. 使用するGoogleアカウントを選択
  2. 内容を確認
  3. 必要な権限を許可

と進めます。

初めてGASを使うと、この画面は少し不安になると思います。

今回のコードでは『Google Tasksの情報を取得したり、タスクを作成・更新したりする必要』があるため、そのための権限です。

ただし、ネット上で見つけたコードを内容も確認せずに実行するのはおすすめしません。どんな処理をするコードなのか確認したうえで権限を許可してください。

⑦ トリガーを設定して自動化する

最後に設定するのがトリガーです。

トリガーとは?

トリガーは簡単に言うと、『このコードをいつ自動実行するのか?』を決める機能。

【画像:GASのトリガー設定画面】

右下の『トリガーを追加』をクリック
保存ボタンをクリック
トリガーが追加されていればOKです

これで、

Google Tasksを使う → GASが定期的にチェック → 条件に合ったタスクを自動処理

という仕組みが完成です。

カスタマイズすると何が変わる?Before / After

実際に設定したことで、僕がGoogleカレンダーで不満だった2つの問題がかなり改善されました。

  • 定期タスク場合
BeforeAfter
標準の繰り返しタスクを利用完了したら次回分を生成
未来のタスクも表示される必要な次回分だけ作られる
定期タスクが増えると見づらいカレンダーをスッキリさせやすい

例えば、『◆【3ヶ月後】○○をする』というタスクを完了すると、GASがそれを検知。3ヶ月後の日付に同じタスクを作成します。

つまり、

今やるべきタスクを完了 → 次に必要なタスクを自動生成

という流れです。

【画像:定期タスクのBefore / After】

  • 未完了タスクの場合

例えば昨日、

  • メールを返信する
  • 書類を確認する
  • 動画の構成を考える

という3つのタスクを登録したとします。その日のうちに終わらなかった場合、通常は期限を設定した元の日付に残ります。

今回のGASでは、期限切れになった未完了タスクを検知すると、期限を今日の日付へ変更します。

つまり、

今日できなかった → 翌日にもう一度表示される

という運用ができます。

before
after

僕がFirstSeed Calendarで気に入っていた使い方を、Googleカレンダー+Google Tasksでもかなり再現できるようになりました。

実際に使って感じたメリット

今回のGoogleカレンダー自動化で、特に便利だと感じているのは以下です。

  • Googleカレンダーが定期タスクだらけになりにくい
  • 未完了タスクを忘れにくい
  • 定期作業を自分で覚えておく必要がない
  • Google Tasksをそのまま使える
  • Geminiを使えばGASを自分好みに変更しやすい
  • Gmailなど他のGoogleサービスとの連携も考えられる

特に大きいのは、『Googleカレンダーの使い方を、自分に合わせて変えられるようになった』こと。

以前はアプリに自分の使い方を合わせる感覚でした。

今はAIとGASを組み合わせることで、逆に自分の使い方へGoogleカレンダーを近づけることができます。

デメリット・注意点もある

もちろん、メリットばかりではありません。

最初のGAS設定は少し難しい

初めて使う人にとって、

  • Google Apps Script
  • Tasks API
  • 権限
  • トリガー

などは聞き慣れない言葉だと思います。僕も最初は「難しそうだな」と感じました。

ただ、一度設定してしまえば毎日GASを操作するわけではありません。完成したコードを貼り付けて設定するだけなら、思っていたほどハードルは高くありませんでした。

Google側の仕様変更で動かなくなる可能性がある

今回の方法はGoogle Tasksの標準機能ではなく、GASを使った自動化です。

そのため、将来的にGoogle側の仕様が変わった場合などには、コードの修正が必要になる可能性があります。

仮にそうなったらまたGeminiにお願いはしますが、その間慌ててしまいそうではある・・・

AIが作ったコードをそのまま信用しない

Geminiを使えばコード作成のハードルはかなり下がります。

ただし、

AIが生成したコード=必ず正しい

ではありません。特にGASではGoogleアカウントのデータを操作することになります。

コードの内容や要求される権限を確認し、まずはテスト用のタスクで動作確認することをおすすめします。

FirstSeed CalendarとGoogleカレンダー、結局どっちがいい?

今回Googleカレンダーへ移行しましたが、FirstSeed Calendarが使いにくかったから乗り換えたわけではありません。

むしろ、カレンダー単体の使いやすさならFirstSeed Calendarはかなり良かったと思っています。

僕の感覚を整理すると、こんな感じです。

重視することおすすめ
カレンダー単体の使いやすさFirstSeed Calendarなども有力
シンプルなタスク管理好みで選んでOK
Geminiとの連携Googleカレンダー
GmailなどGoogleサービスとの連携Googleカレンダー
GASを使った自動化Googleカレンダー+Google Tasks
今後AIを活用して効率化したいGoogleカレンダーがおすすめ

つまり、「Googleカレンダーだから無条件に最強」というわけではありません。僕がGoogleカレンダーを選んだ理由は、

カレンダー単体ではなく、Googleサービス+Gemini+自動化まで含めて考えたから

です。

AI時代は「アプリを選ぶ」だけではなく「自分でカスタマイズする」ことも簡単にできます。今回GASを使ってみて、一番考え方が変わったのはここかもしれません。

以前なら、

「Googleカレンダーはここが使いにくい」

と思ったら、

「じゃあ別のカレンダーアプリを探そう」

となっていました。

でも今はGeminiがあります。やりたいことをGeminiに相談して、GASを使って自動化できる可能性があります。

もちろん何でもできるわけではありません。それでも、

アプリに自分を合わせるだけではなく、自分の使い方にアプリを合わせる

という選択肢がかなり身近になりました。

これはGoogleカレンダーだけではなく、GmailやGoogleスプレッドシートなどでも同じです。

AIとGoogleサービスを組み合わせれば、今まで手作業でやっていたことを自動化できる可能性があります。

まとめ|Gemini+GASならGoogleカレンダーはもっと便利になる

今回は、Gemini+Google Apps Scriptを使って、Googleカレンダーのタスク管理をカスタマイズする方法を紹介しました。

僕が今回改善したかったのは大きく2つです。

  • 定期タスクを「完了したら次回分を作る」方式にする
  • 期限切れの未完了タスクを今日へ自動的に繰り越す

これによって、FirstSeed CalendarからGoogleカレンダーへ移行するときに感じていた不満がかなり解消されました。

「Googleカレンダーを使いたいけど、タスク管理が微妙なんだよな……」

と感じている人は、一度GASを使ったカスタマイズを試してみてください。

Googleカレンダーに自分を合わせるのではなく、自分の使い方にGoogleカレンダーを合わせる。

Geminiがある今なら、それが以前よりずっと簡単にできるようになっています。

スポンサーリンク

¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
今って本当に、誰でもすぐにビジネスを始められる時代です。

ブログでも、SNSでも、やろうと思ったその日にできます。

でも「実際に何をやっていいかわからない」という戸惑いもあると思うので、簡単に3ステップにして解説しました。

これを実践するだけで、

ビジネスのイメージもつきますし、実際に『収益を得る』ということを体験できますので、

ぜひ見てくださいね。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

SNSでシェア