#56 課題で提出させたスライドを結合する
先日の #54 に、
というコメントがあったので、#54 をベースにして、Google Classroom で配布した Google スライドによる課題を、リンク貼り付けでまとめるプログラムを作ってみました。
#54 のプログラムでは、共同編集の対象を「管理シート」で一覧として用意しなければなりませんでしたが、今回のプログラムは Google Classroom で配布した課題の情報からまとめます。
ファイルの配信は Google Classroom で行い、それらのファイルの結合を GAS のプログラムで行う感じになっています。
操作手順
今回のプログラムも「管理シート」と称する Google スプレッドシートで操作を行います。下図のようなシート「設定」を含めた 4つのシートと、GAS のプログラムで構成されています。
以降の手順に沿って操作すれば利用できます。基本的に入力操作は必要なく、以下のような簡単な操作で利用できます。
シート上に配置されたボタンを押す。
ドロップダウンリストから選択する。
チェックボックスの ON/OFF を選択する。
基本的に、シート「設定」だけで操作を行います。スプレッドシートのファイル内には他に 3つのシート(「クラス一覧」「課題一覧」「提出物一覧」)が存在していますが、他のシートで操作する必要はありません。
(0) 準備
先生のアカウントでログインした状態で、以下の URL にアクセスして、「管理シート」を、自身の Google ドライブにコピーします。
https://docs.google.com/spreadsheets/d/1SMcs0v5GeUbni4SAQ7fyxW06yiUiuaOQ6R_5bJLzHt4/copy
今回のプログラムで作成する「まとめスライド」は、この「管理シート」が保存されているフォルダではなく、Google Classroom で配信された課題が保存されているフォルダに作成されます。
そのため、この「管理シート」が保存されているフォルダには依存しません。
コピーしたスプレッドシートでプログラムを実行するときには、初回だけ権限の確認が行われます。その辺りの説明は、以下の記事をご覧ください。
(1) 参加クラスの取得
「参加クラスの取得」ボタンを押して、自身のアカウントが教師として参加しているクラスを取得します。
この操作によって、特別な画面の変化はありません。画面上部で、プログラム(スクリプト)の実行が終了したと表示されるのを待ちます。
取得した情報は、シート「クラス一覧」に書き出されますが、情報が書き出されたシートを確認する必要はありません。
(2) 対象クラスの選択
前項 (1) で取得したクラス情報を、セル D2 で選択します。
前項 (1) によって、シート「クラス情報」に書き出された参加しているクラス情報をもとに、セル D2 のドロップダウンリストによって処理対象となるクラスを選択します。
ドロップダウンリストには、クラス名に ( ) 書きでクラスの ID が併記されます。
ドロップダウンリストでクラスを選択すると、セル D3 にはグレーアウトした文字色で、選択したクラスのグループアドレスが表示されます。 ※このグループアドレスは、後述の共有設定に使用するものです。
(3) 配信課題の取得
「課題を取得」ボタンを押して、前項 (2) で選択したクラスで配信されている「課題」を取得します。
前項 (1) と同様に、特別な画面の変化はありません。画面上部で、プログラム(スクリプト)の実行が終了したと表示されるのを待ちます。
対象となる課題は、API で得られる情報 CourseWorkType が ASSIGNMENT のものだけを対象としています。
取得した情報は、シート「課題一覧」に書き出されますが、情報が書き出されたシートを確認する必要はありません。
(4) 対象となる課題を選択
前項 (3) で取得した課題情報を、セル D5 で選択します。
前項 (3) によって、シート「課題一覧」に書き出された配信されている課題情報をもとに、ドロップダウンリストによって処理対象となる課題選択します。
ドロップダウンリストには、課題名(課題のタイトル)に ( ) 書きで課題の作成日時が併記されます。
(5) 課題での提出物を取得
「提出物の一覧を取得」ボタンを押して、前項 (4) で選択した課題の「提出物」を取得します。
取得した情報はシート「提出物一覧」に書き出されます。 ※情報が書き出されたシートを確認する必要は、基本的にはありません。
シート「設定」のセル D8:D10 には、シート「提出物一覧」に書き出された情報の概数が表示されます。
課題割り当て人数 :
当該課題が割り当てられている人数。添付ファイル 付加数 :
提出物としてファイルが添付されている数。基本的には、0 か「課題割り当て人数」と同数のはず。Google スライド添付数 :
添付されているファイルに、Google スライドが含まれている数。基本的には、0 か「添付ファイル 付加数」と同数のはず。
提出物に複数のファイルが添付されている場合にも、Google スライドのファイル(MIME_TYPE が "application/vnd.google-apps.presentation")を探して処理対象としています。当たり前ですが、Google スライド以外のファイルは、「まとめスライド」の対象にはなりません。
しかしながら、複数の Google スライドのファイルが添付されていた場合には、API で得られた情報順で先に見つけた方を対象としています。
(6) まとめスライドの作成
「まとめスライド 作成」ボタンを押すと、生徒が課題で作成したスライドをまとめた「まとめスライド」を作成します。
「まとめスライド」は、生徒が作成したスライドの内容をリンク貼り付けする形で作成します。
「まとめスライド」の先頭には、見出しページが 1枚存在しています。必要に応じて、削除もしくは編集してください。
「まとめスライド」および保存されているフォルダへのリンクは、セル D14:D15 に設定されます。
セル D12「すべてのスライドをまとめる」のチェックボックスによって、リンク貼り付けするのは「1枚目だけ」「すべて」のどちらにするかを ON/OFF できます。
セル D13「クラスの参加者を「閲覧者」に設定」のチェックボックスによって、クラスの参加者に対して「閲覧者」の権限を付与するかを ON/OFF できます。
「まとめスライド」にリンク貼り付けされるスライドの順番は、前項 (5) で取得した提出物を取得する API で得られた情報の順番のままです。この順番に不都合がある場合には、(6) で「まとめスライド 作成」ボタンを押す前に、シート「提出物一覧」の順番を並び替えてください。
既に「まとめスライド 作成」ボタンを押して、「まとめスライド」が作成されていた場合に「まとめスライド 作成」ボタンを再度押した場合には、上書きされるのではなく、追加で「まとめスライド」を作ります。
同じフォルダに、同じファイル名で作成されるので注意してください。
(7) まとめスライドの更新
「まとめスライド 更新」ボタンを押すと、スライド内のリンク貼り付けされた内容をすべて更新します。
「まとめスライド」のそれぞれのスライドで「更新」ボタンを押しても更新できますが、一括して更新したい場合には、「管理シート」で処理すると簡単です。
「まとめスライド」の一括更新を行う場合には、セル D14 の内容をもとに処理対象を決定しているので、セル D14 の内容をクリアするなどすると、対象となるファイルにアクセスできなくなるのでご注意ください。
注意するポイント
注意するポイントは、#54 のプログラムに似た部分がありますが、以下のような感じです。
「まとめスライド 更新」ボタンで更新されるのは、「個別ファイル」からリンク貼り付けされている「まとめスライド」が作成された時点の 1ページ目のスライドであり、スライドが追加、もしくは順番が入れ替えられたりしても、更新元となるのはリンク貼り付けされたスライドである。
また、リンク貼り付けされていないページを更新しても、それらは反映されない。「まとめスライド 更新」ボタンを押したタイミングの内容が「まとめスライド」に反映される。それ以降の変更は、再度「まとめスライド 更新」ボタンを押さなければ反映されない。
「まとめスライド 更新」ボタンを押して反映することで、それぞれの生徒の編集内容が、他の生徒にも閲覧できるようになる。
「まとめスライド」をプレゼンテーションしている最中に、「まとめスライド 更新」ボタンを押しても、プレゼンテーション中の内容には反映されない。反映するためには、プレゼンテーションをやり直す必要がある。
という点です。
最後に
似たような動作をするプログラムでも、初期条件や入力が違えば形がかわってきます。本当は、こういったスプレッドシートで動作させるのではなく、Google Classroom のアドオンという形にして、Google Classroom の画面上から実行できると、より使い勝手がいいんだろうなと思いつつ、現状では多くの学校や自治体で利用している無償の「Google Workspace for Education Fundamentals」ではアドオン機能を利用できないし、アドオン機能で利用するための API も一般公開されていないので、このような形態で実現するしかないんだろうな、と思います。
似たようなプログラムをベースに作り直したのですが… 操作手順が増えたので操作のための UI が増え、使用する API も増えたことでプログラムの作り込みと動作確認に思ったよりも時間がかかりました。
で、操作手順がふえることでドキュメント化(この記事の作成)にも時間がかかりました…
最後に、お決まりのフレーズなどを書いておきます。
一応の動作確認は行っているものの、不慮のトラブルによって損害等が生じても、責任はとれませんので予めご了承ください。
コメントを含めても 350行程度のスクリプトであり、実行に際して目的外の場所への書き出しや収集などは行っていないはずです。
特別なエラー処理は行っていないので、意図しないケースでエラーが発生してしまうかもしれません。どうにもならない場合には、ご連絡ください。
わたし自身にしてみると、このような「スクリプトを作ること」が目的になっているような感じですが、このスクリプトが何かの役に立てば幸いです。
この記事が気に入ったらサポートをしてみませんか?