こんにちは!開発エンジニアのクリスです!
最近、社内の業務改善プロジェクトで「会議室予約システム」の構築に携わっています。Google Workspaceを導入している企業なら一度は直面する「会議室の空予約問題」や「今すぐ使いたいけどPCを開くのが面倒」という課題を解決するためのシステムです。
今回は、Google Cloud(Cloud Runを想定)からGoogle Calendar APIを叩いて会議室を予約する際、どの認証・認可方式を選ぶべきか調査した内容をまとめました!
そもそも会議室予約システムってどんなもの?
今回想定しているのは、よくオフィスの会議室の入り口にiPadなどのタブレットが設置されている、アレです。
- 会議室の前に設置したデバイスに、Googleカレンダーの予約状況を表示する
- 利用時に「チェックイン」、終了時に「チェックアウト」の操作を行う
- 空いている会議室があれば、その場で即時予約して使い始められる
主な目的は2つ:
- カラ予約の削減: 予約されているのに使われていない部屋を自動解放し、使いたい人が使えるようにする。
- 利便性の向上: 緊急の会議などで、Googleカレンダーを開く手間を省き、その場で予約を完結させる。
システムを構築する上で一番の肝になるのが、「バックエンドからどうやってGoogleカレンダーを操作するか」という点です。調べた結果、主に3つのアプローチがありました。
方法1:サービスアカウント(SA)に会議室権限を付与する方法
Google Cloudのサービスアカウントを作成し、各会議室のカレンダーに対して直接「編集権限」を追加するパターンです。
メリット
- 設定がシンプル: 必要な会議室に対してのみ権限を与えればOK。
- 安全性が高い: ユーザー個人のカレンダーを勝手に編集してしまうリスクがありません。
デメリット
- 初期設定の手間: 会議室が増えるたびに、そのカレンダー設定からSAを共有リストに追加する必要があります。
方法2:専用のWorkspaceユーザーアカウントを作成する方法
「システム用ユーザー(例: system-user@example.com)」というWorkspaceアカウントを新規作成し、そのアカウントとしてログイン・操作する方法です。
メリット
- 直感的: 人間が予約するのと同じ挙動(自分の予定に会議室リソースを追加する)で実装できる。
- 一括管理: このアカウント一つで、全会議室を(ユーザーとして)予約可能です。
デメリット
- コスト: Workspaceのライセンス料(1ユーザー分)が発生します。
- 権限の限界: 他のユーザーが作成した既存の会議室予約を編集(時間変更など)することが難しく、今回の要件には不向きでした。
- 管理の複雑さ: ログインが必要なため、リフレッシュトークンなどのクレデンシャル管理が必要です。
方法3:ドメイン全体の権限を委任する(Domain-Wide Delegation)
Workspaceの管理者が、サービスアカウントに対して「全ユーザーの代行権限」を付与する、いわゆる「神権限」です。
メリット
- 究極の自由度: 誰の予定でも、どの会議室でも、ログインなしでシステムが自由自在に操作できます。
デメリット
- セキュリティリスクが最大: JSONキーなどの認証情報が万が一漏洩した場合、会社全体のメールやカレンダーが丸見え・操作され放題になるため、非常に危険です。
【結論】なぜ「方法1」を選んだのか?
今回のプロジェクトでは、方法1(サービスアカウントへの直接権限付与)を採用することに決めました!理由は非常にシンプルで、「管理しやすく、かつ安全だから」です。
- セキュリティ重視: Domain-Wide Delegation(方法3)は、もし間違えて全社の予定を消してしまったら……と考えるとリスクが高すぎます。
- 運用コスト: 方法2のように追加ライセンス料を払う必要もありません。
- Cloud Runとの相性: Cloud Run上で動かす際、Google Cloudの標準的なIAM設定(サービスアカウント)で完結できるため、わざわざ秘密鍵(JSON)を管理して保存する必要もありません。
「会議室が増えるたびに設定するのが面倒」というデメリットについては、会議室が毎日何十個も増えるわけではないので、運用で十分にカバーできると判断しました。何より、「ユーザー個人のカレンダーには触れず、会議室リソースのみを確実にコントロールできる」という点が、システムとしての信頼性に繋がると感じています。
さいごに
今回はGoogleカレンダーとの連携部分に焦点を当てて紹介しました。 Google Cloudの強力な認証基盤をうまく活用することで、セキュアで便利な社内ツールが作れそうです!
この構成で、全社員がスムーズに会議室を利用できる環境を作っていきたいと思います!進展があればまた報告します。それでは!