欠席フォーム×電子保健板:校務DX成功の秘訣

業務改善

こんにちは!

ICT主任として、「どうしたら現場でタブレットやICTツールをもっと活用してもらえるのか」と悩んでいる方へ。この記事は、まさにあなたのためのものです。

私は携帯の通信事業職から10年ほど前に教師に転職し、どうしてこんなに学校というのはアナログの文化が根強く業務のICT化が進まないのだろう。それどころか、ICTを使おうとすると珍しがられ、足を引っ張られてばかり。そんなもやもやとした思いをもちながら、当時は書画カメラやパソコンのWord、共有のテレビにラジカセなどあらゆる視聴覚機器のトラブルを対処したり、使い方を先生方にレクチャーしたりしながらICTの活用を推進していました。むしろ、当時はICT担当なんて呼び方ではなく「機械に強いお兄さん」という方がピッタリでした。

以前は学校の予算ではどうしても買ってもらえないAppleTVを自腹で購入し、学校に2台しかないプロジェクターの片方を教室に持ち込んで、自分のiPadやiPhoneで黒板に直に投影して子供たちに見せたりもしていました。当時はKocriというアプリをよく使って黒板に罫線やマス目を投影していました。子供達からはiPad先生と半分からかわれていました。当時はそれくらい「変わり者」という目で見られていたのです。

そんな中、急激に現場でICTが進んだのは、間違いなく新型コロナウィルス感染症による影響でした。タブレットが導入されたことで使わざるを得なくなった現実を受けて、学校はパニック。これまでが嘘のようにICTの担当に対するニーズが高まりました。

そこでは以前とは全く違った反応が見られたのです。先生たちはオンラインミーティングの繋ぎ方や学習アプリの使い方など学んでいこうという態度に変わりました。しかし、ICTを面倒なものという意識をもっている先生も少なくはないなと思いました。より便利に効率よく使おうという提案に対して強くそれを感じました。実際に私の実践では、

「新しいツールを導入したのに、現場の先生たちにあまり使ってもらえない。」

「便利さを伝えても、共感してもらえず、手応えがない…」

「そもそもトラブルが怖くて新しいことを試すのが不安…」

など私自身も、これまで同じようにこうした壁にぶつかりながら少しずつ改善を重ねてきました。だからあなたも大丈夫です!小さな積み重ねが、現場の雰囲気を変え、先生たちの信頼を得て、ICT活用を広げる鍵になります。

この記事では、 現場で経験した悩みや工夫、成果 をもとに、「これなら自分もできるかも」と思えるアイデアをお伝えします

さあ、ICT推進の第一歩を踏み出してみましょう!

  1. タブレットを使う「必然性」を作る
    1. 欠席連絡の電子化に取り組んだ背景
    2. 導入初期:保護者が簡単に入力できる設計
    3. 先生用フォームの導入でさらに効率化
      1. プルダウン形式を採用
      2. 同じスプレッドシートに情報を統合
    4. 欠席連絡の電子化で得られた効果
      1. 朝の電話対応がほぼゼロに
      2. タブレット利用の習慣化
  2. 保健板の電子化による効率化
    1. 『使っては改善の繰り返し』でより使いやすく!
  3. Google Chatで楽々解決!入力忘れを防いで、学校業務をもっとスムーズに
    1. 電子保健板のデジタル化とその壁
    2. システムのしくみ
    3. システム導入後の嬉しい効果
  4. ①欠席フォームを作る
    1. 保護者用の欠席フォームの質問項目
    2. 先生用フォームの質問項目
  5. ②欠席フォームとスプレッドシートにリンク
    1. スプレッドシートに設定するシート名一覧
  6. ③Google App Scriptを設定(各スクリプトの解説付き)
    1. 保健板のチェックスクリプトの解説
      1. 🌟 main() 関数(スクリプトのスタート地点)
      2. 🌟 disableEditingForCompletedRows() 関数
      3. 🌟 updateHealthBoard() 関数
      4. 🌟 buildUpdates() 関数
      5. 🌟 applyUpdates() 関数
    2. 保健板未入力の通知スクリプトの解説
      1. 🔍 1. checkAndNotify() – 保健板をチェックし、通知を送る
      2. 🔍 2. cancelLaterTrigger() – 2回目のトリガーをキャンセル
      3. 🔍 3. sendChatNotification() – Google Chat に通知
      4. 🔍 4. createTimeDrivenTrigger() – 毎日決まった時間に実行
      5. 🔍 5. isHoliday() – 休日なら通知しない
      6. 🔍 6. getHolidays() – 日本の祝日リストを取得
      7. 🔍 7. resetNotificationFlag() – 通知フラグのリセット
      8. まとめ
    3. 保健板のバックアップ自動化スクリプトの解説
      1. 🔍 1. createCopyOfSheetsAndClearOriginal() – シートをコピーして元のデータをクリア
      2. 🔍 2. refreshFormulas() – 数式をリフレッシュ
      3. 🌟 このスクリプトの流れ
      4. ✨ 使うメリット
  7. Google Apps Scriptで「電子保健板」を毎月自動でバックアップ&リセットする方法
    1. 1. なぜ自動バックアップ&リセットが必要なのか?
    2. 2. 仕組みの概要
    3. 3. 実際のコード(コピペでOK!)
      1. 🔹 必要な準備
    4. トラブルから学び、改良を重ねる大切さ
    5. 試行錯誤を恐れない心構え
  8. 小さく始めることで得られる信頼と成果
    1. 実例:夕方の「ちょこっとICT練習会」
      1. 練習会で扱ったテーマ
          1. 業務効率化に役立つGoogleツールの活用方法
          2. 授業で使えるICTツール
          3. iPadの便利な機能紹介
          4. 校務でのAI活用(OJT研修)
      2. 練習会の特徴と工夫
          1. テーマを絞り、短時間で実施かつ自由参加
          2. 実際に操作してもらう
          3. 参加者の声をもとに次回のテーマを決定
    2. 校内研修会での取り組み:業務と授業に直結するテーマを選定
      1. 校内研修で扱った主な内容
          1. Canvaを使ったデザイン資料の作成
          2. ChatGPTの活用術
          3. iPadとロイロノートの基本操作
    3. 研修や練習会を通じて得られた成果
      1. 参加者が徐々に増加
      2. 現場でのICT活用が進む
      3. 信頼関係の構築
    4. スモールスタートのメリット
          1. トラブルの影響を最小限に抑えられる
          2. 成功体験を積み重ねられる
          3. 現場のニーズを把握できる
    5. 私が経験したスモールスタートの成功と教訓
      1. ✅ 次のアクション!今すぐできること
  9. 現場の声を活かすコミュニケーション術
    1. 現場の声を引き出す方法
      1. 使う先生方に試してもらう
        1. ポータルサイトでの改善の例
    2. フィードバックを活かす姿勢が信頼を生む
    3. 現場の声を活かすメリット
          1. ツールの実用性が向上する
          2. 先生方の満足度が上がる
          3. 信頼関係が深まる
    4. 私が感じた現場の声を活かす大切さ
    5. あなたへのメッセージ:現場の声に耳を傾けよう
  10. 自分を成長させるスキルアップの秘訣
    1. ICT推進がもたらす自己成長の実感
      1. 身についたスキルとその実例
          1. Google Apps Scriptの活用
          2. Canvaを使ったデザインスキル
          3. AIツールを活用した効率化
      2. スキルアップの過程で感じた課題と工夫
      3. 周囲の協力を得る
      4. ICT主任としての成長が現場に与えた影響
      5. あなたへのメッセージ:楽しみながらスキルを磨こう
  11. まとめ:挑戦し、改善し続ける姿勢が信頼を生む

