Googleカレンダーの予約スケジュールから一覧表を作成しよう（前編）★デジタルの力で大転職時代を乗り切ろう③


　こんばんは！小売業で採用担当をしているミハタです
現在わたしには悩みがあります…
悩みとは、**仕事をより素早く・正確に進めたいけど、どうしたらいいんだ!?**　ということです。


　わたしは採用のお仕事を、一緒に理想を実現する仲間づくりと考えています。
そのため、できる限り多くの魅力のある方と出会い、話を聞きたいと思っています。
出会いは一期一会であり、効率を上げることは結び付きにくいなと感じています。

　一般的に、採用の仕事は次の3つのフェーズに分けられます。

　1\. 採用ターゲットに対し「うちで働きませんか？」とアプローチするフェーズ
　2\. 面接や合否通知を実施するフェーズ
　3\. 内定出し後に自社へ入社したい意欲を高めるフェーズ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3842443/66b457bd-5cd6-6ff4-198d-493f98d5229c.png)

　各フェーズのバックグラウンドには、個別のメール作成・日程調整など細かな事務作業がふんだんにあります。
これらをデジタルツールの力を借りてより素早く・正確に実施する過程を備忘録として残します。
題して「**デジタルの力で大転職時代を乗り切ろう**」シリーズです★

#### これまでの記事はこちら

https://qiita.com/mihatachisa/items/e6405c8ddeb50a5975b2

https://qiita.com/mihatachisa/items/b959eae35e157999c4a9


　今回紹介するのはこちら↓
　Googleカレンダーの**予約情報を自動でGoogleスプレッドシートに転記**する方法　です！
プログラミング初心者でもわかるように、**Google Apps Script** (**GAS**)を使って、Googleカレンダーの予約情報をGoogleスプレッドシートに自動で転記する方法を丁寧に説明します。



:::note warn
警告
予約者がGoogleアカウントを持っていないと
結論、必要な情報すべてを転記することはできませんでした
:::

    
## 取り組む目的
　Googleカレンダーで面接や会議などの予約を管理していると、「予約の内容を簡単に一覧で確認したい」「手動で管理するのは大変」ということがありますよね。そんなときに、予約情報を自動でGoogleスプレッドシートに転記できるようにすると、とても便利です。

## この記事のゴール
* Googleカレンダーの予約情報（日時や予約者情報）を、Googleスプレッドシートに自動で転記できるようになる
* コードの詳しい説明を見ながら、初心者でも理解できる

## 事前準備
この作業を始める前に、以下の準備が必要です。

* Googleアカウント：作成
* Googleカレンダー：カレンダーの予約枠を使って予約を管理していること
* Googleスプレッドシート：予約情報を記録したいスプレッドシートを用意


:::note inf
もしこれらがまだ用意できていない場合は、まずGoogleカレンダーで予約を管理してみてください。
:::

　次に、Googleスプレッドシートを新しく作っておきます。
 
## スプレッドシートの準備
　まずは、Googleスプレッドシートを準備しましょう。
このシートに、カレンダーの予約情報が転記されます。

### スプレッドシートの作成
Googleスプレッドシートにアクセスして、新しいシートを作成します。
名前を「予約管理」や「予約情報」にするとわかりやすいです。

#### ①列（カラム）を準備
スプレッドシートの1行目に以下のようなヘッダーを追加します。



     | 開始日時 | 終了日時 | タイトル | 予約者 姓 | 予約者 名 | 予約者 メールアドレス |


 これにより、予約情報がスプレッドシートのどの列に転記されるかを明確にします。

#### ②Google Apps Scriptの設定とコード
　次に、Google Apps Scriptを使って、カレンダーの情報をスプレッドシートに転記するコードを作成します。
Google Apps Scriptは、Googleサービス（カレンダーやスプレッドシートなど）を自動化するためのツールです。

