【Glide×GAS】緯度経度を日本語住所とGoogleマップURLへ自動変換!即時メール通知の完全ガイド
はじめに
Glideを使って現場の報告アプリや自治体・地域の通報アプリを運用していると、こんな壁にぶつかることはありませんか?
- 「フォームから送信された位置情報が『35.68961442504938, 139.69167292757473』のような数字の羅列で、どこを指しているのか直感的に分からない」
- 「現地を確認するたびに、緯度経度をコピーしてGoogleマップに貼り付けて検索するのが手間…」
- 「報告があった瞬間に、人間が読める『日本語住所』と『ワンタップで開けるマップリンク』が入った通知メールを受け取りたい」
Glideは直感的に位置情報(緯度・経度)を取得できる非常に優れたノーコードツールですが、収集した後のデータを実務で扱いやすく整えるにはもう一工夫必要です。
そこで活躍するのがGoogle Apps Script(GAS)です。GASの逆ジオコーディング機能を組み込むことで、データが送信された瞬間に「日本語住所の出力」「GoogleマップURLの生成」「担当者への即時メール通知」までをすべて全自動化できます。
今回は、そのままコピペして使えるGASスクリプトと設定ステップをわかりやすく解説します!
今回構築する仕組みの概要
今回構築するのは、Glideから送信された位置情報をトリガーにして、バックグラウンドで自動処理を走らせる仕組みです。
【Glideアプリ】
位置情報(緯度,経度)を送信
│
▼
【Googleスプレッドシート】
J列(位置情報)にデータが保存される
│
▼[フォーム送信時トリガー起動]
【GAS(Google Apps Script)】
① 位置情報の整形(不要な空白・改行の削除)
② 地図API(Maps API)で日本語住所に逆ジオコーディング
③ Googleマップの検索URLを作成
│
├─► K列に「日本語住所」を出力
├─► L列に「GoogleマップURL」を出力
└─► 担当者へ「内容・マップURL付きメール」を自動送信
全体の処理はわずか数秒で完了するため、現場の担当者は通知メールを開くだけで発生場所の住所とマップリンクを即座に確認できるようになります。
前提となるスプレッドシートの構成
スクリプトを動かす前に、Googleスプレッドシートの列構成を確認・セットアップしておきましょう。今回のコードでは、以下の列配置を前提としています。
| 列位置 | 列名 | 内容 | 備考 |
|---|---|---|---|
| J列(10列目) | 位置情報 | 39.7186, 140.1024 など | GlideのLocationコンポーネントから入力される値 |
| K列(11列目) | 変換後住所 | 秋田県秋田市山王○-○-○ | GASにより自動出力されるエリア |
| L列(12列目) | GoogleマップURL | [https://www.google.com/maps/](https://www.google.com/maps/)... | GASにより自動出力されるエリア |
※シート名は自由に変更可能ですが、コード内の設定値(CONFIG)と一致させてください。
ソースコード(コピペOK)
スプレッドシートの「拡張機能」>「Apps Script」を開き、以下のコードを貼り付けてください。
※ルールに基づき機密情報の保護、プロパティの安全管理、著作権ヘッダーを適用しています。
/**
* ====================================================================
* Utility Module for GAS / Civic Tech Akita
* Copyright (c) Civic Tech Akita (https://akita-csmedia.com/)
*
* 本モジュールは Civic Tech Akita の留保知的財産権(自社資産)です。
* ライセンス・実装に関するお問い合わせ: https://akita-csmedia.com/?page_id=1476
* ====================================================================
*/
/**
* 現場・通報フォーム受信時の位置情報自動変換・通知スクリプト
* 起動トリガー:スプレッドシートの「フォーム送信時」
*/
// 設定オブジェクト
const CONFIG = {
SHEET_NAME: "通報データ", // 対象のスプレッドシート名
ADMIN_EMAIL: "admin@example.com" // 通知先のメールアドレス(テスト用)
};
/**
* フォーム送信時に実行されるメイン関数
*/
function onFormSubmit(e) {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName(CONFIG.SHEET_NAME);
if (!sheet) {
console.warn(`対象のシート「${CONFIG.SHEET_NAME}」が見つかりません。`);
return;
}
const row = sheet.getLastRow();
// J列(10列目)から位置情報を取得
let locationRaw = sheet.getRange(row, 10).getValue().toString();
// 不要な空白・改行・制御文字を徹底削除
locationRaw = locationRaw.replace(/\s+/g, "");
// データが存在しない、またはカンマが含まれていない場合は処理を中断
if (!locationRaw || !locationRaw.includes(',')) return;
try {
const latLng = locationRaw.split(',');
// 1. Maps APIを使用して日本語指定で逆ジオコーディングを実施
const response = Maps.newGeocoder()
.setLanguage('ja')
.reverseGeocode(latLng[0].trim(), latLng[1].trim());
if (!response.results || response.results.length === 0) {
console.warn("住所の変換結果が得られませんでした。");
return;
}
// 住所の整形(先頭の「日本、」を除去して見やすくする)
const address = response.results[0].formatted_address.replace(/^日本、/, '');
// K列(11列目)に日本語住所を出力
sheet.getRange(row, 11).setValue(address);
// L列(12列目)に公式仕様に沿ったGoogleマップURLを出力
const mapUrl = `https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(locationRaw.trim())}`;
sheet.getRange(row, 12).setValue(mapUrl);
// 2. 担当者へメール通知を送信
const emailTo = CONFIG.ADMIN_EMAIL;
GmailApp.sendEmail(
emailTo,
`【新着通知】位置情報ログ受信:${address}`,
`新しい通報・報告が送信されました。\n\n` +
`----------------------------------------\n` +
`■ 発生場所(住所): ${address}\n` +
`■ Googleマップ URL: ${mapUrl}\n` +
`■ 取得座標: ${locationRaw}\n` +
`----------------------------------------\n\n` +
`※このメールはGoogle Apps Scriptより自動送信されています。`
);
console.log(`正常処理完了: ${address}`);
} catch (err) {
console.error("エラーが発生しました: ", err);
}
}
コードの解説(ここがハマりやすいポイント!)
一見シンプルに見えるスクリプトですが、実務で安定運用するために押さえておくべき「3つのハマりどころ」を解説します。
ポイント①:replace(/\s+/g, "") による不規則データの徹底除去
Glideなどのスマートフォン端末から送信される位置情報には、OSや環境によって「目に見えないスペース」や「改行コード」が混ざり込むことが多々あります。
そのまま split(',') してAPIに渡すと、座標の読み取りエラー(Invalid Coordinate)が発生して止まってしまいます。
replace(/\s+/g, "") を挟むことで、文字列内のすべての余計な空白・改行を削ぎ落とし、安定した動作を保証しています。
ポイント②:.setLanguage('ja') で日本語住所を強制指定
Google Apps Script標準の Maps.newGeocoder() は、デフォルトで実行環境の言語設定に依存します。そのため、何もしないと住所が "Japan, Akita, Akita-shi..." のように英語・ローマ字表記で返ってくることがあります。
明確に .setLanguage('ja') を宣言し、さらに formatted_address の冒頭に付く不要な「日本、」を正規表現 replace(/^日本、/, '') で削除することで、日本の業務現場で使いやすい住所表記に整えています。
ポイント③:公式URLプレフィックスを使ったマッピング
Googleマップを表示させるURLは、[https://www.google.com/maps/search/?api=1&query=緯度,経度](https://www.google.com/maps/search/?api=1&query=緯度,経度) のパラメータ形式(Google Maps URL API)を採用しています。
この形式で生成しておくと、PCのブラウザはもちろん、スマホのWebブラウザやGoogleマップアプリでもスムーズかつ正確に該当ピンの場所を開くことができます。
スクリプトの設置と「フォーム送信時」トリガーの設定手順
コードが書けたら、実際にスプレッドシートへデータが入った際に自動起動するようにトリガーを設定します。
ステップ1:GASエディタにコードを保存
- スプレッドシートの上部メニュー「拡張機能」>「Apps Script」をクリック。
- 開いたエディタに上記コードを貼り付け、保存アイコン(または Ctrl + S / Cmd + S)を押します。
ステップ2:イベントトリガーの追加
- GASエディタの左側メニューにある 時計マーク(トリガー) をクリックします。
- 右下の「トリガーを追加」ボタンを押します。
- 設定画面で以下のように選択してください:
- 実行する関数を選択: onFormSubmit
- 実行するデプロイを選択: Head
- イベントのソースを選択: スプレッドシートから
- イベントの種類を選択: フォーム送信時
- 「保存」をクリックします。初回設定時はGoogleアカウントの権限承認画面が表示されるため、画面の指示に従ってアクセスを許可してください。
まとめ
今回の仕組みを導入することで、Glideで収集した位置情報を人間が瞬時に判断できる「日本語住所」と「マップURL」へリアルタイム変換できるようになりました。
- 数値の座標データを人間が見やすいテキスト・リンクに自動変換
- 現場の報告・確認業務のスピードが飛躍的に向上
- 地域課題解決(クマ目撃通報、防災・インフラ点検、市民レポーティングなど)に即応用可能
ノーコードの「Glide」と、Google Workspaceの自動化機能である「GAS」を組み合わせることで、高額な専用システムを構築しなくても、現場に合わせた柔軟なデジタル化を実現できます。ぜひ活用してみてください!
💡 この機能が最初から入った完成品サービスをお探しの方へ
「設定作業やメンテナンスをプロに任せたい」「現場ですぐ使えるシビックテック・業務アプリとして導入したい」方向けに、今回ご紹介した機能が標準搭載された完成品ソリューションを提供しています。
👉 【地域課題解決アプリ】Glide×GAS連携パッケージの詳細・導入事例を見る
🏢 インフラ構築や組織全体のDXからご相談されたい方へ
Google Workspaceの導入、独自ドメインの整備からアプリ・LINE連携まで、予算最小限で進める全体設計は「地域DX完全ロードマップ」にて詳しく公開しています。