タブレットを使う「必然性」を作る

先生方にICTツールを使ってもらいたくて私が最も失敗だったと思うことは、「便利さ」を軸に広めようとしたことでした。GoogleChatやGoogleカレンダーなどいち早く使用を開始しました。これまでは校務支援システムでの連絡が主流でしたが、私はGoogleChatに職員室の連絡のスペースを使って、タブレット上でICTに関する連絡を入れるようにしたのです。一般企業ではSlackが主流でよく使われていました。しかし、結果は全くの不発。後輩に「あー、連絡がうるさいので通知切ってました。」と。データが校務系のサーバーでなくてはいけないことも関係していました。どうしたら使おうとしてくれるのか、聞いても返事ははっきり言ってよくわからないので変える必要性を感じないと言った物でした。

本来、人のもつ本能では今を変えたくない気持ちが強いということが心理学的にも証明されています。だから、どんなに便利だとはわかっていても「効率的ではないかもしれないけれど、今のままでもいい。」となるわけです。

そこで、効果的な方法は「使わざるを得ない状況を作ること」でした。はじめは抵抗がある先生もいますが、この「必然性」が現場に生まれることで、自然とICTツールを活用するようになります。

私が最初に取り組んだのは、 「欠席連絡の電子化」 でした。この取り組みが後に電子保健板の普及につながることになります。

欠席連絡の電子化に取り組んだ背景

欠席連絡は、これまで保護者が学校へ電話をして担任や職員が内容を聞き取り、その情報を口伝えやメモなどで担任に伝えていました。朝、担任はそれらをまとめて保健板に手書きで記入していました。この流れが朝の忙しい時間帯に大きな負担となっており、「なんとか効率化できないか」という声があがっていました。さらに、欠席情報を確認するために職員室と教室を行き来することも手間の一つでした。そこで私は、Googleフォームを使って欠席連絡を電子化し、欠席情報をリアルタイムで共有できる仕組みを提案しました。

導入初期:保護者が簡単に入力できる設計

最初に設計した欠席フォームは、保護者が学年やクラス、名前、欠席理由、回答者 を入力するだけのシンプルなものでした。この段階では、保護者が簡単に入力できることを重視していました

しかし、運用を始めると、現場の先生方から「もっとこうなるといいな」が明らかになってきました。例えば、

  • 「感染症や発症日も知りたい」
  • 「病気以外の理由、例えば忌引きや通級も選べる様になるといい」
  • 「体の不調と心の不調を分けてほしい」

これらの声をひとつずつすぐに反映し、保護者入力するのフォームを少しずつ手を加えていきました。項目を追加しつつも、「誰でも迷わないように」操作が複雑にならないよう質問の答え方を調整しました。シンプルながら、必要な情報を網羅したフォームへ改善しました。。

先生用フォームの導入でさらに効率化

しばらく、学校に電話などで連絡があった分は保護者に変わって先生たちがフォームの回答をする運用をしていました。すると、先生たちがあまり使いたがらなかったのです。聞いてみると、その理由がわかりました。「名前の入力が保護者と同じで手入力だとわずらわしくて手間に感じる」という理由があったのです。特に、朝の忙しい時間帯ではちょっとした入力の手間でも、現場の負担が増えてしまう問題が発生しました。このハードルを下げられないか考えた末、新たに 学校専用のGoogleフォーム を作成。以下の工夫を取り入れました:

プルダウン形式を採用

保護者向けには個人情報なので絶対NGだった、クラスや児童の名前をプルダウンメニューで選択できるようにし、入力の手間を大幅に削減しました。

同じスプレッドシートに情報を統合

保護者用フォームと学校専用フォームのデータを一つのスプレッドシートに集約し、欠席状況を一元管理できる仕組みを構築しました。

欠席連絡の電子化で得られた効果

欠席連絡を電子化することで、次のような成果を得られました:

朝の電話対応がほぼゼロに

保護者は電話をかける代わりにフォームを利用するため、先生たちの電話対応の負担が激減。担任の先生たちからは、「朝の時間に余裕ができて助かる」と喜びの声が上がりました。

タブレット利用の習慣化

欠席情報を確認するためにタブレットを使う必要が生まれたことで、これまでタブレットを使っていなかった先生方も、毎日タブレットを持ち歩くようになりました。

保健板の電子化による効率化

「欠席フォームで児童入力されるのに、それを保健板に転記するのって無駄じゃないか」と思ったのがきっかけでした。また担任時代に保健板を届けに行ったなかなか児童が帰ってこない、1時間目が始められないという経験もその時思い出しました。

そこで、養護の先生に

「保健板って欠席フォームがあるからなくてもいいんじゃないですか?」

と提案してみたのです。しかし養護の返事はNO

「1ヶ月がパッとみてわかるからこっちの方がいいんです。」と教えてもらいました。

この意見から私の電子保健板の仕組みづくりが始まりました。途中で何度も養護の先生を中心に見せては感想をもらうことの繰り返し。そして、ようやく初期の電子保健板が完成し、試験的に実装してみました。

