---
# System prepended metadata

title: 2020/09/02インターンシップ

---

# 2020/09/02インターンシップ

## [説明資料](https://gitpitch.com/JapanComputerServicesInc/training-for-prospective-employees/20200902#/)

## QRコード情報
- ユーザー1:岩下さん
![](https://i.imgur.com/O1r8sC1.png)


- ユーザー2：
![](https://i.imgur.com/4taDDgT.png)


- ユーザー3：岩田さん
![](https://i.imgur.com/076fo6b.png)


- ユーザー4：小玉さん
![](https://i.imgur.com/ocutfe7.png)



- ユーザー5：(講師用/高橋)
![](https://i.imgur.com/k5NICdq.png)


- ユーザー6(講師用/鈴木)
![](https://i.imgur.com/OzAPmXq.png)


- ユーザー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)
```

### ゴール

「③ゴニョゴニョ〜」の部分をプログラミングしてつくる💪
![2](https://crowi.jcslabs.net/uploads/attachment/5d91998448525b4b3e33564d/4dce076993cf55a04fec408a9650e025.png)

### 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にする
- 導入ボタンをクリック
    - (注意)初回のみ権限を許可にする
![](https://i.imgur.com/7GLDUAc.png)
- 「許可を確認」をクリック
![](https://i.imgur.com/PuRzoI7.png)
- アカウントを選択
![](https://i.imgur.com/jtlriej.png)
- 「詳細」をクリック
![](https://i.imgur.com/EBdEE1g.png)
- xxxx(安全ではないページ)に移動
![](https://i.imgur.com/ZxGSWbC.png)
- 「許可」をクリック
![](https://i.imgur.com/3TyeGgF.png)
![](https://i.imgur.com/6lMuv6k.png)


### 4. LINEと会話してみる

- 「リスト」と入力してみる
- 「リスト」以外を入力してみる
![IMG_5EBCDBD0AF2A-1.jpeg](https://crowi.jcslabs.net/uploads/attachment/5d92fd2f48525b4b3e33565c/63738ea8d42e6a8385a72e2ac8ba9757.jpeg)
![IMG_06CC63FC06FF-1.jpeg](https://crowi.jcslabs.net/uploads/attachment/5d92fd2f48525b4b3e33565c/7b48f9920921f3b37a794ab575d5b84a.jpeg)

---

## 課題2： やりたいことを増やしてみる

### ゴール

追加したやりたいことが返ってくる

### 1.  スプレッドシートのA列にやりたいことを2つ追加して、LINEと会話してみる

例
- 旅行にいく
- 買い物に行く

### 2. LINEと会話してみる

- 「リスト」と入力してみる
- 「リスト」以外を入力してみる

---

## 課題3: 「リスト」と「教えて」以外の会話には反応させない

### ゴール

「リスト」と「教えて」以外の会話をしたら「リストまたは教えてと入力してください」と返ってくるようにする

![IMG_2865.PNG](https://crowi.jcslabs.net/uploads/attachment/5d92fd2f48525b4b3e33565c/06a86f118fe82176fa21fbffb363b95e.PNG)

### 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
--- | ---
野球をしたい | 親
デートしたい | 友達
焼き肉を食べたい | 恋人

この状態で会話すると、

- 親とデートしたい
- 友達と野球をしたい

などが返ってくる
![](https://crowi.jcslabs.net/uploads/attachment/5d92fd2f48525b4b3e33565c/c0c9a0049a1302159969dccf97c809d9.jpeg)

### 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から返ってくるやりたいことを英語に翻訳する

![](https://crowi.jcslabs.net/uploads/attachment/5d92fd2f48525b4b3e33565c/52e9ad05611fe831e97dd17409100369.PNG)

ヒント

```: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;
}
```


## 裏課題: 教えてもらった数をカウントする
![](https://crowi.jcslabs.net/uploads/attachment/5e39224048525b4b3e3358c3/99cd17b399509566bd4ab06a14208c2b.png)
ヒント

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