# 2020/09/02インターンシップ
## [説明資料](https://gitpitch.com/JapanComputerServicesInc/training-for-prospective-employees/20200902#/)
## QRコード情報
- ユーザー1:岩下さん

- ユーザー2:

- ユーザー3:岩田さん

- ユーザー4:小玉さん

- ユーザー5:(講師用/高橋)

- ユーザー6(講師用/鈴木)

- ユーザー7(人事用)
- ユーザー8(人事用)
## Google Apps Scriptに出た URL
- ここにウェブアプリケーションのURL(WebhookURL)を貼ってください
- ユーザー1:岩下さん
- https://script.google.com/macros/s/AKfycbzci5is-eNuFXXkCN7bMr174tr4NBgepIz9pI9E1vz6LeOgSTkO/exec
- ユーザー2:
- ユーザー3:岩田さん
https://script.google.com/macros/s/AKfycbxYNxevVpVZSIBCO1o9Uz-H-bChdB-JGAWuahKu_1bF9ugQOQj0/exec
- ユーザー4:小玉さん
https://script.google.com/macros/s/AKfycbxhFapnbgVk_um0jDumPF4WSUYrDptSjgtDMQseD0ZtNGmzuBY/exec
- ユーザー5:(講師用/高橋)
https://script.google.com/macros/s/AKfycbzugjIuH9nRXWMRJfdc9wVYZ4VPzOJVv76MSXdvVd3EYQjLU0A/exec
- ユーザー6:(講師用/鈴木)
https://script.google.com/macros/s/AKfycbymnTa9yyJwMDSN87SqloshdH4_V6X0Jjh6VCkSaMI9ydYrU1Cd/exec
- ユーザー7(人事用):
- ユーザー8(人事用):
## アクセストークン情報
- ユーザー1:岩下さん
upab0Iy8G4iwlZHtx9Jyx2ikFYFTDUNcbgc7xRP59BdRNaMBw98/WbBprWf/nbPjk6v7Q6kRCCkz/gU/+OdGkWH30RlXa8YphRmC0TXn2IiXXJVZhF/G8qxk7Dhwi12LOGU5WgRM2lN1Vpk4UWIkMAdB04t89/1O/w1cDnyilFU=
- ユーザー2:
ZsiztKFpGOLTe+BLasaW2hLlGbXiEnwmAs2roai5Rj/7mP+p1yUHgB3jUusjNuyWxV68FIkIDgoHH3UiL6+pxyKELUp5djVJiW0FHW77Gqw+zTXrTUQDnXW2Ami2y2FJ4muVeJC6g/DAmwJ6uKm6xAdB04t89/1O/w1cDnyilFU=
- ユーザー3:岩田さん
vAgngrMHhC4Kh9JjG6BGWlO7c2bc31ZYXbifjBT9jkHXm4Cbv6CE020kvAeQ3tgxVzWopvz1RNKA9yEn/ctQ/e/nJMkjX8y0sErwJS6ZoL0YwI49s7GCRx5o7z0zzdonohiBvszW3L74+WZfrCo1XAdB04t89/1O/w1cDnyilFU=
- ユーザー4:小玉さん
bsaKYujjDwo/lJLvYxkobST32siTi2nPl+5ZELkN0TBimK7xAh8kL8eE7joclxflmjjYQ/J6xhpTfWYR0sVBlbD5gfS2KkQV3fS+0wt6E8VoBNJWUUqEwQuBMCGESYhuThx6wFm+j6C67WHmtmXqEwdB04t89/1O/w1cDnyilFU=
- ユーザー5:(講師用/高橋)
k2eh03mXVAcyGNUDVrDrHpAVFYh5N5qUCV7RzrjR1DOlr6HqXiZlkcbGM5pcsAv+KqJ1hRQAoF+9OOVIlKJMZBcAENzEsfJjhDOSPO3+ZYBld4oicp7KP5HHFG57bTOcAOnzxTETKA0jsROuhSq6+gdB04t89/1O/w1cDnyilFU=
- ユーザー6:(講師用/鈴木)
Bi6edPLT5tWySx5C88zIKEpPtHLUqzuv5vyFJhxJFH7koypNAEhBpZRKQU6tyBvoDW7hCbVDB0QDutOLdSPHWntdRqsn55ovgJfbaKF008Fo9TX5ToNRMwjKYkWbZgRIY/oWtwm0QD7ay413qYHMogdB04t89/1O/w1cDnyilFU=
- ユーザー7(人事用):
- ユーザー8(人事用):
---
## 課題1: やりたいことを決めてくれるBotをつくる
コピペする
```
=TEXTJOIN("、",TRUE,A:A)
```
### ゴール
「③ゴニョゴニョ〜」の部分をプログラミングしてつくる💪