『使っては改善の繰り返し』でより使いやすく!

実装してから想定通り、たくさんの改善要望が出てきました。

「保護者が前日の夜に入れたものが前日に入っちゃう。」

「直接保健板に入力できるといいんだけど。。。」

「学級閉鎖の時に、セルが足りなくなっちゃった」など

保健板に直接入力できないか検討をしましたが、欠席フォームの情報と保健板の情報が一致しなくなってしまうため、フォームからの入力に揃えることにしました。また、その他にも前日の放課後の回答を翌日の回答に反映させたり、35人学級まで欠席人数を対応させたりしてより改善しました。

しかし、放課後養護の先生が職員室で担任の先生に毎日のように聞き回っているのです

「保健板の情報が入力済みなのか途中なのかがわからないので、結局聞いて回ってます。」

とのことで、「逆に非効率」になってしまいました。

そこで〝担任チェック〟をプルダウン形式で保板に追加して、「入力完了」や「欠席なし」、「遅刻者がいるので保留中」の3つのいずれかを担任が選択する仕組みを作りました。これで、入力が済んでいるのか、途中なのかが一目で分かるようになりました。

Google Chatで楽々解決!入力忘れを防いで、学校業務をもっとスムーズに

学校現場での電子保健板導入は、欠席情報や体調不良の連絡を迅速に伝えるための大切なステップでした。でも、実は「入力忘れ」という思わぬ壁にぶつかっていたんです。朝は忙しく、各学級でタブレット操作が後回しになってしまい、結果として大切な連絡が漏れてしまうことも…。

電子保健板のデジタル化とその壁

これまで、Googleフォームとスプレッドシートを使って欠席連絡を電子化してきました。手書きのやり取りに比べ、かなり業務は楽になりましたが、保健板の入力自体を先生方が忘れてしまうという問題が浮上しました。

こんな課題があったんです:

• 朝の忙しい時間に、タブレット操作をつい忘れてしまう

• その結果、欠席や体調不良の情報が養護教諭や管理職に正確に伝わらない

そこで登場!Google Chatのチャットボット

この問題を解決するために、私はGoogle Apps ScriptとGoogle Chatのチャットボットを使って、入力忘れを自動でチェック&通知する仕組みを作りました。具体的には以下のような流れです。

システムのしくみ

1. 自動チェックで安心:

スプレッドシート上で、決まった時間に保健板の入力状況を自動で確認。もし入力がされていなかったら、すぐに分かるようにしています。

2. ポンッと通知!:

入力が漏れている学級には、Google Chatを通じて「〇〇クラスの保健板の入力がまだです!こちらからお願いします→リンク」という具体的なメッセージが送られます。

3. 何度でもリマインド:

忘れてしまう心配をなくすため、決まった時間ごとにリマインドを送る仕組みも導入。これで、先生方も自然とタブレットに目が行くように!

システム導入後の嬉しい効果

この通知機能を導入したおかげで、以下のような効果が得られました。

• 入力漏れがほぼゼロに!

自動通知のおかげで、以前は入力忘れで連絡漏れがあった現象がほぼなくなりました。

• 先生方の心にもゆとりが:

「入力しなきゃ」と自分で気にかけなくても、システムが自動でリマインドしてくれるので、精神的な負担がグッと軽くなりました。

• 業務効率がぐんとアップ!

養護教諭や管理職も、個別に確認する手間が省けたので、もっと大事な業務に時間を使えるようになりました。

• タブレット活用の第一歩:

欠席連絡の電子化に続いて保健板もデジタル化することで、先生方がタブレットを使う習慣が自然と身につき、デジタル活用がさらに進みました。

単なる業務の効率化だけでなく、学校現場での情報共有をより確実でスムーズなものに変える大きな一歩でした。Google ChatとGoogle Apps Scriptを上手く組み合わせることで、「入力忘れ」という小さなミスが大きな問題にならないようにし、先生方の日々の業務がずっと楽になる仕組みが実現。このような工夫で、現場の働き方がさらに改善されるのです。

このように欠席フォームをはじめとして電子保健板の実現をしました。ここからはその具体的な作成手順について解説していきます。まず、Googleフォームは簡単に作ることができます。一方で、その情報を整理するスプレッドシートの方ではGoogle App Scriptというプログラムを使うため専門的な知識が必要になります。

しかし、今回は実際に作成して使っているデータを使って、〝コピペ〟だけでできるようになるべく簡単に解説をしていきます。

データは黒いボタンからコピーができます!

①欠席フォームを作る

保護者用の欠席フォームの質問項目

  • 学年・組
  • 児童氏名
  • 欠席・遅刻・早退選択
  • 体温
  • 事由
  • 発症日
  • 遅刻早退予定時刻
  • その他詳細
  • 送信確認
  • 回答者

先生用フォームの質問項目

  • 学年・組
  • 児童氏名(プルダウン)
  • 欠席・遅刻・早退選択
  • 体温
  • 事由
  • 発症日
  • 回答者

②欠席フォームとスプレッドシートにリンク

プログラム入りスプレッドシートへリンク

欠席フォームの回答タブからスプレッドシートにリンクを作成します。今回は1年生から6年生まで全12学級を想定しています。

スプレッドシートに設定するシート名一覧

  • 回答
  • 教師入力
  • 時間外回答調整用
  • 全校
  • 保健板設定
  • 1-1〜6-2(クラス分)
  • 1-1保健板〜6-2保健板(クラス分)

③Google App Scriptを設定(各スクリプトの解説付き)

スプレッドシートのメニュー内にある拡張機能からGoogle App Scriptを設定します。

保健板のチェックスクリプトの解説

このスクリプトは Google スプレッドシートの「健康記録」データを自動更新する ためのものです。
中学生にもわかるように、やさしく説明していきますね!😊


📌 このスクリプトは何をするの?

このスクリプトは クラスごとの出席データを見て、保健板を自動更新する ものです。

  1. 各クラス(例:「1-1」「1-2」など)のシートを開く
  2. 「保健板」シート(例:「1-1保健板」)と照らし合わせる
  3. 今日のデータを探す
  4. 欠席・遅刻・早退・その他の記録を保健板に書き込む
  5. すでに更新済みならスキップする

🔍 1. スクリプトの全体の流れ

🌟 main() 関数(スクリプトのスタート地点)

