![見出し画像](https://assets.st-note.com/production/uploads/images/96126468/rectangle_large_type_2_393742bf53bd89a7d84d09624fd0d8a7.png?width=1200)
#70 組織内のクラスを一覧にする(詳細版)
このテーマは、以前にも何度か取り扱っているものですが… 年度替わりのタイミングで管理面で気になる部分だと思います。
規模の大きなドメインで運用されていると、普通に GAS で処理していると実行時間の制限で途中で処理が終わってしまい、完全な一覧を作成できなかったりします。
実行時間の制限を、自分自身を時間指定のトリガー関数として呼び出す方法で回避するプログラムを以前に作成しましたが、今回はそのプログラムに機能を追加してみました。
追加した機能
(1)クラスの詳細な状況を表示
今回の更新で、次の項目についても一覧に加えています。前述の #02 や #35 のプログラムでは、GAS の実行時間制限に配慮して、必要最低限の情報しか一覧にしていませんでしたが、#58 のプログラムでは実行時間の制限を回避できるので、詳細な情報を取得するようにしました。
具体的には「Resource: cources」では直接得られない情報を表示するようにしました。
当該クラスに参加している「教師」の人数 ※
当該クラスに参加している「生徒」の人数 ※
当該クラスに投稿されている最新の「連絡事項」の作成日時
上記の ※ が付してある情報は、権限を有していない場合には正しい情報が表示されません。具体的には、一般のユーザーで実行した場合には、自身が「教師」として参加しているクラスであれば正しい情報が取得できますが、「生徒」として参加しているクラスでは正しい情報が取得できません。
特権管理者であるユーザーで実行する場合には、意識しなくても OK です。
![](https://assets.st-note.com/img/1674274075455-ANx25YEfLy.png?width=1200)
実際に上記の 3点を取得しているプログラムの部分が、上図部分です。
クラスの使い方として、「課題」の配信用に使用していて、ストリームに「連絡事項」を投稿していない場合には、「連絡事項」の作成日時は空欄になってしまいます。
#58 でも表示していた creationTime はクラスが作成された日時で、updateTime はクラスの情報が更新された日時だったため、クラスが利用されているかどうかにはあまり関係しなかったため、「連絡事項」の状況を表示するようにしてみました。
「教師」「生徒」の数については、一覧を list で取得して、その数をカウントしています。「生徒」については、最大人数が 1000人と大きく、一度に取得できない場合があるのでくり返し処理しています。
(2)一覧作成処理の完了を通知
組織の規模によっては、組織内に作成されているクラス数が多くなり、一覧の作成完了に時間がかかってしまいます。
今回更新したプログラムでは、一覧作成が終了したら最後の行に「End of classroom list.」と出力して、処理が終了していることをわかりやすくしてみましたが、いつ終わったのかはわかりにくいままです。
そこで、一覧作成が完了したことがわかるように、以下の記事で紹介したスペース(旧称:チャットルーム)を用いた通知を行うようにしました。
![](https://assets.st-note.com/img/1674272420524-xkepyHJ05K.png)
この通知を使用する場合には、プログラム中の以下の部分に通知を行うスペースの Webhook を指定してください。指定してあれば、上図のように処理終了が通知されます。Webhook が指定されていなければ、スペースへの通知は行いません。
![](https://assets.st-note.com/img/1674272527024-JvliMfNiqd.png?width=1200)
その他
機能的には上記 2点が追加されていますが、その他にプログラム中のコメントを追加しただけでなく、@OnlyCurrentDoc の記述を追加し、他の Google スプレッドシートへのアクセスを行っていないことを明示しています。
追加機能
更に、以下の記事にしたように更に機能追加を行ってあります。以下の記事で追加した機能も、この記事で入手できるファイル(Google スプレッドシート)に反映してあります。
このプログラムを使用するには?
以下のリンクにアクセスして、自身の Google ドライブにスプレッドシートをコピーしてください。 ※共有しているスプレッドシートのリンクは #58 と同じですが、中身は更新してあります。
https://docs.google.com/spreadsheets/d/1PlSRnVZxUZdSiIlB7IAOixXgMkb291QBqNXii07lIBQ/copy
上記 URL にアクセスして、メニューから「クラス一覧」→「クラス一覧の作成」を選択すると、シートにクラスの一覧を書き出します。
![](https://assets.st-note.com/img/1674273716160-XQ0slMvkuJ.png?width=1200)
なお、スクリプトの初回実行時には、実行するアカウントによる確認作業が必要になります。詳しくは以下の投稿をご覧ください。
このプログラムは、何の確認もなく処理を実行します。二回目以降の実行時には、確認もなく既にシート上に保存されている一覧が削除されてしまいますので、必要に応じて事前に退避させるなどしてください。
30分の制限に引っかからないように、処理を開始してから 25分が経過したら、一旦中断するようにしています。通常の Google アカウントであれば 6分の制限に引っかからないように時間設定してください。
組織内に作成されているすべてのクラスを取得する場合には、特権管理者で実行しなければなりません。その他のユーザーで実行した場合には、自身が参加しているクラスの情報しか取得できません。
スプレッドシートに埋め込んである GAS のプログラムは、以下のような内容となっています。
最後に
今回、プログラムを更新したのは「クラスには 2名以上の先生用アカウントを登録すること」といったルールが設けられていた場合に、それらのチェックが簡単に行えるようにしたかったからです。
「Resource: cources」では直接得られない情報だったので、過去に作成したプログラムではそのまま対応できず、プログラムに処理を追加しました。
ついでに最新の「連絡事項(Announcement)」の情報を表示していますが、実行時間の制限を回避しているので、更に「課題(CourseWork)」や「資料(courseWorkMaterials)」なども表示したらよかったのかもしれませんが、今回は「連絡事項」だけとしました。も表示するようにしました。
最後に、お決まりのフレーズなどを書いておきます。
一応の動作確認は行っているものの、不慮のトラブルによって損害等が生じても、責任はとれませんので予めご了承ください。
コメントを含めても
270400行くらいのスクリプトであり、実行に際して目的外の場所への書き出しや収集などは行っていません。特別なエラー処理は行っていないので、意図しないケースでエラーが発生してしまうかもしれません。どうにもならない場合には、ご連絡ください。
わたし自身にしてみると、このような「スクリプトを作ること」が目的になっているような感じですが、このスクリプトが何かの役に立てば幸いです。
この記事が気に入ったらサポートをしてみませんか?