0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Googleカレンダー】ブックマークレットでスケジュールを全部取得する

Last updated at Posted at 2025-10-07

はじめに

仕事始めに今日のスケジュールを確認して……、みたいなシーンあると思います。自分は毎日Googleカレンダーを使っていて、それをToDoリストに起こしたりしているのですが、スケジュールをひとつひとつ拾ってくの面倒だなと思い自動化してみました。
今回はブックマークレットを使っていきます。ブックマークレットを簡単に説明すると、ブックマークと同じような形でJavaScriptのプログラムを保存しておき、それをクリックするとプログラムを呼び出せるというものです。

カレンダーのスケジュールを取得するプログラム

Googleカレンダーは日か週かで利用してください。それと、設定から24時間表示にしてください。それ以外はエラーになります。

javascript:(function(){
  let allDayEvents = [];
  let timedEvents = [];
  const timePattern = /^(\d{1,2}:\d{2})(\d{1,2}:\d{2})\s*(.*)$/;

  /* 時間が決まっている予定を取得 */
  document.querySelectorAll('div[role="button"]').forEach(function(e){
    let match = e.textContent.match(timePattern);
    if (match) {
      const startTime = match[1];
      const endTime = match[2];
      
      /* '、'で分割して要素を取得 */
      let titlePart = match[3].split('')[1]; 
      
      /* タイトル部分が取得できた場合のみ処理を実行 */
      if (titlePart) {
        /* 空白と鍵かっこ削除 */
        const pureTitle = titlePart.trim().replace(/「|」/g, '');
        /* 整形して出力。ここをいじれば形を変えられる */
        timedEvents.push(`${startTime}-${endTime} ${pureTitle}`);
      }
    }
  });

  /* 終日の予定を取得 */
  document.querySelectorAll('div[role="presentation"] div[role="button"]').forEach(function(e) {
    const text = e.textContent.trim();
    if (text && text.includes('終日') && !text.match(timePattern)) {
      /* '、'で分割して要素を取得し、鉤括弧を削除 */
      const pureAllDayTitle = text.split('')[0].replace(/「|」/g, '').replace(/終日$/, '');
      /* 整形して出力。ここをいじれば形を変えられる */
     allDayEvents.push(`終日 ${pureAllDayTitle}`);
    }
  });
  
  const allEvents = allDayEvents.concat(timedEvents);

  if (allEvents.length > 0) {
    let resultText = allEvents.join('\n');
    navigator.clipboard.writeText(resultText).then(function() {
      alert('スケジュールをクリップボードにコピーしました!\n\n' + resultText);
    }, function() {
      alert('コピーに失敗しました。');
    });
  } else {
    alert('スケジュールが見つかりませんでした。');
  }
})();

ざっくり解説すると、正規表現を使ってブラウザ上からスケジュールが書いてあるところを探し、そこに書いてあるテキスト情報を取得して、整形して出力、といった具合です。

正規表現について

24時間表記
 const timePattern = /^(\d{1,2}:\d{2})(\d{1,2}:\d{2})\s*(.*)$/;

こちらの24時間表記での正規表現は成功したのですが、12時間の午前午後表記の正規表現で負けました……。どなたか有識者の方がいましたら、Googleカレンダーで午前午後表記のスケジュールを見つけられる正規表現を教えてくださいますと、大変喜びます。

午前午後(未完成)
const timePatternAMPM = /(午前|午後)\d{1,2}(:\d{2})?(午前|午後)?\d{1,2}:\d{2}|(午後)\d{1,2}時~\d{1,2}\s*(.*)/;

ブックマークレットを設定する

1.ブラウザのブックマークバーで右クリックして、ブックマークを新規作成

image.png

2.お好みの名前をつけて、最初にあったプログラムを「URL」にコピペ

最初は違和感あると思いますが、URLという項目名を無視してプログラム置いちゃって大丈夫です!

image.png

3.保存

よく見るブックマークのようになっていれば成功です!

image.png

実際に使ってみる

Googleカレンダーに移動して、右上の歯車マークから設定へ移動し、24時間表示に変更してください

image.png

無ければお好みのスケジュールを入れ、「スケジュール取得」ブックマークレットを押下します。

image.png

終日 テストのやつです
終日 一日かかるHello, world!
08:45-09:45 1番目のスケジュール
10:30-12:30 例の2番
13:00-14:00 3rd

スケジュールが取れました!

出力形式の変更

ソースコードのうち、下記をいじると出力形式を変えることができます。

終日の予定
allDayEvents.push(`終日 ${pureAllDayTitle}`);
時間が決まっている予定
timedEvents.push(`${startTime}-${endTime} ${pureTitle}`);

1行コード

ブックマークレットって1行のイメージがあるので、用意してみました。こちらを使っても大丈夫です。

javascript:(function(){let allDayEvents = [];let timedEvents = [];const timePattern = /^(\d{1,2}:\d{2})(\d{1,2}:\d{2})\s*(.*)$/;document.querySelectorAll('div[role="button"]').forEach(function(e){let match = e.textContent.match(timePattern);if (match) {const startTime = match[1];const endTime = match[2];let titlePart = match[3].split('')[1];if (titlePart) {const pureTitle = titlePart.trim().replace(/「|」/g, '');timedEvents.push(`${startTime}-${endTime} ${pureTitle}`);}}});document.querySelectorAll('div[role="presentation"] div[role="button"]').forEach(function(e) {const text = e.textContent.trim();if (text && text.includes('終日') && !text.match(timePattern)) {const pureAllDayTitle = text.split('')[0].replace(/「|」/g, '').replace(/終日$/, '');allDayEvents.push(`終日 ${pureAllDayTitle}`);}});const allEvents = allDayEvents.concat(timedEvents);if (allEvents.length > 0) {let resultText = allEvents.join('\n');navigator.clipboard.writeText(resultText).then(function() {alert('スケジュールをクリップボードにコピーしました!\n\n' + resultText);}, function() {alert('コピーに失敗しました。');});} else {alert('スケジュールが見つかりませんでした。');}})();

まとめ

今回は、Googleカレンダーからスケジュールをまとめて取得するブックマークレットを作ってみました。基本的にはブラウザから該当の要素を見つけて、取得して、クリップボードにコピーするという動作なので、Googleカレンダーに限らずいろいろ使えるんじゃないかと思います。ぜひいろんなサイトで効率化できないか試してみてください!最後まで読んでいただき、ありがとうございました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?