function main() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var today = new Date();
  today.setHours(0, 0, 0, 0);
  var sheetNames = ['1-1', '1-2', ..., '6-2']; // クラスのシートリスト
  sheetNames.forEach(function(sheetName) {
    Logger.log("Processing sheet: " + sheetName);
    
    var sourceSheet = spreadsheet.getSheetByName(sheetName);
    var targetSheet = spreadsheet.getSheetByName(sheetName + '保健板');
    if (sourceSheet && targetSheet) {
      if (disableEditingForCompletedRows(sourceSheet, targetSheet)) { 
        updateHealthBoard(sourceSheet, targetSheet, today);
      } else {
        Logger.log("Skipping update for " + sheetName + " because the row is already completed.");
      }
    }
  });
}

ここでやっていること

  • 全クラス(1-1, 1-2, …)のシートを順番にチェック
  • 「保健板」があるか確認
  • すでに更新済みかチェック
  • まだなら、データを更新!

🔍 2. すでに処理済みかチェックする

🌟 disableEditingForCompletedRows() 関数

function disableEditingForCompletedRows(sourceSheet, targetSheet) {
  var targetData = targetSheet.getDataRange().getValues(); // 保健板のデータ取得
  var today = new Date();
  today.setHours(0, 0, 0, 0);
  var todayStr = Utilities.formatDate(today, Session.getScriptTimeZone(), 'yyyy/MM/dd');
  for (var i = 0; i < targetData.length; i++) {
    var dateCell = targetData[i][2];  // C列(3列目)の日付
    var completionCell = targetData[i][6]; // G列(7列目)の「完了」セル
    if (dateCell instanceof Date && formatDate(dateCell) === todayStr) {
      return completionCell.trim() === ''; // 空なら true(更新する)
    }
  }
  return false;
}

ここでやっていること

  • 今日の日付と一致する行を探す
  • その行の G列(7列目)が空欄なら「更新OK」
  • すでに何か書かれていたらスキップ

🔍 3. 保健板のデータを更新する

🌟 updateHealthBoard() 関数

function updateHealthBoard(sourceSheet, targetSheet, today) {
  var sourceData = sourceSheet.getDataRange().getValues();
  var targetData = targetSheet.getRange('C:C').getValues();
  var todayStr = Utilities.formatDate(today, Session.getScriptTimeZone(), 'yyyy/MM/dd');
  var todayRow = -1;
  for (var i = 0; i < targetData.length; i++) {
    if (targetData[i][0] !== '' && formatDate(targetData[i][0]) === todayStr) {
      todayRow = i + 1;
      break;
    }
  }
  if (todayRow > 0) {
    targetSheet.getRangeList(['H' + todayRow, 'I' + todayRow, 'J' + todayRow]).clearContent();
    var absentees = sourceData.filter(row => row[4] === '欠席');
    var latecomers = sourceData.filter(row => row[4] === '遅刻');
    var earlyLeavers = sourceData.filter(row => row[4] === '早退');
    var others = sourceData.filter(row => row[9] !== '');
    var updates = buildUpdates(absentees, latecomers, earlyLeavers, others);
    applyUpdates(targetSheet, todayRow, updates);
  }
}

ここでやっていること

  • 保健板のC列を見て、今日の行を探す
  • 今日の行があれば、欠席・遅刻・早退・その他の情報を抽出
  • 保健板に書き込む

🔍 4. 欠席・遅刻・早退のリストを作る

🌟 buildUpdates() 関数

function buildUpdates(absentees, latecomers, earlyLeavers, others) {
  var updates = { absentees: [], latecomers: [], earlyLeavers: [], others: [] };
  absentees.forEach(row => {
    updates.absentees.push(row[3] + ' - ' + getDiseaseName(row[6]));
  });
  latecomers.forEach(row => {
    updates.latecomers.push(row[3] + ' - ' + getDiseaseName(row[6]));
  });
  earlyLeavers.forEach(row => {
    updates.earlyLeavers.push(row[3] + ' - ' + getDiseaseName(row[6]));
  });
  others.forEach(row => {
    updates.others.push(row[3] + ' - ' + row[9]);
  });
  return updates;
}

ここでやっていること

  • 各グループ(欠席・遅刻・早退・その他)のリストを作成
  • 名前 + 病名 をセット

🔍 5. 保健板に書き込む

🌟 applyUpdates() 関数

function applyUpdates(targetSheet, todayRow, updates) {
  if (updates.latecomers.length > 0) {
    targetSheet.getRange('I' + todayRow).setValue(updates.latecomers.join('\n'));
  }
  if (updates.earlyLeavers.length > 0) {
    targetSheet.getRange('J' + todayRow).setValue(updates.earlyLeavers.join('\n'));
  }
  if (updates.others.length > 0) {
    targetSheet.getRange('H' + todayRow).setValue(updates.others.join('\n'));
  }
}

ここでやっていること

  • リストを保健板の適切なセルに書き込む

まとめ

このスクリプトは…

  1. クラスのシートをチェック
  2. 保健板に今日のデータがあるか確認
  3. すでに完了していたらスキップ
  4. 欠席・遅刻・早退の情報をまとめる
  5. 保健板を自動更新する

📝 まとめると…

  • スプレッドシートのデータを整理&記録
  • 面倒な手作業をスクリプトで自動化
  • 先生の仕事を楽にするツール!

解説動画

保健板未入力の通知スクリプトの解説

このスクリプトは、「保健板の入力が完了しているかをチェックし、Google Chat に通知を送る」 ためのものです。

  1. 保健板の入力状況をチェック
  2. 未入力のクラスがあれば通知
  3. すべて入力済みなら「完了」通知
  4. 二重通知を防ぐためのフラグ管理
  5. Google Apps Script のトリガーを使って自動実行
  6. 休日(祝日・土日)を考慮して通知をスキップ

🔍 1. checkAndNotify() – 保健板をチェックし、通知を送る

