Ⅰ．はじめに

2

3

Ⅱ．ＧｏｏｇｌｅＡｐｐｓＳｃｒｉｐｔ（ＧＡＳ）の概要

1. スクリプト言語:•

Google Apps Script は、JavaScript をベースにしたスクリプト言語です。JavaScript の構文とAPI を使用して、Google のサービスと対話できます。

2. Google サービスへの統合:••

Google Apps Script は、Google のさまざまなサービスと深く統合されています。これには 、Gmail、Google Sheets、Google Docs、Google Calendar、Google Drive などが含まれます。
スクリプトを使用して、これらのサービスのデータを操作し、タスクを自動化できます。

3. 自動化:•Google Apps Script を使用すると、定期的なタスクや繰り返しの作業を自動化できます。たとえば、メールの自動送信、データのバックアップ、スプレッドシートのデータ処理などがあります。

4. カスタマイズ:•Google Apps Script を使用して、Google アプリケーションをカスタマイズできます。スクリプ
トを追加することで、新しい機能やカスタムメニューを作成し、ユーザーエクスペリエンスを向上させることができます。

5. ウェブアプリケーション:•Google Apps Script を使用して、カスタムウェブアプリケーションを作成できます。これにより、ユーザーがウェブブラウザを介して Google サービスと対話できるようになります。

6. API アクセス:•スクリプトを使用して、外部の API にアクセスし、データを取得、変更、送信できます。これにより、さまざまなデータソースと連携できます。

7. セキュリティ:•Google Apps Script はセキュアな実行環境を提供し、データへのアクセス制御を提供します。
スクリプトは、Google アカウントの許可を得て実行され、データの機密性を保護します。

4

1. 2009 年 - Google Apps Script の導入:
•Google Apps Script は、2009 年に初めて導入されました。最初は Google スプレッドシートのカスタムスクリプトとして提供され、ユーザーがスプレッドシート上で自動化タスクを実行できるようにしました。

2. 2010 年 - Gmail への拡張:•2010 年に、Google Apps Script は Gmail に統合され、Gmail のカスタマイズや自動化が可能になりました。ユーザーは、Gmail のラベリング、自動フィルタリング、自動返信などを設定できるようになりました。

3. 2012 年 - Google ドキュメントへの拡張:•

2012 年には、Google Apps Script が Google ドキュメントに統合され、文書処理とカスタマイズが可能になりました。ユーザーは、カスタムスクリプトを使用して文書を自動化し、カスタマイズできるようになりました。

4. 2014 年 - Google Apps Script のエディタ改善:•2014 年には、Google Apps Script のエディタが大幅に改善され、より使いやすくなりました。
開発者はスクリプトをより効果的に作成および管理できるようになりました。

5. 2019 年 - Google Apps Script の強化:•

新しい高度なサービスと API が導入され2019 年には、Google Apps Script がさらに強化され、ました。これにより、開発者は多くの Google サービスとの連携をより効果的に行えるようになりました。

6. 現在 - 持続的な改善:•

現在も Google Apps Script は着実に進化し続けており、新しい機能や API が定期的に追加されています。Google Workspace の一部として提供されており、ビジネスや教育機関で幅広く利用されています。

Ⅲ．

5

6

7

••••

•

•••
•8

•
•

9

10

11

<!DOCTYPE html><html><head><base target=”_top”><?!= HtmlService.createHtmlOutputFromFile('css').getContent(); ?></head><div class="container"><form
action="https://script.google.com/a/macros/webrobo.jp/s/AKfycbxIsDdpgjW78WmBoBYQOE7GoHabK3gj0vH
pzKzBF2qnzx-89psAkaHCs9NpZ5aXxYvN/exec" method="POST">
<h2>

</h2>

<label for="email">:</label><input type="email" id="email" name="email" required><br><br><label for="password">:</label><input type="password" id="password" name="password" required><br><br><button type="submit"></button>12</form></div></html><?!= HtmlService.createHtmlOutputFromFile('css').getContent(); ?><form action="https://....

<!DOCTYPE html><html><head><base target="_top"><meta name="viewport" content="width=device-width, initial-scale=1"></head><body>
<h2>
<p>

</h2>
<?= name ?></p></body></html><!DOCTYPE html><html><head><base target="_top"><meta name="viewport" content="width=device-width, initial-scale=1"></head><body><h1></h1></body></html>13

