見出し画像

GASでクラスの情報共有スライドにその日の宿題未提出者一覧ページを自動的に追加する。実質、担任は何もしない。


はじめに

 以前お伝えしましたが、私は自分のクラスで提出する課題のチェックと管理に googleフォームとスプレッドシートを連携させて使っています。

また、 毎朝の情報共有にGoogleスライドを使っています。今回はこの3つのアプリを google apps Scipt(GAS)使って連携させることで、毎朝チェックした宿題の未提出者の一覧をスライドに自動的に追加してクラスの児童に伝えることができます。

まずは、結論から

 朝の会で情報共有スライドを見ながらその予定を確認する流れのため、子どもたちは自分が宿題などを出し忘れたことに自分で気がつくことができます。その結果、自分から未提出課題を提出することができるようになりました。

こんなページが自動的に追加される

「◯◯さん、今日の宿題の漢字ノート出てないですよ〜」の声かけがほとんど必要なくなります。むしろ出し忘れに気づいた子どもに「自分から気づいてえらいね〜」なんて自分から行動できたことを認めるフィードバックを与えることもできます。

1日のスタートである、朝の会において教師のネガティブな声かけがなくなることは学級経営においてとても大事だなと思います。
そして担任は何もしなくてもこれができるってことがポイントです。

管理用スプシの下準備

 フォームからスプシへの連携については過去の記事に詳細がありますのでそちらを御覧ください。
以下の画像のように「処理用」シートを準備します。そしてクエリ関数を使ってその日の課題が未提出なデータを抽出しておきます。

管理用スプシ「処理用」シート

上の画像のようにA列には「日付」、B列には「課題名」、C列には「名前」が表示されるようにしおておきます。

スライド側の準備


 次に子どもたちと共有している情報共有用のスライドを開きメニューバーから「拡張機能」→「Google Apps Ccript」を開きます。スライドに紐づいたプログラムであるコンテナバインドで行います。

最初に書かれているコードをすべて消去したら、以下のコードを貼り付けてください。

function setTrigger(){//決まった時間分にトリガーを発火させるトリガーを作るプログラム

  const time = new Date();
  time.setHours(8);
  time.setMinutes(19);
  ScriptApp.newTrigger('noHomeworksAlartToSlide').timeBased().at(time).create();

}

function delTrigger() {//毎日セットしたトリガーを削除するプログラム

  const triggers = ScriptApp.getProjectTriggers();
  for(const trigger of triggers){
    if(trigger.getHandlerFunction() == "noHomeworksAlartToSlide"){
      ScriptApp.deleteTrigger(trigger);
    }
  }
  
}


//メイン関数 連絡帳スライドの先頭に当日の宿題忘れ一覧を差し込むプログラム 最後に時間トリガーを削除している
function noHomeworksAlartToSlide() {
  const ss = SpreadsheetApp.openById('ここに管理用スプレッドシートのIDを入力する');管理用スプレッドシートのIDを入力する
  const sheet = ss.getSheetByName('処理用');//処理用シートをつくる
  let lastRow = sheet.getLastRow();
  var data = sheet.getRange(2, 2, 12, 2).getValues();//1番目から12個分の未提出リスト
  var data1 = sheet.getRange(14, 2, 12, 2).getValues();//13番めから12個分の未提出リスト

  let array = [];//12個分の未提出リスト
  for (var i = 0; i < data.length; i++) {
    array.push(data[i].join("---------"));
    //console.log(array);
  }

  let array1 = array.flat();
  let array2 = array1.join("\n")
  console.log(array2);

let values =[];//13〜24個までのの未提出リスト
for (var i = 0; i < data1.length; i++) {
    values.push(data1[i].join("---------"));
    //console.log(array);
  }

  let values1 = values.flat();
  let values2 = values1.join("\n")
  console.log(values2);


  var today = new Date();
  var dd = today.getDate();
  var mm = today.getMonth() + 1; // January is 0!
  var yyyy = today.getFullYear();
  var weekday = today.getDay();
  var weekdays = ["日", "月", "火", "水", "木", "金", "土"];

  todaystr = mm + '/' + dd + ' (' + weekdays[weekday] + ')';
  Logger.log(todaystr);


  var presentation = SlidesApp.getActivePresentation();
  var slide = presentation.appendSlide(SlidesApp.PredefinedLayout.TITLE_AND_TWO_COLUMNS);
  slide.move(0);
  var titleShape = slide.getShapes();
  titleShape[0].getText().setText(todaystr + "未提出  すぐに提出しましょう");

  var bodyShape = slide.getShapes();
  bodyShape[1].getText().setText(array2).getTextStyle().setFontSize(9);

  var bodyShape = slide.getShapes();
  bodyShape[2].getText().setText(values2).getTextStyle().setFontSize(9);


delTrigger();
  console.log('実行されました'); //
  
}

