見出し画像

学級担任を悩ませる提出物管理に新提案。簡単入力フォーム&GASで未提出者リストを自動作成。 データを児童と共有して自己管理を促す仕組みづくり

長ったらしいタイトルで申し訳ないです。ここでお伝えしたいことを箇条書きにすると

  • 学級担任につきまとう業務に提出物(課題)の管理業務がある。

  • この業務は煩雑を極める。

  • googleフォームとGAS(google apps script)を活用することで課題の未提出者リストを自動で作成することができる。

  • 児童ごとに配布したスプレッドシートで自分の提出状況が確認できるため、児童は自己管理できるようになる(のではないか)

  • おまけ「シートの構成」、「コードの紹介」




あるある「提出物の管理方法」

 多かれ少なかれ全国どこの教室でも以下のような流れで提出物を管理しているのかなあと思います。 学級担任の方針にもよりますが、毎日の宿題管理も同様のことをされている先生も多いことと推測されます。

  1. 集めた提出物を名簿などにチェックする。

  2. 未提出の児童を抽出し、未提出リストをプリントの裏紙などにペンで書き、 黒板の端っこなどに掲示する。

  3. 朝の会、帰りの会等の時間に該当児童に連絡し、提出を促す。

  4. 後から提出された場合、未提出者リストの名前を削除する

  5. まだ未提出の児童がいる場合、さらに声をかけて提出を促す

  6. 全員が提出するまで4・5を繰り返す


チェックして未提出者を書き出すリストをつくる工程自体を削減できないか

 教員になってずっと、当たり前のように行ってきた、この未提出者リストを作ると言う業務。これもうちょっと作業工数減らせるんじゃないのかなあってずっと思ってたんです。

 提出者をチェックして、ボタン押したらリストができればいいなぁって。

黒板を占める未提出者リストの「汚さ」

 この掲示方法にも疑問を感じていました。未提出者リストに児童の名前を書き出す。 その書き出されたリストは全員が見える黒板の端っこに貼ってあったり、黒板の端にチョークで名前を書き出されていたりしました。今まで勤務してきた学校の同僚の先生の教室を見ても、このような掲示方法が多かったように思います。中には黒板の面積の4分の1程度を未提出者の名前が書き出されていた教室もありました。

学びの記録を行うための黒板にこの未提出者リストを連連と書き出すことは児童にとって学びの邪魔になるのではと思います。言い方は良くないですが学習環境として「視界が汚い」と私は感じます。

未提出の児童の名前を貼り出すことの人権的な配慮について

 また、教室に掲示するのはなんだか見せしめなのかなぁと感じていました。 果たして、本当に適切なのでしょうか?

 人権配慮に欠けるのではと考えます。確かに、未提出であることを確認するために、リストを作ること自体は必要ですが、それをクラス全員の児童が見えるところに貼ると言うのはいかがなものかと考えます。

教員が提出を促す声かけを毎回するのってどうなの?

 もちろん必要だとは思いますが、児童が自分で自分の提出物が適切に提出されているかどうかを確認できるような仕組みがあれば自己管理能力も高めやすいのかなと考えました。


「提出物管理」運用の流れ

ハイライト部分が担任がおこなうこと

 ここからがいよいよ本題です。 運用の具体についてお伝えします。

①児童が提出した課題を担任はGoogleフォームを使って入力をしていきます。
②入力が完了すると、自動的にスプレッドシート上に未提出の児童の名前が記載されたリストが作られます。

 この未提出者一覧、スプレッドシートは担任のみが閲覧できる状態にしておきます。

③このデータを児童ごとに抽出し、別のスプレッドシートに反映させておきます。

 児童は自分の提出物管理用スプレッドシートを確認して、未提出課題があったことに気づくことができるようになります。

④未提出だった児童が、提出を行った際に 教師は、未提出一覧のチェックリストにチェックをすると、自動的に名前が削除されます。
 つまり、最新の提出状況がスプレッドシートに反映され、 児童と共有していると言う状態になります。


学校現場で使えそうな場面を想定する

①学級担任が提出物を調べておく場面
②学級担任が宿題などの管理をする場面
③教科指導者が学習課題の提出を管理する場面

④教務主任や管理職などが校務で取り組む締切のある仕事を管理する場面


ちなみに、私自身は、高学年の担任として① ② ③全てを一まとめにして、1つのシート上で運用しています。 運用していますが、通知表を回収するとか、 水泳指導に関する承諾書等、必ず全員が集めなければならないような①に属するものは 条件付き書式を設定して、背景に色がつくように設定しています。

 なお、②の宿題については運用はしていますが、それほど追い立てる事はしていません。 気づいた児童が自分からやっていなかった宿題をやって後から報告提出するという スタイルが欲しいです。

 ③番について、私の勤務する学校では、教科担任制でおこなっています。他の教科の授業課題の提出状況について、担任である私も逐一把握できていません。このシートを同じクラスで指導する教員で共有することで教員同士において 児童の学習状況に関するコミニケーションも行うことができそうです。 まだ運用はしていませんが、これから 試験運用ができるといいなと思います。


提出物チェック用入力フォーム

実際のシートについて解説をしていきます。

 できるだけ簡単に作ります。 入力項目は2つだけ。1つは提出物の名前、これは記述式で入力。2つ目は、提出した児童の名前、これはチェックボックスになります。 私をイメージとしては、担任が集めた提出物の名前を見ながら、タブレット上のフォームで名簿に丸をつける代わりにチェックボックスにチェックをする感じです。

児童名はサンプル用です。3と10の児童は未提出になる

未提出者リスト「管理用スプレッドシート」

入力用フォームの送信ボタンを押すとスプレッドシートの「リスト」シートには図のように 未提出者のみが書かれた一覧が表示されるようになります。 この図の例では ミニ漢字テストの直しを提出していない3番児童と10番児童が一覧に表示されます。