### 1. 下準備: おまじないをしておく
#### 1-1. [新しいGoogleスプレッドシートを作成](https://docs.google.com/spreadsheets)->[ツール]->[スクリプトエディタ]
#### 1-2. 「ファイル」->「New」->「スクリプトファイル」から、新規ファイル「おまじない.gs」を作成する
#### 1-3. 元々書いてあるコードを消して、以下をコピーしておまじない.gsの一行目から貼り付ける
```:javascript
// CHANNEL_ACCESS_TOKENを設定
var CHANNEL_ACCESS_TOKEN = "";
// 作成したスプレッドシートのURLを入力する
var SPREAD_SHEET_URL = "";
var LINE_ENDPOINT = "https://api.line.me/v2/bot/message/reply";
// SpreadSheetの取得
var spreadSheet = SpreadsheetApp.openByUrl(SPREAD_SHEET_URL);
var sheet = spreadSheet.getSheets()[0];
// 変換に使う連想配列
var COL_STRING_TO_NUMBER = {"A": 0, "B": 1, "C": 2, "D": 3, "E": 4, "F": 5, "G": 6 };
/**
* LINEから情報を受け取るためのもの
*/
function doPost(e) {
// LINEから受け取ったデータを扱いやすい形式(JSON)に変換する
var json = JSON.parse(e.postData.contents);
// 返信するためのトークン(鍵みたいなもの)取得
var replyToken = json.events[0].replyToken;
// トークンがない場合は何もせずに処理を終了する
if (typeof replyToken === "undefined") {
return;
}
// 送られたLINEメッセージを取得
var lineMessage = json.events[0].message.text;
// メッセージを求める
var replyMessage = []
try {
replyMessage = [createReply(lineMessage)];
} catch (e) {
replyMessage = [e.message];
}
// メッセージを返信
var messages = replyMessage.map(function(v) {
return { type: "text", text: v };
});
UrlFetchApp.fetch(LINE_ENDPOINT, {
headers: {
"Content-Type": "application/json; charset=UTF-8",
Authorization: "Bearer " + CHANNEL_ACCESS_TOKEN
},
method: "post",
payload: JSON.stringify({
replyToken: replyToken,
messages: messages
})
});
return ContentService.createTextOutput(
JSON.stringify({ content: "post ok" })
).setMimeType(ContentService.MimeType.JSON);
}
// 列の中からランダムで項目を返す
function getRandomItem(col) {
var lastRow = sheet.getLastRow();
var lastCol = sheet.getLastColumn();
var sheetData = sheet.getSheetValues(1, 1, lastRow, lastCol);
var colNumber = COL_STRING_TO_NUMBER[col];
var columnVals = sheet.getRange(col + ":" + col).getValues();
var rowLength = columnVals.filter(String).length;
return sheetData[getRandomInt(rowLength)][colNumber];
}
// 乱数を求める
function getRandomInt(max) {
return Math.floor(Math.random() * Math.floor(max));
}
```
#### 1-4. おまじないの中にある「CHANNEL_ACCESS_TOKEN」を自分用のものに書き換える
#### 1-5. おまじないの中にある「SPREAD_SHEET_URL」を自分のスプレッドシートのURLに書き換える
### 2. やるべきことを返すプログラミングをする
#### 2-1. 「ファイル」->「New」->「スクリプトファイル」から、新規ファイル「メイン.gs」を作成する
#### 2-2. 元々書いてあるコードを消して、以下をコピーしてメイン.gsの一行目から貼り付ける
```:javascript
/**
* LINEに返すメッセージを作成する
* @param {string} lineMessage
*/
function createReply(lineMessage) {
// 返信する内容をいれる箱を用意
var replyMessage = "";
// スプレッドシートから取得
var todo = getRandomItem("A");
var list = sheet.getRange("D1").getValue()
if (lineMessage == "リスト") {
// リストと入力されたときの処理
replyMessage = "現在の登録内容は、こちら!\n" + list;
} else {
// リスト以外が入力されたときの処理
replyMessage = "「" + todo + "」をすべし!";
}
// LINEに返す
return replyMessage;
}
```
### 3. プログラムを更新する(今後コードを変更したら毎回更新する)
- 「公開」 => 「ウェブアプリケーションとして導入...」をクリック
- バージョンをNewにする
- 導入ボタンをクリック
- (注意)初回のみ権限を許可にする

- 「許可を確認」をクリック

- アカウントを選択

- 「詳細」をクリック

- xxxx(安全ではないページ)に移動

- 「許可」をクリック


### 4. LINEと会話してみる
- 「リスト」と入力してみる
- 「リスト」以外を入力してみる


