GAS Event.getLocation() で生徒の現在地情報を取得し、教育現場での活用方法を徹底解説
本記事では、Google Apps Script(GAS)のEvent.getLocation()
関数を用いて、教育現場における生徒の現在地情報活用について詳しく解説します。特に、成績管理、出席管理、課題配布など、教育・学習の様々なシチュエーションで発生する業務課題を、位置情報に基づいたアプローチで解決する方法を、具体的なコード例を交えながらご紹介します。
Event.getLocation() とは?
Event.getLocation()
は、Google Workspaceの特定イベント(例えば、Googleフォームの回答送信時)が発生した際に、そのイベントに関連付けられた位置情報を取得するための関数です。位置情報は、緯度と経度で表されます。この関数を使うことで、イベントが発生した場所を特定し、様々な業務に応用できます。
教育現場での Event.getLocation() の活用シチュエーション
教育現場では、生徒の現在地情報を活用することで、以下のような業務課題を解決できます。
- 出席管理の効率化:生徒が学校に到着した際に、自動的に出席を記録する。
- 課題の配布と提出状況の確認:特定の場所(例:図書館)で課題を配布し、その場所で課題が提出されたかどうかを確認する。
- 不正行為の防止:テスト中に生徒が許可された場所以外にいないか確認する。
- 緊急時の対応:災害発生時に、生徒の現在地を把握し、安否確認を迅速に行う。
Event.getLocation() の基本的な使い方
Event.getLocation()
関数は、イベントオブジェクトから位置情報を取得します。例えば、Googleフォームの回答が送信された際のイベントオブジェクトは、e
という変数で表されることが多いです。このe
オブジェクトから、e.getLocation()
で位置情報を取得できます。
コード例:フォーム送信時の位置情報を取得する
function onFormSubmit(e) {
// フォーム送信時のイベントオブジェクトから位置情報を取得する
const location = e.getLocation();
// 位置情報が存在するか確認する
if (location) {
const latitude = location.latitude;
const longitude = location.longitude;
// 取得した位置情報をログに出力する
Logger.log("Latitude: " + latitude + ", Longitude: " + longitude);
// スプレッドシートに位置情報を記録するなどの処理を追加できます
} else {
Logger.log("位置情報が利用できません");
}
}
教育現場での実装例
1. 出席管理システム
生徒が学校の敷地内に入った際に、自動的に出席を記録するシステムです。GoogleフォームとGASを連携させ、生徒がフォームに回答する際に位置情報を取得し、指定された範囲内にいる場合にのみ出席を記録します。
function onFormSubmit(e) {
// フォーム送信時のイベントオブジェクトから位置情報を取得する
const location = e.getLocation();
// 位置情報が存在するか確認する
if (location) {
const latitude = location.latitude;
const longitude = location.longitude;
// 学校の緯度経度
const schoolLatitude = 35.6895;
const schoolLongitude = 139.6917;
// 許容範囲(メートル)
const radius = 100;
// 距離を計算する関数(Haversine formula)
function calculateDistance(lat1, lon1, lat2, lon2) {
const R = 6371e3; // 地球の半径 (m)
const φ1 = lat1 * Math.PI/180; // φ, λ in radians
const φ2 = lat2 * Math.PI/180;
const Δφ = (lat2-lat1) * Math.PI/180;
const Δλ = (lon2-lon1) * Math.PI/180;
const a = Math.sin(Δφ/2) * Math.sin(Δφ/2) +
Math.cos(φ1) * Math.cos(φ2) * Math.sin(Δλ/2) * Math.sin(Δλ/2);
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
const d = R * c; // in meters
return d;
}
// 距離を計算
const distance = calculateDistance(latitude, longitude, schoolLatitude, schoolLongitude);
// 範囲内にいるか確認
if (distance <= radius) {
// スプレッドシートに出席を記録する処理
const sheet = SpreadsheetApp.getActiveSheet();
sheet.appendRow([new Date(), "出席", latitude, longitude]);
Logger.log("出席を記録しました");
} else {
Logger.log("範囲外です");
}
} else {
Logger.log("位置情報が利用できません");
}
}
2. 課題配布システム
特定の場所(例:図書館、自習室)で課題を配布し、生徒がその場所にいる場合にのみ課題を受け取れるようにします。GoogleドキュメントとGASを連携させ、生徒が特定の場所でフォームに回答すると、課題へのアクセス権を付与します。
function onFormSubmit(e) {
// フォーム送信時のイベントオブジェクトから位置情報を取得する
const location = e.getLocation();
// 位置情報が存在するか確認する
if (location) {
const latitude = location.latitude;
const longitude = location.longitude;
// 図書館の緯度経度
const libraryLatitude = 35.6890;
const libraryLongitude = 139.6920;
// 許容範囲(メートル)
const radius = 50;
// 距離を計算する関数(Haversine formula)
function calculateDistance(lat1, lon1, lat2, lon2) {
const R = 6371e3; // 地球の半径 (m)
const φ1 = lat1 * Math.PI/180; // φ, λ in radians
const φ2 = lat2 * Math.PI/180;
const Δφ = (lat2-lat1) * Math.PI/180;
const Δλ = (lon2-lon1) * Math.PI/180;
const a = Math.sin(Δφ/2) * Math.sin(Δφ/2) +
Math.cos(φ1) * Math.cos(φ2) * Math.sin(Δλ/2) * Math.sin(Δλ/2);
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
const d = R * c; // in meters
return d;
}
// 距離を計算
const distance = calculateDistance(latitude, longitude, libraryLatitude, libraryLongitude);
// 範囲内にいるか確認
if (distance <= radius) {
// ドキュメントID
const documentId = "YOUR_DOCUMENT_ID";
// 回答者のメールアドレス
const email = e.response.getRespondentEmail();
// ドキュメントへのアクセス権を付与する
DriveApp.getFileById(documentId).addEditor(email);
Logger.log("課題へのアクセス権を付与しました");
} else {
Logger.log("範囲外です");
}
} else {
Logger.log("位置情報が利用できません");
}
}
よくある問題とトラブルシューティング
- 位置情報が取得できない:生徒のデバイスの位置情報サービスが有効になっているか確認してください。また、Googleフォームの設定で、位置情報の収集が許可されているか確認してください。
- 位置情報の精度が低い:GPSの受信状況が悪い場合、位置情報の精度が低下する可能性があります。Wi-Fiやモバイルデータ通信を利用することで、精度を向上させることができます。
- プライバシーの問題:位置情報の収集は、生徒のプライバシーに関わるため、事前に十分な説明を行い、同意を得る必要があります。
カスタマイズ方法と応用例
- 位置情報の記録:取得した位置情報をスプレッドシートに記録し、生徒の行動履歴を分析することができます。
- 地図表示:取得した位置情報をGoogle Maps APIと連携させ、地図上に生徒の現在地を表示することができます。
- 特定の場所への到着通知:生徒が特定の場所に到着した際に、教師に通知を送信することができます。
まとめ
GASのEvent.getLocation()
関数を活用することで、教育現場における様々な業務課題を、位置情報に基づいたアプローチで解決できます。出席管理、課題配布、不正行為の防止、緊急時の対応など、様々なシチュエーションで活用できる可能性を秘めています。ただし、位置情報の収集はプライバシーに関わるため、十分な配慮が必要です。
本記事で紹介したコード例は、あくまで基本的なものです。実際の業務に合わせて、カスタマイズや応用を加えて、より効果的なシステムを構築してください。
CodeCampは、現役エンジニアからマンツーマンで学べるオンラインプログラミングスクールです。WebデザインやWebサービス開発、転職支援など、目的に合わせた多様なコースが選べます。
朝7時〜夜23時40分まで、365日レッスンが受けられるため、忙しい方でも自分のペースで学習を進めることが可能です。通過率8%の厳しい選考を通過した質の高い講師陣が、あなたのキャリアチェンジを強力にサポートします。
さらに、未経験者向けのカリキュラムや、学習開始から20日以内の全額返金保証制度もあるため、プログラミング学習に不安を感じている方でも安心して始めることができます。
CodeCampで理想の働き方を実現しよう