見出し画像

#59 Classroom への保護者の招待を一括で!

Google Classroom には、以下のヘルプ記事で説明されているような、保護者に対して Classroom での活動状況をメールで定期連絡する「概要説明メール」という機能が用意されています。

どんなメールが届くのかは、以下のヘルプ記事に英語版のサンプルが案内されています。

また、YouTube でも以下のように紹介されている動画も見つかります。動画中の説明で、日本語での「概要説明メール」も紹介されているので、どんなメールが届くのかをイメージできると思います。

「概要説明メール」を利用するには?

この機能を利用する場合には、上記の動画や、以下 URL のヘルプ記事で説明されているように、「教師または管理者が保護者に招待状を送信します」というところからはじまります。

Google Classroom の UI から、それぞれの生徒の「保護者を招待」のリンクをクリックして、チマチマとメールアドレスを指定するのはとても面倒です… 😖

Classroom から「保護者を招待」

もっと楽にならないか?

保護者の招待を GAS で楽に行えるようにならないかを確認したところ…

(1)一般ユーザーでは、設定されているメールアドレスを取得できない

以下の userProfiles.guardians.get という API を利用すると、設定されている保護者のメールアドレスの状況を取得できます。

取得した情報は、下図のような「Resource: Guardian」として得られるものの、メールアドレスが格納されている invitedEmailAddress のフィールドが、権限のない一般のアカウントでは取得できません。 ※空欄どころか、そのフィールド自身が得られません。

Resource: Guardian

当該組織の全体管理者のアカウントで同じ API を、同じパラメータで実行すると、保護者のメールアドレスが得られますが、権限を持たない一般のアカウントではメールアドレスが得られませんでした。
すなわち、どんなメールアドレスが保護者として設定されているのかは、一般のアカウント(先生アカウント)では確認できないのです。

(2)保護者のメールアドレスは、クラスに依存しない

前述の API は、Classroom API ではありますが、これらの API を利用する際にパラメータとしてクラスを指定する courseId(コースの識別子: Identifier of the course. )のパラメータや引数が存在していません。

組織内の Classroom のクラスに参加しているとき、あるクラスで保護者のメールアドレスを設定すると、生徒として参加している組織内の他のクラスにも保護者のメールアドレスが設定されます。
「概要説明メール」を送信したくないクラスであれば、そのクラスの「保護者宛の概要説明」を OFF にしておけばいいのです。

クラスの設定で「保護者宛の概要説明」を OFF に

上図の Classroom の UI での設定が、guardiansEnabled に反映される設定内容です。 というか、「読み取り専用(Read-only)」と記載されているように API では変更できず、上図のような Classroom の UI で変更しなければなりません。

REST Resource: courses
(日本語に翻訳済)

(3)重複してもよい

「重複してもよい」というのは、以下のような意味です。

  • 1人の生徒アカウントに対して、複数の保護者のメールアドレスを設定できる。 ※父と母のそれぞれのメールアドレスを設定可。

  • 1つのメールアドレスを、複数の生徒アカウントの保護者のメールアドレスとして設定できる。 ※双子や兄弟などのメールアドレスに、同じ保護者のメールアドレスを設定可。

しかしながら、userProfiles.guardianInvitations.create で既に招待中の「生徒アカウント」「保護者のメールアドレス」の組み合わせだった場合には、エラーとなります。
Classroom の UI で以前の招待を一度削除して、再度招待するようにしてください。

(4)保護者の承認は必須

Classroom API で用意されている userProfiles.guardianInvitations.patch によって、保護者の招待の状態を PENDING →  COMPLETE に変更できるものの、この API で COMPLETE に変更すると招待が「承認」されたのではなく、招待が「撤回」されたことになります。

  • この辺りの挙動はヘルプ記事にも明記されていますが、「Currently」とされているので、今後は API でも変更できるようになるのかもしれませんが、2022年 11月時点では、招待を「撤回」させることしかできません。

Currently, the only valid modification is to change the state from PENDING to COMPLETE. This has the effect of withdrawing the invitation.

Method: userProfiles.guardianInvitations.patch | Google Classroom API | Google Developers

