# 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におはようが書き込まれる ```