<style>.fsize{font-size: 24px;
text-align: center;}.container {width: 300px;
margin: 0 auto;
padding: 20px;
background-color: #ffffff;
border: 1px solid #ccc;
border-radius: 5px;}
h2 {text-align: center;margin-bottom: 20px;}
input[type="email"],
input[type="password"] {width: 93%;
padding: 10px;
margin-bottom: 10px;
border: 1px solid #ccc;
border-radius: 4px;}
button[type="submit"] {width: 100%;
padding: 10px;
background-color: #4CAF50;
color: #ffffff;
border: none;border-radius: 4px;
cursor: pointer;}button[type="submit"]:hover {background-color: #45a049;}</style>14

function doGet() {return HtmlService.createTemplateFromFile("login").evaluate().setTitle("").addMetaTag("viewport", "width=device-width, initial-scale=1");}// doPost
function doPostTest() {let e = {"parameters": {"email": "yamada@yahoo.co.jp","password": "tarou1234",}};
Logger.log(e);Logger.log(e.parameters);
doPost(e);}function doPost(e) {let email = e.parameters.email.toString();
Logger.log(email);
let password = e.parameters.password.toString();
let checkAccount = judgeAccounts(email, password);
let template;
Logger.log(checkAccount);if(checkAccount != '') {let name = checkAccount[0];Logger.log(name);// success.html
template = HtmlService.createTemplateFromFile("success");
template.name = name;return template.evaluate().setTitle("").addMetaTag("viewport", "width=device-width, initial-scale=1");} else {return HtmlService.createTemplateFromFile("error").evaluate().setTitle("").addMetaTag("viewport", "width=device-width, initial-scale=1");}}function judgeAccounts(email, password){//15let ss = SpreadsheetApp.openById('1hpnQawk68Ziv-fuN0KUxtzw0f7lx9njcHzgspfzE3O4');
let sheet = ss.getSheetByName('1');

let data = sheet.getDataRange().getValues();
Logger.log(data);//
let match_record = '';for (var i = 1; i < data.length; i++) { // 1
if (data[i][1] === email && data[i][2] === password) {match_record = data[i];break;}}
return match_record;}

HtmlService.createTemplateFromFile("login")
login.html
addMetaTag("viewport", "width=device-width, initial-scale=1")

login.html

email

password<form method="post" action="https://script.google.com/..
actionmethod=”post”(e)efunction doPost(e)login.html

email

e.parameters

password

email
email

password

passwordjudgeAccounts(email, password)

judgeAccounts
let ss = SpreadsheetApp.openById('1hpnQawk68Ziv-fuN0KUxtzw0f7lx9njcHzgspfzE3O4');
let sheet = ss.getSheetByName('1');

let data = sheet.getDataRange().getValues();

datafor (var i = 1; i < data.length; i++) { // 1
data.lengthif (data[i][1] === email && data[i][2] === password) {match_record = data[i];break;
data[i][1] === email && data[i][2]16emaildata[i][1] === email

passworddata[i][2] === password

match_record = data[i];match_record

return match_record;

match_record

let checkAccount = judgeAccounts(email, password);

checkAccountjudgeAccounts
let match_record = '';match_recordif(checkAccount != '') {// success.html
template = HtmlService.createTemplateFromFile("success");
template.name = name;return template..
success.html

namae

success.html

return HtmlService.createTemplateFromFile("error")..
error.html

17

18

19

20

function doPost(e)// doPost
function doPostTest() {let e = {"parameters": {"email": "yamada@yahoo.co.jp","password": "tarou1234",}};
Logger.log(e);Logger.log(e.parameters);
doPost(e);}function doPost(e) {let email = e.parameters.email.toString();
let password = e.parameters.password.toString();

21e

data
[[kaiinmei, email, password, nenrei, danjyo], [tarou1234,36.0,], [, yamada@yahoo.co.jp,, hanako@google.com, pass0843, 30.0,,koujirou@hotmail.com, skojipass, 55.0,], []]match_record[, yamada@yahoo.co.jp, tarou1234, 36.0,]

Ⅳ．

<!DOCTYPE html><html><head><base target="_top"></head><body><div class="form-wrapper">
<h1>

</h1>
<form

method="post"

action="https://script.google.com/a/macros/webrobo.jp/s/AKfycbwyTb4TJvj1CkZ2HQC5z1mDSfgpuL6x8YL
1sUs_h0K-xC1DBkr5G02g9t5E1EHzeXlmrg/exec"><div class="form-item"><label for="simei"></label><input type="simei" name="simei" required="required" placeholder="Simei"
autocomplete="off"></input></div><div class="form-item"><label for="email"></label>22<input type="email" name="email" required="required" placeholder="Email Address 20" maxlength="20" autocomplete="off"></input></div><div class="form-item"><label for="password"></label><input type="password" name="password" required="required" placeholder="password 8" minlength="8" autocomplete="off"></input></div><div class="form-item"><label for="nenrei"></label><input type="number" name="nenrei" required="required" placeholder="Nenrei"
autocomplete="off"></input></div><div class="form-item"><label for="yubin_no"></label><inputtype="text"

pattern="\d{3}-?\d{4}"name="yubin_no"

required="required"placeholder="Yubin_no" autocomplete="off"></input></div><div class="form-item"><label for="gender"></label><input type="radio" name="gender" value="" required></label><label for="gender"></label><input type="radio" name="gender" value="" required></label></div><br><div class="button-panel"><input type="submit" class="button" title="" value="</div></form><div class="form-footer"></div></div></body></html>"on"23"></input>

"off"

required="required"

type="email"minlength="8"4.
<input type="password"
5.
<input type="number"
6.
<input type="text" pattern="\d{3}-?\d{4}"-7.

HTMLHTMLCSShtml
Copy code<!DOCTYPE html><html lang="ja"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title></title><style>/**/.radio-container {display: flex;
gap: 20px; /**/}/**/.required::before {content: "*";

24

color: red;margin-right: 5px;}</style></head><body><form><div class="radio-container"><label><input type="radio" name="gender" value="" required></label><label><input type="radio" name="gender" value="" required></label></div><p class="required"></p><input type="submit" value=""></form></body></html><input>namerequiredCSS*<!DOCTYPE html><html><head><base target="_top"><meta name="viewport" content="width=device-width, initial-scale=1"></head><body>
<h2>
<p>

</h2>
</p>

</body></html><!DOCTYPE html><html><head><base target="_top">25

<meta name="viewport" content="width=device-width, initial-scale=1"></head><body><h1></h1></body></html>.gs
index.html.gsfunction doGet() {return HtmlService.createTemplateFromFile("index").evaluate().setTitle("").addMetaTag("viewport", "width=device-width, initial-scale=1");}// doPost
function doPostTest() {let e = {"parameters": {"simei": "","email": "yamada@yahoo.co.jp","password":'tarou1234',"nenrei": "36","gender":'',"yubin_no":'971-8132'}};
doPost(e);}function doPost(e) {Logger.log('dopost');Logger.log(e.parameters);// parameters// keylet [keys, values] = [Object.keys(e.parameters), Object.values(e.parameters)]
let simei = e.parameters.simei.toString();
let email = e.parameters.email.toString();
let password = e.parameters.password.toString();
let nenrei = e.parameters.nenrei;let gender = e.parameters.gender.toString();26

let yubin_no = e.parameters.yubin_no.toString();
let kekka = kaiinsyuturyoku(simei,email,password,nenrei,gender,yubin_no);if(kekka === true) {let template = HtmlService.createTemplateFromFile("success");
return template.evaluate().setTitle("").addMetaTag("viewport", "width=device-width, initial-scale=1");} else {template = HtmlService.createTemplateFromFile("error");return template.evaluate().setTitle("").addMetaTag("viewport", "width=device-width, initial-scale=1");}}function kaiinsyuturyoku(simei,email,password,nenrei,gender,yubin_no){
let sheetId = '1hpnQawk68Ziv-fuN0KUxtzw0f7lx9njcHzgspfzE3O4';
let sheetName = '1';

let sheet = SpreadsheetApp.openById(sheetId).getSheetByName(sheetName);//let values = sheet.getDataRange().getValues();
let recordsu = values.length;//
for(let i = 1; i < recordsu; i++) {Logger.log(recordsu);
Logger.log(values[i][1]);if (values[i][1]==email){return false;}}
let lastRow = sheet.getLastRow();
sheet.appendRow([simei ,email, password,nenrei,gender,yubin_no]);sendGmail(email,simei);
return true;}
function sendGmail(email,simei){
let kenmei = '';let honbun = '';let body = `${kenmei}\n${simei}\n\n${honbun}`;GmailApp.sendEmail(email,kenmei,body);}1.
function kaiinsyuturyoku(simei,email,password,nenrei,gender,yubin_no){
let sheetId = '1hpnQawk68Ziv-fuN0KUxtzw0f7lx9njcHzgspfzE3O4';
let sheetName = '1';

let sheet = SpreadsheetApp.openById(sheetId).getSheetByName(sheetName);27//
let values = sheet.getDataRange().getValues();
let recordsu = values.length;//
for(let i = 1; i < recordsu; i++) {Logger.log(recordsu);
Logger.log(values[i][1]);if (values[i][1]==email){return false;}}2.
sheet.appendRow([simei ,email, password,nenrei,gender,yubin_no])3.
function sendGmail(email,simei){
let kenmei = '';let honbun = '';let body = `${kenmei}\n${simei}\n\n${honbun}`;GmailApp.sendEmail(email,kenmei,body);}

上記の `${kenmei}\n${simei} \n\n${honbun}`;の\n は改行の指示になっています。

doPostTest()email****@*****.jp

error.html// doPost
function doPostTest() {let e = {"parameters": {"simei": "akiyama","email": "****@*****.jp","password":'password',"nenrei": "50","gender":'',"yubin_no":'100-0000'}28};
doPost(e);}.gs
let lastRow = sheet.getLastRow();
sheet.appendRow([simei ,email, password,nenrei,gender,yubin_no]);// sendGmail(email,simei);//

29