すなわち、保護者の招待は、保護者自身が招待によって送信されたメールで承認しなければならず、GAS などによって自動的に承認させることはできません。
招待したメールから、保護者は「概要説明メール」をどのような頻度で受信するのかを設定することになるので、その設定を省略することができないからなのかもしれません。

GuardianInvitationState

どこまでてきる?

上記の (1) ~ (4) にあるように、Classroom API を利用して、保護者のメールアドレスを設定する場合、

  • 一般のアカウントでは、設定されている保護者のメールアドレスを確認できない。

  • 保護者の招待までは行えるが、設定完了までを自動化できない。
    → 招待の承認操作を、保護者自身が行わなければならない。

という感じになります。

作ってみた!

前述の Classroom API の動作状況をふまえて、下図のような一括招待できるスプレッドシートを作成してみました。 

作成したスプレッドシート

細かな使い方は、スプレッドシート内に記載してありますが、

  1. 列 A にクラスに参加している生徒のアカウント、列 B にクラスの概要を送信する保護者のメールアドレスを入力します。

  2. 「招待」ボタンを押すと、列 A・列 B の内容から、保護者の招待メールを送信します。

  3. 実行結果は、列 C に表示されます。
    PENDING 招待した状態(保護者の確認待ち)
    ALREADY_EXISTS 既に招待されている(保護者の確認待ち)

といった感じの単純な動作です。

ALREADY_EXISTS という結果になる場合には、手作業で以前の招待をキャンセルしてから、再招待してください。 ※前述した patch メソッドを使えば、既存の招待を「撤回」し、新たに招待することも可能ですが、そのような処理にはしてありません。

https://docs.google.com/spreadsheets/d/1an8rfNOTgP4S_rsFu7nQSIdmF_0SSWyXSC0-kT5r7DM/copy

上記 URL に、使用する Google アカウントでログインした状態でアクセスして、GAS のプログラムが保存されたスプレッドシートを、自身の Google ドライブにコピーしてください。
なお、スクリプトの初回実行時には、実行するアカウントによる確認作業が必要になります。詳しくは以下の投稿をご覧ください。

発展として…

スプレッドシート内の GAS のプログラムは、処理ごとにいくつかの関数に分割してあります。

invitedClassroom 関数が、実際に保護者を招待している

invitedClassroom 関数は、上図のように studentEmail と invitedEmail という 2つの引数によって処理を行っていますが、それぞれスプレッドシートで指定する「生徒用アカウント」「保護者のメールアドレス」を指定します。
この引数を指定すれば、既に招待されているかをチェックして、招待されていなければ招待してくれます。

現時点では、プログラムとして作り込んでありませんが、Google  フォームと連携して、フォームで収集した情報をもとにして、保護者への招待メール送信を自動化することも可能です。

その場合、以下のような点について、組織や学校内で確認するべきなんだろうな、と思います。

  • Google フォームを一般に公開してもよいのか? 当該生徒用アカウントでログインした状態でのみ回答できるようにするべきか?

  • 登録できたかどうかを、入力された保護者のメールアドレスに通知すべきか?

  • 登録に際して、何かしらの認証を行うべきか?

  • 保護者への「概要説明メール」を利用するのであれば、組織や学校内でのClassroom の利用方法について、「保護者宛の概要説明」の ON/OFF を再確認する必要がある?

最後に

最後に、お決まりのフレーズなどを書いておきます。

  • 一応の動作確認は行っているものの、不慮のトラブルによって損害等が生じても、責任はとれませんので予めご了承ください。

  • コメントを含めても 70行程度のスクリプトであり、実行に際して目的外の場所への書き出しや収集などは行っていません。

  • 特別なエラー処理は行っていないので、意図しないケースでエラーが発生してしまうかもしれません。どうにもならない場合には、ご連絡ください。

わたし自身にしてみると、このような「スクリプトを作ること」が目的になっているような感じですが、このスクリプトが何かの役に立てば幸いです。
ちなみに、今回のプログラムのアイディアは、教育系 YouTuber としても活動しておられる先生から、いただいたネタをプログラム化したものです。

この記事が気に入ったらサポートをしてみませんか?