function checkAndNotify() {
  var today = new Date();
  if (isHoliday(today)) {
    return;
  }
  var scriptProperties = PropertiesService.getScriptProperties();
  var alreadyNotified = scriptProperties.getProperty('alreadyNotified') === 'true';
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheetNames = ["1-1保健板", "1-2保健板", ..., "6-2保健板"];
  today.setHours(0, 0, 0, 0);  
  var notifications = [];
  var allSheetsFilled = true;
  sheetNames.forEach(function(sheetName) {
    var sheet = spreadsheet.getSheetByName(sheetName);
    if (sheet) {
      var values = sheet.getDataRange().getValues();
      
      for (var i = 1; i < values.length; i++) {  
        var dateCell = new Date(values[i][2]);  
        dateCell.setHours(0, 0, 0, 0);  
        var checkCell = values[i][6];  
        if (dateCell.getTime() === today.getTime() && checkCell === "") {
          notifications.push(`Sheet: ${sheetName}`);
          allSheetsFilled = false;
          break;  
        }
      }
    }
  });
  if (notifications.length > 0) {
    const url = "保健板のスプレッドシートID";
    sendChatNotification(`保健板入力ありがとうございます。まだのクラスは確認をお願いします。:\n${notifications.join('\n')}\n\n入力はこちら→: ${url}`);
  } else if (!alreadyNotified) {  
    sendChatNotification("全学級、保健板確認できました。ありがとうございました🤗");
    scriptProperties.setProperty('alreadyNotified', 'true');  
    cancelLaterTrigger();  
  }
}

ここでやっていること

  1. 今日が休日ならスキップisHoliday() を使う)
  2. すでに通知済みかチェック
  3. 各「保健板」のシートをチェック
  4. 今日の日付の行を探す
  5. 「完了セル(G列)」が空なら未入力 → 通知リストに追加
  6. 未入力のクラスがあれば通知
  7. すべて入力済みなら「完了」通知
  8. 「完了通知」は1回しか送らないようにする

🔍 2. cancelLaterTrigger() – 2回目のトリガーをキャンセル

function cancelLaterTrigger() {
  var triggers = ScriptApp.getProjectTriggers();
  var currentTriggerId = ScriptApp.getCurrentTrigger().getUniqueId();
  triggers.forEach(function(trigger) {
    if (trigger.getHandlerFunction() == 'checkAndNotify' && trigger.getUniqueId() !== currentTriggerId) {
      ScriptApp.deleteTrigger(trigger);
    }
  });
}

ここでやっていること

  • すでに「完了通知」を送ったら、それ以降のチェックをキャンセル
  • 無駄な通知を防ぐために、トリガーを削除

🔍 3. sendChatNotification() – Google Chat に通知

function sendChatNotification(message) {
  var url = "ウェブフックURLをここに貼り付けます";  
  
  var payload = {
    "text": message
  };
  var options = {
    "method": "post",
    "contentType": "application/json",
    "payload": JSON.stringify(payload)
  };
  UrlFetchApp.fetch(url, options);
}

ここでやっていること

  • Google Chat に通知を送信
  • Webhook URL を使って、Chat にメッセージを送る

🔍 4. createTimeDrivenTrigger() – 毎日決まった時間に実行

function createTimeDrivenTrigger() {
  var triggers = ScriptApp.getProjectTriggers();
  for (var i = 0; i < triggers.length; i++) {
    if (triggers[i].getHandlerFunction() == 'checkAndNotify') {
      ScriptApp.deleteTrigger(triggers[i]);
    }
  }
  
  ScriptApp.newTrigger('checkAndNotify')
    .timeBased()
    .atHour(8)
    .nearMinute(35)
    .everyDays(1)
    .create();
  ScriptApp.newTrigger('checkAndNotify')
    .timeBased()
    .atHour(8)
    .nearMinute(50)
    .everyDays(1)
    .create();
  ScriptApp.newTrigger('checkAndNotify')
    .timeBased()
    .atHour(15)
    .nearMinute(30)
    .everyDays(1)
    .create();
}

ここでやっていること

  • 毎日 8:35, 8:50, 15:30 に checkAndNotify() を実行
  • すでにあるトリガーを削除してから新規作成

🔍 5. isHoliday() – 休日なら通知しない

function isHoliday(date) {
  var day = date.getDay();
  if (day == 0 || day == 6) {
    return true;  
  }
  var holidays = getHolidays(date.getFullYear());
  var formattedDate = Utilities.formatDate(date, Session.getScriptTimeZone(), 'yyyy-MM-dd');
  return holidays.includes(formattedDate);
}

ここでやっていること

  • 土日なら true を返す
  • 日本の祝日リストを取得し、一致する日なら true を返す

🔍 6. getHolidays() – 日本の祝日リストを取得

function getHolidays(year) {
  var url = `https://holidays-jp.github.io/api/v1/${year}/date.json`;
  var response = UrlFetchApp.fetch(url);
  var holidays = JSON.parse(response.getContentText());
  return Object.keys(holidays);
}

ここでやっていること

  • 日本の祝日 API からデータを取得
  • 祝日のリストを作成し、配列として返す

🔍 7. resetNotificationFlag() – 通知フラグのリセット

function resetNotificationFlag() {
  PropertiesService.getScriptProperties().deleteProperty('alreadyNotified');
}

ここでやっていること

  • 毎日0時に、通知フラグをリセット
  • 翌日はまた通知できるようにする

まとめ

このスクリプトの目的

  • 保健板の入力状況を自動チェック
  • 未入力のクラスを Google Chat に通知
  • 全学級が入力済みなら「完了通知」
  • 土日・祝日は通知しない
  • 二重通知を防ぐ仕組み(フラグ管理 & トリガー削除)
  • 毎日決まった時間に自動実行

「手作業でチェックする手間」をなくして、スムーズに管理できるスクリプト!

保健板のバックアップ自動化スクリプトの解説

このスクリプトは Google スプレッドシートの「保健板」のデータを、月ごとにバックアップして保存し、元のデータをクリアする ものです。

  1. 1ヶ月前のデータを保存用のスプレッドシートにコピー
  2. 「保健板設定」の数式を値に変換し、B2セルの値を1減らす
  3. 「C列」の値をコピー(数式ではなく値として保持)
  4. 元のスプレッドシートの G8:CB38 のデータを削除
  5. 不要な「シート1」を削除
  6. Google ドライブの指定フォルダに新しいスプレッドシートを保存
  7. コピーされたシートの数式をリフレッシュ

🔍 1. createCopyOfSheetsAndClearOriginal() – シートをコピーして元のデータをクリア