#### ③スクリプトを作成する手順
1\. Google Apps Scriptを開く
　スプレッドシートの上部メニューにある「拡張機能」をクリックし、「Apps Script」を選択します。これでスクリプトエディタが開きます。
2\. スクリプトを記述 
　以下のコードをそのままスクリプトエディタに貼り付けます。
　このコードは、Googleカレンダーから予約情報を取得し、Googleスプレッドシートに転記します。


```ruby:qiita.rb
function transferCalendarReservationsToSheet() {
  // スプレッドシートのIDとシート名を指定
  var sheet = SpreadsheetApp.openById('スプレッドシートID').getSheetByName('シート名');
  
  // カレンダーID（GoogleカレンダーのIDを使用）
  var calendarId = 'カレンダーID@group.calendar.google.com';
  var calendar = CalendarApp.getCalendarById(calendarId);
  
  // 予約を取得する期間を指定（例: 今日から1ヶ月間）
  var startTime = new Date();
  var endTime = new Date();
  endTime.setMonth(endTime.getMonth() + 1); // 1ヶ月後まで

  // イベントを取得（指定した期間の予定をカレンダーから取得）
  var events = calendar.getEvents(startTime, endTime);
  
  // スプレッドシートのヘッダーがなければ設定（1行目にヘッダーを追加）
  if (sheet.getLastRow() == 0) {
    sheet.appendRow(['開始日時', '終了日時', 'タイトル', '予約者 姓', '予約者 名', '予約者 メールアドレス']);
  }
  
  // 各イベントの情報をスプレッドシートに転記
  for (var i = 0; i < events.length; i++) {
    var event = events[i];
    var startTime = event.getStartTime();
    var endTime = event.getEndTime();
    var title = event.getTitle();
    var attendees = event.getGuestList(); // 参加者情報を取得

    // 予約者の情報（名前とメールアドレス）を取得してスプレッドシートに書き込む
    for (var j = 0; j < attendees.length; j++) {
      var attendee = attendees[j];
      var email = attendee.getEmail();
      var fullName = attendee.getName() || '不明'; // 名前がない場合は「不明」と表示

      // 名前を「姓」と「名」に分ける（スペースで区切る）
      var nameParts = fullName.split(' ');
      var lastName = nameParts.length > 0 ? nameParts[0] : ''; // 姓
      var firstName = nameParts.length > 1 ? nameParts[1] : ''; // 名

      // データをスプレッドシートに追加
      var lastRow = sheet.getLastRow() + 1;
      sheet.getRange(lastRow, 1, 1, 6).setValues([[startTime, endTime, title, lastName, firstName, email]]);
    }
  }
}
```

### コードの説明
このコードは、次のように動作します。

1\. Googleカレンダーから予約情報を取得: カレンダーIDと期間を指定し、その期間中のイベントをすべて取得します。
2\. 予約者情報を取得: イベントごとに参加者（予約者）の氏名とメールアドレスを取得します。
3\. スプレッドシートに転記: 取得した情報をスプレッドシートに書き込みます。開始日時、終了日時、タイトル、予約者の姓、名、メールアドレスが自動で転記されます。


## 実行する手順
1\. スクリプトエディタで「保存」をクリックし、スクリプトを保存します。
2\. スクリプトエディタの上部にある「実行」ボタンを押して、スクリプトを実行します。
3\. 初めて実行すると、Googleカレンダーやスプレッドシートへのアクセス権限を求められるので、「許可」をクリックします。

これで、カレンダーの予約情報がスプレッドシートに転記されるようになります。


## 今後の課題
 この方法を使うと、Googleカレンダーの予約情報を自動でGoogleスプレッドシートに転記できるようになり、予約管理が一層簡単になります。
一方で、予約者がGoogleアカウントを持っていないと、必要な情報すべてを転記することはできませんでした。
    そこで今後は「予約者がGoogleアカウントを持っていない場合」に備えて、**Google FormsとGoogle Calenderを連携する**方法で一覧表を作成する方法を実装しようと思います！


質問や不明点があれば、コメントで教えてください。お読みいただきありがとうございました！

### 参考記事はこちら
https://note.com/rrenzokutai/n/nd402857d3872

https://note.com/m316jp2/n/n3ae8bfe2e800