---
## 課題2: やりたいことを増やしてみる
### ゴール
追加したやりたいことが返ってくる
### 1. スプレッドシートのA列にやりたいことを2つ追加して、LINEと会話してみる
例
- 旅行にいく
- 買い物に行く
### 2. LINEと会話してみる
- 「リスト」と入力してみる
- 「リスト」以外を入力してみる
---
## 課題3: 「リスト」と「教えて」以外の会話には反応させない
### ゴール
「リスト」と「教えて」以外の会話をしたら「リストまたは教えてと入力してください」と返ってくるようにする

### 1. 以下のヒントを参考にプログラムを書き換えてみる
ヒント1
```:javascript
/*
* AとBが同一かどうかの判定
*/
if (A == B) {
// 同一だったときの処理
}
```
```:javascript
/*
* 「もし○○ならば」という条件判定の書き方
*/
if (条件A) {
// 条件Aをみたしたときの処理
} else if (条件B) {
// 条件Aではないが、条件Bをみたしたときの処理
} else {
// それ以外の処理
}
```
ヒント2
```:javascript
/*
* 入力された文字が「リスト」だったら○○、「教えて」だったら××、それ以外は△△という判定の書き方
*/
if (lineMessage == "リスト") {
//リストと入力されたときの処理
} else if (lineMessage == "教えて") {
//教えてと入力されたときの処理
} else {
//それ以外が入力されたときの処理
}
```
答え
```:javascript
/**
* LINEに返すメッセージを作成する
* @param {string} lineMessage
*/
function createReply(lineMessage) {
// 返信する内容をいれる箱を用意
var replyMessage = "";
// スプレッドシートから取得
var todo = getRandomItem("A");
var list = sheet.getRange("D1").getValue()
if (lineMessage == "リスト") {
replyMessage = "現在の登録内容は、こちら!\n" + list;
} else if (lineMessage == "教えて") {
replyMessage = "「" + todo + "」をすべし!";
} else {
//それ以外が入力されたときの処理
replyMessage = "リストまたは教えてと入力してください"
}
// LINEに返す
return replyMessage;
}
```
## 課題4: やりたいことに「誰々」を追加してみる
### ゴール
B列の「誰々」とA列の「やりたいこと」がそれぞれランダムでつながって返ってくる
例
A | B
--- | ---
野球をしたい | 親
デートしたい | 友達
焼き肉を食べたい | 恋人
この状態で会話すると、
- 親とデートしたい
- 友達と野球をしたい
などが返ってくる

### 1. スプレッドシートのB列に「誰々」を入力する
例
- 友達
- 〇〇さん
- 彼女
- 彼氏
- トランプ大統領
### 2. 以下のヒントを参考にプログラムを書き換えてみる
ヒント
```:javascript
/*
* スプレッドシートの列の中からランダムで返す関数
*/
getRandomItem("列名");
// 例
var whois = getRandomItem("B");
// whoisにはB列の中からランダムで選ばれたものが入る
```
答え
```:javascript
/**
* LINEに返すメッセージを作成する
* @param {string} lineMessage
*/
function createReply(lineMessage) {
// 返信する内容をいれる箱を用意
var replyMessage = "";
// スプレッドシートから取得
var todo = getRandomItem("A");
var whois = getRandomItem("B"); //B列から「誰々」をランダムに取得
var list = sheet.getRange("D1").getValue()
if (lineMessage == "リスト") {
replyMessage = "現在の登録内容は、こちら!\n" + list;
} else if (lineMessage == "教えて") {
replyMessage = whois + "と" + todo; //誰々とを追加
} else {
//それ以外が入力されたときの処理
replyMessage = "リストまたは教えてと入力してください"
}
// LINEに返す
return replyMessage;
}
```
## 課題5: LINEから返ってくるやりたいことを英語に翻訳する

ヒント
```:javascript
/*
* 翻訳するための関数
*/
LanguageApp.translate("翻訳したい文章", "前の言語", "後の言語");
// 例
var english = LanguageApp.translate("りんご", "ja", "en");
// englishには"apple"が入る
```
答え
```:javascript
/**
* LINEに返すメッセージを作成する
* @param {string} lineMessage
*/
function createReply(lineMessage) {
// 返信する内容をいれる箱を用意
var replyMessage = "";
// スプレッドシートから取得
var todo = getRandomItem("A");
var whois = getRandomItem("B");
var list = sheet.getRange("D1").getValue()
if (lineMessage == "リスト") {
replyMessage = "現在の登録内容は、こちら!\n" + list;
} else if (lineMessage == "教えて") {
replyMessage = whois + "と" + todo;
replyMessage = LanguageApp.translate(replyMessage, "ja", "en"); //翻訳する処理を追加
} else {
//それ以外が入力されたときの処理
replyMessage = "リストまたは教えてと入力してください"
}
// LINEに返す
return replyMessage;
}
```
## 裏課題: 教えてもらった数をカウントする

ヒント
```:javascript
/*
* 値を書き込む
*/
sheet.getRange("c1").setValue("おはよう");
// c1におはようが書き込まれる
```