自動追加したい時間の設定

コードの4、5行目に以下のものが書かれています。


time.setHours(8); time.setMinutes(19);

私のクラスでは毎朝8時19分になったら時間トリガーによって追加してほしいなと思ったからこの設定にしてあります。お好きな数字に変更してみてください。

時間トリガーの設定


左の時計アイコンから「トリガーの設定」を行います。トリガーとは プログラムが動き出すきっかけのことです。トリガー画面から右下にある「+ トリガーを追加」ボタンをクリックして画像のように設定します。

プログラム→「SetTrigger」
イベントのソース選択→「時間主導側」
時間ベースのトリガータイプ→「日付ベース」
時刻→夜中から明け方の任意の時間がよいと思います。

トリガー設定画面

ここまでできると次のような画面になります。

トリガーが無事設定された

タイムゾーンの変更

初期設定では、日本時間になっていことがあります。左のメニューバーのアイコン「歯車(設定)」をクリック。→「appsscipt.json」マニフェストファイルをエディタで表示する にチェック

「timeZone」の部分を画像のように「Asia/Tokyo」にする 


管理用スプシのIDの入力

Googleスプレッドシートには固有のIDが割り振られています。それをコピーして所定の場所にに貼り付けてください。 そうすることによって、任意の スプレッドシートからデータをもらうことができます。詳しくは以下のリンクをご覧ください。


管理用スプシのIDを以下の' 'の間にコピペします。

const ss = SpreadsheetApp.openById('ここに管理用スプレッドシートのIDを入力する');管理用スプレッドシートのIDを入力する


プログラムの構成

全部で3つのプログラムで構成してあります。
setTrigger()
決まった時間分にトリガーを発火させるトリガーを作るプログラム

delTrigger()
毎日セットしたトリガーを削除するプログラム

noHomeworksAlartToSlide()
//メイン関数 連絡帳スライドの先頭に当日の宿題忘れ一覧を差し込むプログラム 最後に時間トリガーを削除している

実際のワークフロー


①提出入力フォームでチェックする(手入力)
②管理用スプレッドシートの「処理用」シートにその日の未提出一覧が作成される(自動)
③定刻(初期設定は8時19分)になったらスライドが作成されデータが転記される(自動)

基本はすぐに削除します


ちなみに人権配慮的な視点から、この作成されたページは毎日削除しています。個人の累積課題は「個別確認用スプシ」で自分の課題だけを確認できる仕組みです。

おわりに

プログラミングは学校現場を救う(と私は思う)

 私のクラスでは宿題などをチェックする仕事は係の子どもたちにお願いしています。そのため、担任である私は実質何もしていません。係の子どもたちを労うくらいです。ネガティブな指導がなくなったおかげで私自身のメンタルヘルスも良い状態なのかなと感じます。

子どもの係の仕事 × ICT(プログラミング)
により
私自身の働き方自体も変わりました。

数年前にGASの存在を知り、「おもしろそう」を続けた結果なのかもしれません。 プログラミングが少しぐらいわかる状態になるとchatGPTといった生成AIにある程度お願いしながらプログラムがつくれるようになります。

私は「学校の先生のためのGAS」みたにな講座で最初勉強しました。講師の先生がわかりやすく伝えています。関心ある方はどうぞ。


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