はじめに
組織のリソース(会議室や貸し出し機器等)をカレンダー上で予約できるようにすることは、公式ページ
に従って行えばできるようになります。ただし、この方法では組織の全ユーザーが組織のリソースへアクセスできるため、教育現場を例に取ると生徒や学生からリソースの予約状況が見えてしまいます。
この記事では、組織のリソースを一部ユーザーとだけカレンダー上で管理するために必要な設定についてまとめます。
ここでの設定により、例えば「生徒がカレンダーに予定を追加する際に会議室のリソースは表示されず、教員の場合のみリソースが表示され、リソース予約状況も生徒のカレンダーには表示されない」ということが可能になります。とはいえ、頻繁に行うオペレーションではないので簡単に要点のみをまとめておきます。
設定のポイント
- 管理コンソールの「アプリ>Google Workspace>カレンダーの設定>全般設定」で「リソース予約の許可」をオフ
- 設定したいリソースのカレンダーの設定で「予定のアクセス権限」のチェックを全て外す→これで誰もリソースを予約できなくなる。
- 設定したいリソースのカレンダーの設定で「特定のユーザーとの共有」に共有したいユーザーあるいはグループを設定し、「予定の表示(すべての予定の詳細)」→リソースに予約できるユーザーを限定する。リソースの場合は閲覧権限でも予約が可能となる。
※ 注意点
「特定のユーザーとの共有」を行うと、当該ユーザーのGmailに通知が飛びます。リソースが100個なら100通飛びます。これは避けられないので事前に周知の上で行って下さい。ただし、一般ユーザーがリソースのカレンダーを追加するために、個々のメールの「カレンダーに追加」ボタンを押す必要はありません。カレンダーアプリ左下の「他のカレンダー横の+>リソースのブラウジング」から手動でまとめて追加できます。
GASで一括設定
管理しなければならないリソースが多い場合には、リソース毎に上記設定を行わなければならない。しかも、リソースをカレンダーに追加した場合、タイムゾーンのデフォルトがアメリカになるためこちらも全て日本に設定し直さなければならない。
そこで、リソースに対して以下の設定を一括で行うGASを書いた。
- 設定したいリソースのカレンダーの設定で「特定のユーザーとの共有」に共有したいユーザーあるいはグループを「予定の表示(すべての予定の詳細)」権限で設定
- タイムゾーンを日本に設定
AclというCalendar APIを用いているので、サービスのCalendar APIを追加する必要がある。Class Calendarを調べたのだが、現在のところ
- 設定したいリソースのカレンダーの設定で「予定のアクセス権限」のチェックを全て外す
をGASで設定できそうになかった。この方法が分かる人は是非情報をお寄せください。
また、複数のカレンダーからリソースだけを抽出するという目的を達成すれば良いので、この部分の書き方は別に何でも良いです。カレンダークラスのオブジェクトを配列でまとめて扱っているだけです。
function myFunction() {
const calendars = CalendarApp.getAllCalendars();
// 複数のカレンダーからリソースだけを抽出。著者の環境では'号館'のみで十分
const resources = calendars.filter(function(value){
if (value.getName().indexOf('ここにリソースのみ共通に含む文字列') != -1){
return value.getName();
}
})
function addUsers(calendarId, emails) {
emails.forEach(function(email){
Calendar.Acl.insert({
"role": "reader",
"scope": {
"type": "user", // 追加するメールアドレスが個人ならuser、グループならgroup
"value": email,
},
}, calendarId);
});
}
for (const calendar of resources){
calendar.setTimeZone('Asia/Tokyo');
addUsers(calendar.getId(),[
// ここに「特定のユーザーとの共有」で設定したいメールアドレスを1つ以上設定
'メールアドレス1',
'メールアドレス2'
]);
}
}