function createCopyOfSheetsAndClearOriginal() {
  var date = new Date();
  date.setMonth(date.getMonth() - 1); // 現在の日付から1ヶ月前に設定
  var sheetName = Utilities.formatDate(date, "JST", "yyyy-MM") + "月日々出欠調査票記録";
  var originalSpreadsheet = SpreadsheetApp.openById("保健板のスプレッドシートID");
  var newSpreadsheet = SpreadsheetApp.create(sheetName);
  var folder = DriveApp.getFolderById("保存したい場所のフォルダID");
  var file = DriveApp.getFileById(newSpreadsheet.getId());
  var sheetNames = ['1-1保健板', '1-2保健板', '2-1保健板', ..., '6-2保健板', '保健板設定'];
  sheetNames.forEach(function(name) {
    var sheet = originalSpreadsheet.getSheetByName(name);
    if (sheet) {
      var copiedSheet = sheet.copyTo(newSpreadsheet);
      copiedSheet.setName(name);
      if (name === '保健板設定') {
        var values = copiedSheet.getRange("B1:B2").getValues();
        values[1][0] = values[1][0] - 1; // B2セルの値を1減らす
        copiedSheet.getRange("B1:B2").setValues(values);
      }
      if (name !== '保健板設定') {
        var cColumnRange = sheet.getRange("C:C");
        var cColumnValues = cColumnRange.getValues();
        copiedSheet.getRange("C:C").setValues(cColumnValues);
        sheet.getRange("G8:CB38").clearContent();
      }
    }
  });
  var sheet1 = newSpreadsheet.getSheetByName("シート1");
  if (sheet1) {
    newSpreadsheet.deleteSheet(sheet1);
  }
  folder.addFile(file);
  DriveApp.getRootFolder().removeFile(file);
  refreshFormulas(newSpreadsheet);
}

ここでやっていること

  1. 1ヶ月前の名前で新しいスプレッドシートを作成
  2. 「保健板」の各シートをコピー
  3. 「保健板設定」のB2の値を1減らす
  4. 「C列」を値としてコピー
  5. 元の G8:CB38 のデータを削除
  6. 新しいスプレッドシートを Google ドライブの指定フォルダに移動
  7. 「シート1」(デフォルトで作成される空のシート)を削除
  8. コピーしたシートの数式をリフレッシュ

🔍 2. refreshFormulas() – 数式をリフレッシュ

function refreshFormulas(spreadsheet) {
  var sheets = spreadsheet.getSheets();
  sheets.forEach(function(sheet) {
    var range = sheet.getDataRange();
    var formulas = range.getFormulas();
    for (var i = 0; i < formulas.length; i++) {
      for (var j = 0; j < formulas[i].length; j++) {
        if (formulas[i][j] != "") {
          range.getCell(i + 1, j + 1).setFormula(formulas[i][j]);
        }
      }
    }
  });
}

ここでやっていること

  • コピーされたシートの数式を再適用
  • Google Sheets の「数式がうまく機能しない」問題を防ぐ

🌟 このスクリプトの流れ

  1. 「保健板」の各シートを、新しいスプレッドシートにコピー
  2. 「保健板設定」のB2を1減らす
  3. C列のデータを値としてコピー
  4. 元のデータ(G8:CB38)をクリア
  5. 不要な「シート1」を削除
  6. コピーしたスプレッドシートを Google ドライブに保存
  7. コピー後の数式をリフレッシュ

✨ 使うメリット

毎月のバックアップ作業を自動化(手作業なし!)
元のシートをクリアすることで、スプレッドシートを整理
数式のリフレッシュでコピー後の不具合を防ぐ
Google ドライブの指定フォルダに整理して保存

Google Apps Scriptで「電子保健板」を毎月自動でバックアップ&リセットする方法

1. なぜ自動バックアップ&リセットが必要なのか?

電子保健板は、毎日の欠席情報を管理する重要なツールですが、月が変わるごとにリセット する必要があります。
また、過去の欠席履歴を残したい という養護の先生からの要望もありました。

そこで、毎月1日になったら自動でバックアップを取り、保健板をクリアする プログラムをGoogle Apps Scriptで作成しました!

これを導入すると…

  • 毎月1日、自動でバックアップが保存されるので履歴管理がラクに!
  • 手動で保健板をリセットする手間が不要!
  • トリガー設定をすれば、放っておいても自動で実行!

2. 仕組みの概要

このプログラムは、以下の手順で動作します。

  1. 毎月1日の深夜0時に自動実行
  2. 「電子保健板」シートをコピーし、指定したGoogleドライブフォルダに保存
  3. 電子保健板のシートをクリア(リセット)

3. 実際のコード(コピペでOK!)

🔹 必要な準備

スプレッドシートID(電子保健板があるスプレッドシートのID)
保存先フォルダID(バックアップを保存するGoogleドライブフォルダのID)

👇 以下のコードをGoogle Apps Scriptに貼り付け、スプレッドシートIDとフォルダIDを設定してください!

トラブルから学び、改良を重ねる大切さ

この通知機能を導入するまでの間、私自身も多くの試行錯誤を重ねました。

例えば:

• 最初は通知は行ってもファイルを開いて入力をして。。。と手順が多かったのですが、リンクを一緒につけることで通知からそのまま入力ファイルへとジャンプすることができるようになりました。意思に頼らず仕組みで改善するアプローチで、通知メッセージを改善しました。

• 一部の先生が「通知の中身が見れてしまうのがちょっと困るな」という意見を寄せたため、全員iPadの設定でプレビュー表示をオフにすることで子供に内容が見える心配もなく、必要なタイミングで通知がおこなわれるようになりました。

これらのフィードバックを受け入れ、システムを少しずつ改良していくことで、現場のニーズに合った実用的な仕組みを作ることができました。

試行錯誤を恐れない心構え

ICT推進において、最初から完璧なものを目指す必要はありません。むしろ、失敗やトラブルを経験し、それを改善していくプロセスそのものが信頼を生むと感じています。

• トラブルが起きたら、そのたびに改善策を講じる。解決が早ければ早いほど吉!

• 改善を重ねることで、現場にフィットした仕組みを作り上げる。

ポイント:改良プロセスで現場の信頼を得る

改善を重ねる中で、先生方から「これがあって助かる」「通知のおかげで忘れずに済むようになった」といった声が増えていきました。

この信頼が次のICT活用への土台となり、現場で「やってみよう」と思える雰囲気を作り出すことができました。

あなたも、まずは小さな取り組みから試し、改善を重ねてみてください。そのプロセスが現場の課題を解決し、ICT活用を推進する大きな一歩となります!

小さく始めることで得られる信頼と成果