「リスト」シートに3と10の児童の名前が表示される

児童が自分の提出状況を確認できるスプレッドシート 「個人用確認シート」

そして、児童はクラスルーム経由で配布されたスプレッドシート「個人用確認シート」で、自分の課題の提出状況を確認することができます。以下の図では4番児童が「マラソン大会承諾書」と「算数プリント④」が未提出であることが確認できます。 もちろん、他の児童の提出物が出ているかどうかの情報はわかりません。友達の提出状況を知る必要はないですからね。

個人用確認シートでは「04児童」だけの未提出リストが作成される
管理用スプレッドシートでは未提出の児童全員が表示されている

読み飛ばしてもらってOKですが、興味のある方だけに簡単にこのシートを解説します。上図のようにB1セルに「管理用スプレッドシート」のURLを入力しておきます。 そして、B2セルに次の数式が入っています。これはimportrange関数とquery関数を使って処理を行っています。


=QUERY(IMPORTRANGE(B1,"リスト!A:E"),"select Col3,Col4,Col1,Col5 where Col3 = '"&D1&"' ",true)

「管理用スプレッドシート」の「リスト」シートのA列からE列を参照して「3列目」のデータの中から「04児童D」という名前のデータのみを抽出して、3列目、4列目、5列目を表示させる。

D1セルに入力されている児童名を検索キーにして抽出させている


後から提出したらチェックボックスにチェック

担任は提出確認後タブレットから「管理用シート」を開き、該当の☐にチェックを入れます。すると「セルの編集」をトリガー設定しておいたことで、☑された該当行を削除するプログラムが発動し、自動的にリストから削除されます。

提出確認したら、☑チェックすると
トリガーが発火し、行を削除するプログラムが自動的に実行される

PC上での作業もできるように右上にボタンを配置してあります。(念のため)

ここからがクラウドの真骨頂。常に最新データの共有です。教師が管理する「管理用シート」を変更することで児童一人一人が確認できる「個人用シート」も自動的に最新に変更されるのでお互いに「これ出したっけ?」「このプリントは出したはずですよ」的な確認し合うことはなくなります。

児童にとってみたら、この「個人シート」に何も表示されていない状態をキープすることが良い状態であると理解できるので児童にとってもわかりやすくなるのです。


おまけ①フォーム送信後に自動的に未提出リストを作るGAS(checkBox関数)

「管理用シート」にコンテナバインドで貼り付けて使用してください。またシート名は「名簿」、「リスト」シートの2つ用意してください。名簿シートの作りは下の図の感じ。

ボタンはなくてもOKです。
function checkBox(e) {//メイン関数 課題未提出者をチェックボックス付きでリスト化、 
 //フォーム送信時にトリガーが発火するようにしておく
 
 var values = e.values;//フォームの回答を取得
 var stamp = values[0];//タイムスタンプを取得(今回はなくても動きます)
 var submissions = values[1];//課題名
 var name = values[2];//名前
 let splitName =name.split(', ');//カンマで区切られたものを配列にして格納する

 var choicelist=[];//リストの箱を用意
 var j=0
 //フォームの選択肢から名簿を取得
 var sheet = SpreadsheetApp.getActive().getSheetByName('名簿');
 var FM_URL = sheet.getRange(1,4).getValue();//フォームのURLを取得する
 var form = FormApp.openByUrl(FM_URL);
 var items = form.getItems();
 var item =items[1];
 var ID =item.getId();
 var item = form.getItemById(ID).asCheckboxItem();
 var choices = item.getChoices();
   for(var i = 0; i < choices.length; i++) {//解答にあるかないかを識別
      var choice = choices[i].getValue();
       if(choice === splitName[j]){
         j=j+1
        }else{
         choicelist.push(choice);//配列に格納
        }
    }

 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sht = ss.getSheetByName('リスト');
 var lastRow  =sht.getLastRow();

 for (i = 0; i < choicelist.length; i++) {
   sht.getRange(i*1+lastRow +1, 3).setValue(choicelist[i].trim());
   sht.getRange(i*1+lastRow +1, 2).insertCheckboxes();
   sht.getRange(i*1+lastRow +1, 1).setValue(submissions);
   sht.getRange(i*1+lastRow +1, 4).setValue(stamp);
  }
  sht.getRange(1, 1, sht.getMaxRows(), sht.getMaxColumns()).activate();//並び替えと日付表示
  sht.getActiveRange().offset(1, 0, ss.getActiveRange().getNumRows() - 1).sort({column: 4, ascending: false});
  ss.getRange('D:D').activate();
  ss.getActiveRangeList().setNumberFormat('m"/"d" "ddd');
}

参考にさせていただきた動画です。すごい勉強になりました。

最後にトリガーの 設定から、以下の図のように「フォーム送信時」に発火するようにしてください。

トリガーの設定

おまけ②  チェックボックスに☑すると、自動的にリストから削除してくれるGAS(deleteRow関数)

「管理用シート」にコンテナバインドで貼り付けて使用してください。

function deleteRow(){//その後提出したらリストから消す  トリガーで「セルの値が変更」したら発動にするとよい
  var ss = SpreadsheetApp.getActiveSpreadsheet();//スプレッドシートを有効にする
var sht = ss.getSheetByName('リスト');// リストという名前のシーㇳがある前提
var lastRow  =sht.getLastRow();

var value = sht.getDataRange().getValues();
for (i = value.length-1; i >= 0; i--) {
  if (value[i][1] === true) {
     sht.deleteRow(i+1);
   }
}
}

「リスト」シートのつくり

「リスト」シートのつくり


トリガーの設定はイベント編集時がおすすめ
(時間主導にしてやがて削除でも問題はない)


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