GAS（言語）のみを使って、今 会員管理（アプリ）を作るとしたら

##ゴール
Googleサービスだけで会員管理システムをつくる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/349931/1a929888-0d50-3cb8-2f57-880ac12c06c9.png)

- [Googleフォーム](https://www.google.com/intl/ja_jp/forms/about/)
    - データ登録
    - 再編集可能
- [Googleスプレッドシート(GAS)](https://www.google.com/intl/ja_jp/sheets/about/)
    - Tableとして利用
    - 登録時にGoogleフォームの再編集URL登録
    - メンテナンス用_再編集URL一覧取得方法実装
- [Googleデータポータル](https://marketingplatform.google.com/intl/ja/about/data-studio/)
    - データベースからマップ上に位置情報表示
    - データ表示
    - 検索機能
    - 登録フォーム、Tableへのリンク

##メリット
誰でもすぐに作ることができる（無料）

##早速作る
[Googleドライブ](https://www.google.com/intl/ja_ALL/drive/)に**会員管理**フォルダを作成
作成したフォルダ内で[Googleフォーム](https://www.google.com/intl/ja_jp/forms/about/)を作成
GoogleフォームからGoogleスプレッドシートを作成
Googleデータポータルで管理

Googleドライブ内イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/349931/f314a4d3-fcfd-0f11-d717-29702aed6016.png)

###Googleフォーム
Googleフォームの項目は次のようにしました。

- 氏名
- 郵便
- 住所
- 緯度経度
- 種別
- キャッシュレス
- メモ
- ファイル

こちらがTableの表題になります。

歯車のマークから送信後に編集をチェック
回答から緑色のスプレッドシートのマークをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/349931/b9e78564-b3f4-9977-ec21-1dcf45002110.png)

###Googleスプレッドシート
Googleスプレッドシートに一覧表が作成されます。
表題を3行目にくるように、1行目に2つ行を挿入します。
別途、他のシートに帳票様式を作り、選んだデータを印刷する仕組みを作ったりしたいので、Noを選んだデータを帳票様式に出力する仕組みの土台を先に作っておきます。※今回は未紹介

つづいてAとBに列を挿入し、Googleフォームの編集用URLを取得する仕組みをつくります。
完成イメージは次のとおりです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/349931/b2ee056c-d1ac-5e60-a235-551344929ec1.png)

###ソースコード(GAS)
[Apps Script](https://developers.google.com/gsuite/aspects/appsscript?hl=ja)を利用します。
**ツール - スクリプトエディタ**から次のソースコードを追加し、実行します。

####編集用URL取得
```js
function SubmitMail(e){

var sheetId = 'GoogleスプレッドシートのID';
var sheetName = 'シートの名前';

//1_フォームの回答シートを取得
var SS = SpreadsheetApp.openById(sheetId).getSheetByName(sheetName);

//2_回答シートを取得
var sheetDates = SS.getDataRange();

//3_フォームIDを保存
var formid = 'GoogleフォームのID';

//4_回答データ一覧をフォームから取得
var formDates = FormApp.openById(formid).getResponses();


for(var i = 0;i<formDates.length;i++){


//5_回答データ一覧をフォームから一番最後の編集用URL取得
var EditableUrl = formDates[Number(i)].getEditResponseUrl();


//6_回答用URLをAセルへ挿入
sheetDates.getCell(i+4, 1).setValue(EditableUrl);
}
}
```
色々聞かれますが、全てOKでA列に編集用URLが表示されます。
A列に編集用URLが入れば成功です。
B列はとりあえず自分で連番を振ります。

続いて、Googleフォーム登録時に編集用URLと連番を取得できるようにします。
**ツール - スクリプトエディタ - ファイル - New - スクリプト ファイル**から次のソースコードを新たに追加します。
####フォーム登録時_編集用URL取得
```js
function onFormSubmit(e){
  //回答シートのIDを保存
  var sid     = 'GoogleスプレッドシートのID';
  var sname   = 'シートの名前';
  //(1)回答シートを取得
  var SS      = SpreadsheetApp.openById(sid);
  //最終行のAセルを取得
  var RNG     = SS.getSheetByName(sname).getDataRange();
  var lastRow = RNG.getLastRow();
  var rowA    = RNG.getCell(lastRow, 1);
  //最終行のBセルを取得
  var rowB    = RNG.getCell(lastRow, 2);  

  //フォームのIDを保存
  var fid     = 'GoogleフォームのID';
  //(3)フォーム回答データ一覧を取得
  var fRspnss = FormApp.openById(fid).getResponses();
  //(4)フォーム回答一覧から最後のデータ（＝一番新しいデータ）の編集用URLを取得
  var url     = fRspnss[Number(fRspnss.length - 1)].getEditResponseUrl();

  //動作確認（URLが正しく取得できているかLogger.logへ出力）
  Logger.log("URL is %s",url);

  //(5)挿入用文字列を作成
  var str = url;
    //Bに連番
　var str2 = Number(lastRow - 3);
  //文字列を最終行Aセルへ挿入
  rowA.setValue(str);  
  rowB.setValue(str2);  
}
```
**編集 - 現在のプロジェクトのトリガー**からトリガーを追加します。

- 実行する関数を選択 > **onFormSubmit**
- イベントのソースを選択 > **スプレッドシートから**
- イベントの種類を選択 > **フォーム送信時**

※基本的にはGoogleフォームからレコードを追加するとURLがセルに入るイメージなのですが、エラーや誤ってURLを消してしまった場合、最初に作成した**function SubmitMail(e)**を実行してURLのみ再取得できます。

###Googleデータポータル
https://datastudio.google.com/navigation/reporting
**作成**から**エクスプローラ(ベータ版)**を選びます。
新しいエクスプローラが作成されるので、新しいデータソースを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/349931/e2342393-2abb-30a5-a898-1c71ddd1a9f3.png)
**Googleスプレッドシート - 会員管理シート(作成したGoogleスプレッドシート) - フォームの回答1(シート名)**
と選択していきます。
オプション
*列のヘッダー名は重複しないようにしてください。
ヘッダーが空の列はデータソースに追加されません。*
の下のフォームに**A3:Z**と入力（シートの2行目までを除外するため）し、接続をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/349931/b3345cfe-4bbd-7eaa-77fa-86740c51e685.png)

####フィールド編集

- ファイル > URL
- 緯度経度 > 地域 - 緯度、軽度
- 住所 > 地域 - 住所
- 郵便 > 地域 - 郵便番号

続いてフィールドを追加します。
**ID**といったフィールドデータをクリックしたら、編集用のGoogleフォームが開くようにしたいので、HYPERLINK関数を使用します。
項目名を**ID**にし、計算式に`HYPERLINK(編集用URL, No)`と入力したら保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/349931/b429d365-402a-645a-b669-034e911b482d.png)
適用を押すとエクスプローラー編集画面に戻ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/349931/c2a3d1b4-849d-5d3c-58b0-594a56c802cf.png)