ICT活用を広げるためには、 「スモールスタート」で少しずつ広げること が重要です。一度に大規模な導入を行うと、現場全体で混乱が生じる可能性があります。まずは小さく始め、成功体験を積み重ねることで信頼を築き、少しずつ活用の幅を広げることができます。

実例:夕方の「ちょこっとICT練習会」

私はまず、 15分程度の夕方のICT練習会 を始めました。

忙しい先生方にとって、「長時間の研修会」はハードルが高く、参加者が限られてしまいます。そこで、「短時間で気軽に参加できる」というコンセプトで練習会を企画しました。

練習会で扱ったテーマ

業務効率化に役立つGoogleツールの活用方法

Googleフォームやスプレッドシートを使った欠席連絡やデータ管理の具体例を共有しました。

授業で使えるICTツール

Kahoot! やロイロノートの使い方や知ってると便利なテクニックなどを簡単に説明し、実際に操作してもらいました。

iPadの便利な機能紹介

タブレットの基本操作から、授業や校務で使える便利機能を紹介しました。

校務でのAI活用(OJT研修)

ChatGPTを使って誤字脱字のチェックや授業アイデアを効率化する簡単な方法を提案しました。

練習会の特徴と工夫

テーマを絞り、短時間で実施かつ自由参加

• 「1回15分以内で学べる内容」に絞り込むことで、気軽に参加しやすい環境を作りました。

• 例:「Googleフォームで簡単なアンケートを作ろう」「Kahoot! を使ってみよう」など、具体的かつシンプルな内容にしました。

実際に操作してもらう

• 練習会では、説明だけでなく、先生方に実際に操作してもらう時間を取りました。

• 例えば、「その場でGoogleフォームを作る」「iPadで画面共有を試す」など、即実践できる内容にすることで、「やってみたら意外と簡単!」と感じてもらえるよう工夫しました。

参加者の声をもとに次回のテーマを決定

• 練習会にあたり事前にフォームでアンケートを取り、扱ってほしいテーマを聞くようにしました。

• 先生方の関心やニーズを取り入れることで、より多くの参加者を得ることができました。

校内研修会での取り組み:業務と授業に直結するテーマを選定

短時間の練習会に加えて、OJTで 校内研修会 も開催しました。研修会では、「業務に役立つICTツール」や「授業でのICT活用」をテーマに、実践的な内容を取り上げました。

校内研修で扱った主な内容

Canvaを使ったデザイン資料の作成

展覧会の案内や校内掲示物、授業資料の作成に役立つツールとしてCanvaを紹介しました。特に、「誰でも簡単にプロっぽいデザインが作れる」という点で大好評でした。研修ではAI生成も行いました。

ChatGPTの活用術

ChatGPTを使って業務を効率化する方法を提案しました。例:「Googleスプレッドシートの関数を作成する」「子どもたちが興味を持つ教材を生成する」など、具体的な活用例を示しました。

iPadとロイロノートの基本操作

タブレットの基礎的な使い方から、授業でロイロノートを活用する具体例を紹介しました。参加者がその場で体験できるようにし、「まずは試してみる」雰囲気を作りました。

研修や練習会を通じて得られた成果

参加者が徐々に増加

• 職員室の空きスペースで数人サクッと行うことでなんとなく先生たちがが集まってきました。参加者が「面白い!」「思ったより簡単」「便利だった」と話してくれることで、徐々に参加者が増えていきました。

• 「短時間で気軽に学べる」という形式が好評で、回をおうごとに他の先生方にも広がっていきました。ベテランの先生からは後に「あのちょっとした研修がすごくありがたかった」という感想もいただきました。

現場でのICT活用が進む

• 練習会や研修会で紹介したツールを実際に使う先生が増え、現場全体のICT活用率が向上しました。

• 例えば、Kahoot! は「子どもたちが夢中になる」と大好評で、他の先生方の授業にも取り入れられるようになりました。

信頼関係の構築

• 練習会や研修会を通じて、「困ったときは相談すれば解決してくれる」という安心感を先生方に持ってもらえるようになりました。この信頼関係が、さらに新しいツールを導入する際の後押しとなりました。

スモールスタートのメリット

トラブルの影響を最小限に抑えられる

小規模で始めることで、トラブルが発生しても迅速に対応でき、大規模な混乱を防げます。

成功体験を積み重ねられる

まずは少人数での成功を重ねることで、参加者の信頼を得やすくなります。

現場のニーズを把握できる

小さく始めることで、先生方がどのようなツールを必要としているのか具体的に把握でき、それをもとに改善や拡大を進めることができます。

私が経験したスモールスタートの成功と教訓

最初は数人の参加から始まった「ちょこっとICT練習会」や校内研修会でしたが、回を重ねるごとに参加者が増え、学校全体でICT活用が進むきっかけとなりました。

一方で、「全員が一斉に導入するべきだ」と焦ったこともありました。その際、フォローが行き届かず、かえって混乱を招いた経験から、「小さく、ゆっくりと進めること」の大切さを痛感しました。

✅ 次のアクション!今すぐできること

Google Chatでリマインド通知を試す(コピペで使えるスクリプトを用意)

Googleフォームを作成してみる(サンプルフォームを活用)

「ちょこっとICT練習会」を企画する(最初は10分のミニ研修でOK!)

焦らず、楽しみながら進めてください!

現場の声を活かすコミュニケーション術

ICT導入の成功の鍵は、 現場の先生方の声を聞き、共感を得ること にあります。システムやツールをただ押し付けるだけでは、先生方に「自分ごと」として捉えてもらえず、導入が進まないことが多いです。そこで重要なのは、現場の声を拾い上げ、具体的なニーズに応える工夫をすることです。

現場の声を引き出す方法

私がICTツールの導入を進める際に、特に意識したのは 「現場の声を積極的に拾い上げること」 です。実際に使う先生方に直接意見を聞き、そのフィードバックを基に改善を重ねることで、現場に合ったツールを作り上げることができました。

使う先生方に試してもらう

新しいツールやシステムを導入する際、まずは少人数の先生方に試してもらうようにしました。特に、業務の負担が大きい 担任の先生や養護教諭 に協力をお願いしました。

たとえば、デジタル保健板の活用の際、養護教諭や管理職、あまり得意ではなさそうな先生と得意な先生など幅広く実際に使ってもらいました。

欠席連絡フォームだけでなく、保健板のデジタル化やポータルサイトの作成でも、現場の先生方からの意見を反映させることで、使いやすさを向上させました。

