#88 クラスを一括して削除/アーカイブ
Google Classroom を利用していて、年度更新時にクラスのアーカイブや削除を行うかと思いますが、一つずつ操作するのが面倒だと思いませんか?
そんな不満を解消するプログラムを作成してみました。
なぜ、削除/アーカイブする?
使用しなくなったクラスをアーカイブしなければならない理由は、それぞれの自治体や組織、学校の考え方次第なのではないか、と思います。
アーカイブすることで、アクティブなクラスとして表示されなくなり、削除すると完全にアクセスできなくなります。これらの挙動は、以下のヘルプ記事で説明されていますが、要約すると以下のような感じです。
クラスをアーカイブできるのは、「教師」の役割でクラスに参加しているユーザーだけ。※クラスのオーナーである「担任」と、オーナー以外の「教師」である「副担任」のどちらでもアーカイブできる。
クラスを削除できるのは、クラスのオーナーである「担任」だけ。
「生徒」は、クラスをアーカイブしたり、削除したりできない。
クラスをアーカイブ/削除しても、ファイルが削除されるわけではない。
クラスのカレンダーは、アーカイブしても残ったまま。クラスが削除されると、クラスのカレンダーも削除される。
アーカイブしなかったら?
クラスをアーカイブしなかった場合、生徒はクラスのストリームに引き続きアクセスできます。生徒が投稿可能な設定になっていれば、引き続きストリームへの投稿も行えます。
年度が替わるなどして使わなくなったクラスは、必ずしもアーカイブしなくてもよいのですが、「作成できるクラス」には制限がないものの、「参加できるクラス」には 1000 という制限があるため、この制限に引っかからないように、アーカイブするだけでなく、使用しなくなったクラスは最終的には削除しなければなりません。
アーカイブした状態であれば、以下のようなメリットはあるものの、
クラスのコピーの対象にできる。
課題の再利用ができる。
クラスのカレンダーは残ったままといった、わかり難さも残っています。
どこまで管理できる?
それぞれのクラスの「教師」は、それぞれのクラスについて、どのように利用するかを設定できます。また、特権管理者は Google Classroom のアプリとしての挙動は設定できます。
しかしながら、生徒がどのように Google Classroom を利用するかは、教師側どころか、特権管理者でもあっても管理はできません。
具体的には、どのような順序でクラスを表示させるかを決定できるのは生徒自身なのです。
どうやって行う?
クラスを削除/アーカイブする操作は、クラスが一覧表示されているクラスカードの右上に表示されている三点リーダーから「アーカイブ」を選択することでアーカイブできます。
アーカイブするときには、確認メッセージが表示されます。
アーカイブされると、当該クラスのクラスカードは「アーカイブされたクラス」を選択しなければ、表示されなくなります。また、ストリームなどにもアクセスできなくなります。
アーカイブするときと同様に、三点リーダーから「削除」を選択すると当該クラスを完全に削除できます。
クラスを削除するときには、確認メッセージが表示されます。
「復元」を選択して、アーカイブ状態からアクティブな状態に戻すときにも、確認メッセージが表示されます。
基本的には、このように一つずつ UI によって操作しなければ、クラスはアーカイブや削除できないため、複数のクラスを操作するのはそれなりの手間がかかります。
作成したプログラム
前述したようなクラスのアーカイブや削除を一括して行えるようにするプログラムを作成しました。
Google アカウントでログインした状態で、以下の URL にアクセスして、スプレッドシートをコピーしてください。
https://bit.ly/3Tuc6C5
→ 利用件数を確認するために Bitly の短縮 URL で掲載しています。
プログラムをはじめて実行する際には、アカウントによる確認作業が必要になります。詳しくは以下の投稿をご覧ください。
基本的には、シート上部の 4つのボタンで操作を行います。以降では、プログラムの使い方を説明します。
(1)対象のユーザーを指定
「実行ユーザーの取得」ボタンを押すと、前述の確認作業を行ったユーザー(Google アカウント)をセル B1 に取得します。以降の処理では、このユーザーをもとに処理を行います。
このプログラムを特権管理者で実行している場合には、セル B1 に任意のユーザーを指定することで、指定したユーザーが参加しているクラスをアーカイブや削除できます。 ※特権管理者ではなければ、自身が権限を有していないクラスに対するアーカイブや削除は行えません。
(2)参加しているクラスの取得
「参加クラスの取得」ボタンを押すと、以下の処理を行います。
現在のシートの内容(見出し行から下の 7行目以降)をクリア
参加しているクラスを取得して、一覧を作成
一覧には、それぞれのクラスについての、以下の情報が出力されます。
ID(id)
クラス名(name)
セクション(section)
説明(description)
役割(ownerId から判断)
状態(courseState)
最終更新(updateTime)
カレンダー(calendarId)
セル I1 と I2 のチェックボックスで、参加しているクラスを取得するときの処理方法を設定できます。
I1 : 「処理フラグ」の既定値
出力された一覧における「処理フラグ」の既定値I2 : アクティブなクラスも取得対象にするか?
OFF → アーカイブされたクラスだけ
ON → アクティブなクラスも一覧に含める
この一覧では、↓ の記事で紹介したように GAS では扱えない「科目」を一覧に出力していません。「部屋」ではなく「クラスの説明」を一覧に出力しているので、これらの内容から対象となるクラスかどうかを判断してください。
(3)クラスのアーカイブ
前項で作成された一覧で、処理の対象となるクラスの列 I「処理フラグ」を ON にして、「クラスのアーカイブ」ボタンを押すと、当該クラスがアーカイブされます。
列 J に「The caller does not have permission」と表示される場合は、そのクラスに対してアーカイブを行うだけの権限を有していないことを意味します。
正常に処理できれば、列 J に「Archived.」と表示され、列 F も「ARCHIVED」に更新されます。
(4)クラスの削除
前項で作成された一覧で、処理の対象となるクラスの列 I「処理フラグ」を ON にして、「クラスの削除」ボタンを押すと、当該クラスが削除されます。
列 J に「Precondition check failed.」と表示される場合は、アーカイブされていないクラスに対して削除を行おうとしたことを意味します。削除する前には、アーカイブしなければなりません。
列 J に「The caller does not have permission」と表示される場合は、そのクラスに対して削除を行うだけの権限を有していないことを意味します。
→ 特権管理者ではないユーザーで削除するのであれば、事前にクラスのオーナーを譲渡してもらわなければなりません。
正常に処理できれば、列 J に「Removed.」と表示され、列 F も「REMOVED」に更新されます。
(5)メニューでの操作
スプレッドシートに「Classroom」というメニューが追加されています。このメニューから、次のような操作が行えます。
入力内容のクリア
→ セル B1 の内容をクリアするクラス情報のクリア ※7行目以降をクリア
→ 7行目以降のクラスの一覧をクリアするクラス情報のソート ※取得で中断されたときに使用
→ 既に出力されているクラスの一覧をソートし直します。この機能は、実行時間の制限によって、「参加クラスの取得」ボタンでの一覧作成が途中で中断されてしまったときに、作成された分の一覧で処理を継続するための機能です。処理フラグ をすべて ON
→ 出力されたクラスの一覧について、列 I をすべて ON にする。処理フラグ をすべて OFF
→ 出力されたクラスの一覧について、列 I をすべて OFF にする。
最後に
今回のプログラムは、以前に作成したプログラムを焼き直し、以下の処理が行えるようにしました。
クラスの一覧を作成
クラスのアーカイブを一括処理
クラスの削除を一括処理
それぞれのクラスの「教師」が自身でアーカイブや削除を行うにしても、複数のクラスを処理しなければならない場合に、相応の手間になってしまうことを避けられると思います。
学校の担当者が一括してクラスを作成している場合には、このプログラムがあれば簡単にアーカイブや削除が行えるようになるはずです。👍
最後に、お決まりのフレーズなどを書いておきます。
一応の動作確認は行っているものの、不慮のトラブルによって損害等が生じても、責任はとれませんので予めご了承ください。
コメントを含めても 290行くらいのスクリプトであり、実行に際して目的外の場所への書き出しや収集などは行っていません。
特別なエラー処理は行っていないので、意図しないケースでエラーが発生してしまうかもしれません。どうにもならない場合には、ご連絡ください。
わたし自身にしてみると、このような「スクリプトを作ること」が目的になっているような感じですが、このスクリプトが何かの役に立てば幸いです。
「スキ ♡」を押してもらえると、このようなプログラム作成の励みになります。😍
この記事が気に入ったらサポートをしてみませんか?