####データソースの設定

- 機関のディメンション > タイムスタンプ(たぶんデフォルト)
- ディメンション
    - ID
    - 氏名
    - 編集用URL
- 指標 > 削除
- 並べ替え > No >昇順
- グラフのスタイル > 行番号を表示のチェックを外す

####Google Map（グラフ）を追加
グラフを追加 > Google Map
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/349931/51707588-92b4-89f8-2623-a6c6e75f6681.png)

Google Mapが追加されるので、バブルの位置を緯度経度に設定すると、位置情報が可視化される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/349931/3a3fdb1a-5ade-2928-2d2c-c511fc35bf36.png)

表でデータを選択するとマップも連動し、逆にマップから位置情報を選択するとデータもフィルタされる。

共有から、**新しいレポートを作成して共有**を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/349931/32d1f605-d641-8199-a707-689866d59b9c.png)

レポートが作成される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/349931/1556ac93-7105-9f3b-f2c5-b8d1997b9fcb.png)

ここに、グラフのデータ、フィルタオプション、登録用フォームのリンク、Googleスプレッドシートのデータのリンク等を設定し、デザインを整える。
Googleデータポータルから会員登録、変更ができ、会員情報のデータベースをマッピングできるクラウドGIS型会員管理アプリの完成。

完成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/349931/f985e0ce-2ba3-24ae-7851-9aeb5465bdcb.png)
※マップは空中写真も設定できます。

###まとめ
簡単な会員管理システムを作る方法を紹介してみました。
Googleアカウントのみで作成可能ですので、クラウド運用でき、複数人で編集できます。
Google Chromeがあれば動作するのでデバイスも選びません。セキュリティはGoogleの2要素認証などを設定しておくと一定の水準をクリアできるかと思います。
小さなコミュニティや団体で、コストをかけずに構築したい場合などに有効かと思います。
データをEXCELにエクスポートしたり、Googleスプレッドシートで帳票様式を作成して運用することも可能です。
よければチャレンジしてみてください。

###参考
[Googleフォーム編集用URLをスプレッドシートの回答に追加する](http://toxaichi.blogspot.com/2019/09/googleurl.html)
[011-フォーム送信時にスプレッドシートへ編集用URLを挿入する](https://qiita.com/co-ikeya/items/adfcfee0075e85b53bbc)