ポータルサイトでの改善の例

「締切のあるものが掲示板みたいになるといいな」

「ここを見れば!というのが一つあればいいのにな」

これらを受けてGoogleサイトを使って校務や授業に活用するものや、締切の掲示板を作成して、全員のiPadと校務パのデスクトップにインストールしました。

「すごく便利になった!ここをみればなんでもあるからね。」

という感想を言ってもらえました。といっても、当然使う人と使わない人がいるのは想定内。少しずつ推進していけば良いと思っています。

フィードバックを活かす姿勢が信頼を生む

先生方に試してもらい、感想を聞く際には 「感謝の気持ちを伝える」 ことを常に意識しました。

たとえば:

• 「使ってみてどうでしたか?自分では気づかない視点を教えてもらえるのがとても助かります。」

• 「細かいところに気づいていただけるおかげで、もっと良いツールに改良できそうです。本当にありがとうございます。」

こうした言葉を添えることで、フィードバックを提供する側も安心して意見を伝えてくれるようになります。特に、ICTに不慣れな先生からの意見は非常に貴重で、それを取り入れることでツールがより使いやすくなると感じています。フィードバックは攻めの姿勢で積極的にもらいにいきましょう!

現場の声を活かすメリット

ツールの実用性が向上する

• 実際に使う先生方の意見を反映させることで、現場のニーズに合ったツールが完成します。

先生方の満足度が上がる

• 自分たちの意見が反映されたツールは、「使いやすい」「現場に合っている」と感じてもらいやすくなります。

信頼関係が深まる

• 現場の声を尊重し、具体的な改善につなげることで、ICT担当者への信頼が生まれます

私が感じた現場の声を活かす大切さ

ICT担当者として、最初は「こうすれば便利だろう」と自分の考えだけでツールを作りがちでした。しかし、現場の先生方から「ここが分かりにくい」「こうしたほうが使いやすい」という意見をもらうことで、気づかなかった改善点が見えてきました。

一度、先生方の意見を十分に聞かずにツールを導入した結果、「使いにくい」と言われてしまったことがありました。その経験を通じて、「現場の声を聞くことの大切さ」を改めて痛感しました。

あなたへのメッセージ:現場の声に耳を傾けよう

ICT導入の成功には、現場の声を積極的に聞き、それを反映させる姿勢が欠かせません。先生方の意見を尊重し、感謝の気持ちを伝えながら、少しずつ改良を重ねていきましょう。

その積み重ねが、信頼関係を築き、ICT活用を進める大きな力になります。焦らず、一歩ずつ進めていってください!

自分を成長させるスキルアップの秘訣

ICT主任として日々の業務を進める中で、最も大きな成長を実感したのは 自分自身のスキルアップ でした。新しいツールを試し、現場の声を反映しながら改善を重ねるプロセスを通じて、業務効率化だけでなく、自分のスキルや視野が広がっていくのを感じました。

ICT推進がもたらす自己成長の実感

最初は「どうやって始めたらいいのか分からない」と戸惑うこともありましたが、取り組む中で少しずつスキルが身についていきました。失敗と成功を繰り返すことで、「このプロセスを楽しむことが自分の成長につながる」と実感できるようになりました。

身についたスキルとその実例

Google Apps Scriptの活用

• 最初は何も分からない状態から始め、ChatGPTやオンラインの情報を頼りに学びました。特に、 業務の自動化 を目指してGoogle Apps Scriptを使うことで、現場の課題を解決できるようになりました。

Canvaを使ったデザインスキル

• とにかく絵が苦手、作図が苦手だった私でも、Canvaを使うことでプロ並みの資料やポスターを作れるようになりました。展覧会のポスターや校内掲示物を作成し、見た目の良さと分かりやすさが先生方や保護者から好評でした。

AIツールを活用した効率化

• ChatGPTを使い、Google Apps Scriptのコードを作成したり、授業用の教材や資料を生成するなど、業務の幅が広がりました。 授業で使えるユニークなクイズや教材を作成し、クスッと笑える問題が子どもたちの興味を引き出しました。例えば「ヒカキンの視点で〇〇の問題を作成して!」など。

スキルアップの過程で感じた課題と工夫

最初のハードルは「分からないことが多すぎる」

プログラミングやデザインの知識がなかったため、初めは「これが自分にできるのか」という不安がありました。しかし、「まずは試してみる」「分からなければ調べる」という姿勢を大切にし、少しずつ理解を深めていきました。

周囲の協力を得る

周囲の先生方やICT支援員に相談し、現場の課題や改善点を共有することで、自分一人では気づけなかった視点を得られました。こうしたやり取りを通じて、ツールやシステムの完成度を高めることができました。今はインターネットで企業や全国の方々にも質問ができるので大変便利です!

ICT主任としての成長が現場に与えた影響

スキルアップを通じて、自分が作った仕組みやツールが現場で使われ、先生方の負担を軽減できたときの達成感は格別です。特に、Google Chatの自動通知機能は、「こんなことまでできるんだ」と驚かれ、ICTに不慣れな先生方にも「少しずつ使ってみようかな」と感じてもらうきっかけとなりました。

あなたへのメッセージ:楽しみながらスキルを磨こう

ICT推進は、現場を改善するだけでなく、あなた自身の成長につながるチャンスでもあります。初めは小さな取り組みからスタートし、少しずつスキルを磨いていくことで、大きな成果を生み出すことができます。

焦らず、自分のペースで進めてください。小さな成功を積み重ねるうちに、必ず自信と信頼を得ることができます。そして、その成長が現場全体をより良い方向へ導く力となるでしょう!

まとめ:挑戦し、改善し続ける姿勢が信頼を生む

ICT主任としての成功は、現場の課題を的確に捉え、失敗を恐れず挑戦を続けることにあります。その際、次のポイントを意識してください:

1. 現場の声を拾い、共感を得る。

2. 安全な環境でテストを重ねる。

3. スモールスタートで徐々に広げる。

4. 自分のスキルアップも意識する。

あなたの努力が現場の効率化を進め、信頼を築く基盤となるはずです。一緒に新しい教育現場を作り上げていきましょう!

この記事が役に立ったと思った方は、どんどん知り合いに紹介してください!来年度多くの学校の働き方が効率化されることを願っています!!

コメント

タイトルとURLをコピーしました