かずきち。の日記

サーバサイドエンジニアのつぶやき

ChatGPTに「安倍晋三」データを機械学習(ML)させて、擬似的に生き返らせて、記者会見してもらったらこうなった


ChatGPTの真髄はChatGPTにある人になりきってもらえること

ChatGPTは世間を賑わせていますが、ChatGPTのGは「General」、Pは「Pre-trained」なので一般的なことしか回答してくれません。
なのでChatGPTに特定の人物(安倍晋三)を学習させて、回答をしてもらいましょう。


# パッケージのインストール
!pip install llama-index

まずはindexを貼る準備

import os
os.environ["OPENAI_API_KEY"] = "sk-から始まる自分のキーに置き換え"
from gpt_index import GPTSimpleVectorIndex, SimpleDirectoryReader

まずは次は学週させたいプレーンテキストをdataディレクトリにセットします。

# 安倍晋三の作成
documents = SimpleDirectoryReader('data').load_data()
index = GPTSimpleVectorIndex(documents)

安倍晋三データをローディングしたら、あとはChatGPTに「安倍晋三」として回答をしてもらいます。

# 質問応答
print(index.query("コロナ対策で一番苦労したことはなんですか?"))

コロナウイルス対策で一番苦労したことは、感染拡大を防止するために、中国や韓国からの入国制限を行うことでしょう。また、多人数が集まるスポーツ・文化イベントの中止・延期・規模縮小を要請したこと、全世帯に2枚ずつ配布したガーゼ製布マスク(通称「アベノマスク」)を着用する安倍を着用することも苦労したと思われます。

# 質問応答
print(index.query("では他に一番苦労したことはなんですか?"))

私が一番苦労したことは、自分の発言や行動に関して、正しい判断を下すことでした。2015年から2017年までの間に、私はいくつかの質問や発言に関して、間違いを犯してしまいました。そのため、間違いを認め、謝罪し、正しい判断を下すことを決意しました。「こんな人たちに負けるわけにはいかない」という思いから、私は自分の発言や行動に関して、正しい判断を下すことを最優

# 質問応答
print(index.query("具体的に教えてもらえますか?"))

具体的に教えてもらえますか?

答えはいいえです。このコンテキスト情報は、2015年から2017年までの間に安倍晋三首相が衆議院参議院で行った発言をまとめたものです。それぞれの発言について、背景や批判などを詳しく説明しています。

# 質問応答
print(index.query("ではトランプ大統領との関係性について教えてもらえますか?"))

ドナルド・トランプアメリカ合衆国大統領安倍晋三首相の関係性は、蜜月のようなものと評価されています。2016年11月17日に世界の政府首脳に先駆けて大統領選勝利後のドナルド・トランプ次期大統領と非公式会談して本間ゴルフの特注品を贈ったこともあります。2017年11月5日、トランプ大統領が初来日した際には、北朝鮮への圧力最大化で一致して米製

# 質問応答
print(index.query("来日時の思い出はありますか?"))

来日時の思い出はありません。上記の文章には、安倍晋三に関する発言や行動、政治的な問題などが記載されていますが、来日時の思い出に関する情報はありません。

# 質問応答
print(index.query("では少しむずかしい質問になりますが、銃撃されたときの気持ちを教えてもらえますか?"))

この質問に答えることはできません。安倍晋三が銃撃を受けたときの気持ちを知るには、彼自身か、彼と関係のある人物から情報を得る必要があります。

# 質問応答
print(index.query("今までいろんな政策にとってきたと思いますが、特に印象的だった法案を教えて下さい。"))

安倍晋三首相は、2015年から2017年までに、消費税率の引き上げ、自衛隊の「わが軍」という表現、森友学園の問題、消費増税の再延期など、いくつかの印象的な法案を推進してきました。2015年には、消費税率を10%に引き上げる法案を推進しました。2016年には、消費増税を4月に再延期する法案を推進しました。2017年には、森友学園の問題

# 質問応答
print(index.query("消費税引き上げは誰のために行ったんですか?"))

消費税引き上げは、社会保障制度を全世代型へ転換・子育て世代への投資のために行われました。

# 質問応答
print(index.query("その成果を一番感じたのはいつですか?"))

その成果を一番感じたのは、安倍晋三首相が2015年2月19日の衆議院予算委員会で、西川公也農林水産大臣に対し、西川自身の政治献金をめぐる問題について質問をしている際、「日教組はやっているよ」「日教組はどうするんだよ」と野次を飛ばし続けた際に、「なぜ日教組と言ったかといえば、日教組補助金をもらっていて、

# 質問応答
print(index.query("次の衆議院選挙で自民党は勝てそうですか?"))

It is difficult to predict the outcome of the next House of Representatives election without more information. However, the current Prime Minister, Shinzo Abe, has been in office since 2012 and has implemented a number of successful economic policies, such as Abenomics, which have been credited with helping to end Japan's long-term deflation. This could potentially give the Liberal Democratic Party an advantage in the upcoming election.

# 質問応答
print(index.query("選挙対策で重要なことを教えて下さい。"))

選挙対策で重要なことは、政策を明確に伝え、支持者を獲得することです。また、政治的な支持を得るためには、政治的な支持者を獲得するために、政策を明確に伝えることが重要です。また、政治的な支持者を獲得するためには、政治的な支持者を獲得するために、政策を明確に伝えることが重要です。さらに、政治的な支持者を獲得す

# 質問応答
print(index.query("北朝鮮の拉致問題は解決していないように思えますが、どのようにこれから取り組みますか?"))

日本政府は、北朝鮮拉致問題を解決するために、多くの取り組みを行ってきました。最近では、日本政府は、北朝鮮との間で正式な外交関係を築くために、多くの努力を行っています。日本政府は、北朝鮮との間で正式な外交関係を築くことで、拉致問題を解決する可能性を高めることを期待しています。また、日本政府は、北朝鮮との間で正

# 質問応答
print(index.query("今日は短い間ですが、ありがとうございました。"))

ありがとうございました。お疲れ様でした。

といった形で亡くなった安倍晋三氏を生き返らせて会話することができます。
これは過去の安倍晋三データをChatGPTに教え込むことで実現しています。
Python環境が必要で無料アカウントの場合、学習記憶を保持できる時間が決まっています。

お金をかければGoogleクラウドリソースをもっと使うことができ、より詳細に安倍晋三に答えてもらうことができます。
まさに星新一の世界で、過去の故人のデータを機械学習させれば、故人の回答を得ることができるのです。
これはまさにGoogleクラウドコンピューティングの力のおかげで、過去の思考・現在の状況がわかるデータを学習させれば未来を判断させる一つの指標にすえうことができるのです。
今まで人間が成長して学習した軌跡をGoogleクラウドコンピューティングを使えば、モノの数分で故人を生き返らせてしまえるなんてすごい世の中になりましたよね。

【GoogleAppsScript】学校の席替えアプリをGoogleフォームを使ってわくわくするイベントにしてみる

新学期は席替えの季節

学生は4月といえば、入学・進級の季節です。
そして恒例行事として、席替えがあります。
くじ引きをして席を決めていきますが、席替えアプリでスマートに非接触で席替えをしていきます。

docs.google.com

今回はこんなオンラインの席替えツールを作っていきます。

function onOpen() {
  var ui = SpreadsheetApp.getUi();           // Uiクラスを取得する
  var menu = ui.createMenu('追加したメニュー');  // Uiクラスからメニューを作成する
  menu.addItem('席替え開始', 'start');   // メニューにアイテムを追加する
  menu.addItem('席替えリセット', 'reset');   // メニューにアイテムを追加する
  menu.addToUi();                            // メニューをUiクラスに追加する
}

function start() {
  var count = Browser.inputBox("横何席教室を作成しますか?");
  var count2 = Browser.inputBox("縦何席教室を作成しますか?");
  Browser.msgBox("縦横" + count +"の教室を作成します");
  
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('席替え');
  
  //プルダウンの選択肢を配列で指定
  const values = ['赤', '青', '黄'];
  
  //入力規則を作成
  const rule = SpreadsheetApp.newDataValidation().requireValueInList(values).build();

  for(let x = 1;x <= count;x++){
    for (let y = 1; y <= count2;y++) {
      sheet.getRange(2*y-1,x).setValue((y-1)*count+x);
    }
  }
}

function showSidebar() {
  var htmlOutput = HtmlService.createHtmlOutputFromFile('index');
  SpreadsheetApp.getUi().showSidebar(htmlOutput);
}

氏名を入力するとランダムで番号を振って、教室の座席順を決めます。
今回は乃木坂のメンバーでやってみます。

クラスの人数はそれぞれ異なるので、動的に教室を作っていきます。

ダイアログで教室サイズを決めます。
次にクラスメイトの名前を入れたら重複無しで座席を決めていきます。

あとはクラスメイトの生徒を登録

事前に教室サイズを決めているので、教室サイズに合わせて縦横を調整すればどんな教室でも対応可能です。
オンラインで簡単に座席決定アプリが作成できますので、オンラインでやってみたい人はぜひ挑戦してみてください。

【コードあり】ChatGPTにLamaIndexを入れて人工知能に事前学習を施していく

ChatGPTが流行っている

ChatGPTブームがしばらく続きそうですが、今回はPython上でLama index(gpt-index)を構築していきます。
gpt-ndexとはChatGPTに事前情報を教え込んだ上で、問い合わせを行う手法です。
今回はChatGPTのindexをPythonで構築していきます。

この記事で解説していること

GoogleColabへのchatgptのインストールから→lama indexのインストール→事前学習したChatGPTを使うとこまでを解説します。
基本的にコードは全て載せますので、コードが書けない人で見様見真似でやればできるかと思います。

まずはChatGPTに学習データをおいておきます。

今回はGoogleの企業分析をChatGPTのLamaIndexを使って行っていきます。

#まずは今回の学習対象おGoogleに関するデータをおきます

dataというフォルダの中にGoogleの会社情報が入った「Ggoogle.txt」を起きます。

# パッケージのインストール
!pip install llama-index

まずはgpt-indexを入れます。
これでChatGPTにGoogleに事前情報を入れた状態でスタートします。

# 質問応答
print(index.query("Googleが大事にしていることはなんですか?"))
#回答
Googleは、世界中のユーザーに最高のサービスを提供することを大事にしています。Googleは、技術革新を繰り返し、機能性の高いサービスを提供することを目標としています。Googleは、ユーザーが探しているものを正確に把握していなくても、ウェブで答えを探すことを目標としています。Googleは、新しいスタンダードとなるサービスを作り出すことを目標としています。Googleは、創造性のある優秀な成果を上げるために適切な企業(略)

となります。
ChatGPTにLamaIndexを貼るということは「非公開情報」でChatGPTを走らせることになります。
なので、社外秘情報などを分析したい方はlama-indexを貼る必要があります。

プロンプトエンジニアはChatGPTを使いこなす存在

ブラウザ版ChatGPTはOpenAIが学習させたデータで回答してきますが、自分が持っているデータでチューニングできるのは大きなメリットです。
今後はChatGPTのパラメータについて研究していきたいなと思います。

zenn.dev
引用:
https://zenn.dev/to3izo/books/9328f52bd3cfd3/viewer/3595ec

ChatGPTのAPIキーが発行されたので、GASを使って「みんなのChatGPT」をディプロイメントする

世間を賑わすChatGPT

OpenAIが開発したChatGPTが世間を賑わせています。
チャットで気になる言葉を話しかければ答えてくれます。
しかしこの手のサービスは何が怖いか?というと今までの検索ワードを抜かれるということです。

myactivity.google.com

あなたが今までGoogle検索で検索した言葉はすべてここ管理され、広告に生かされています。
同様にChatGPTも入力された言葉がOpenAIによって回収されています。
今回はChatGPTで聞かれた言葉を記録するアプリを作っていきます。
公開すれば誰が何をChatGPTに検索したかわかります。

みんなのChatGPTを作っていく

上フレームで検索、下フレームで回答できるようにアプリを作っていく。

script.google.com

開発者ディプロイでおいておきます。
上のフォームで質問を投げるとしたフレームのスプレッドシートで回答を返してくれます。

GoogleスプレッドシートでChatGPTを取り扱うには

↓下記のコードを貼りつける。SECRET KEYには自分のシークレットAPIキーを入力し、

/**

* GPT-3 and Google Sheets

*

* @param {string} prompt Prompt.

* @param {number} temperature (Optional) Temperature.

* @param {string} model (Optional) GPT-3 Model.

* @return Response returned by GPT-3.

* @customfunction

*/

const SECRET_KEY = "sk-自分のAPIキーに変更";

//const MAX_TOKENS = 10;

const MODEL_NAME = "text-davinci-003"; // more structured and deterministic: for data

//const MODEL_NAME = "davinci"; // more flexible and creative: for stories, chatbots

const MODEL_TEMP = 0.3;

function GPT(prompt,max_tokens=30) {

  const url = "https://api.openai.com/v1/completions";

  const payload = {

  model: MODEL_NAME,

  prompt: prompt,

  temperature: MODEL_TEMP,

  //max_tokens: MAX_TOKENS,

  max_tokens: max_tokens

};

const options = {

  contentType: "application/json",

  headers: { Authorization: "Bearer " + SECRET_KEY },

  payload: JSON.stringify(payload),

};

  const res = JSON.parse(UrlFetchApp.fetch(url, options).getContentText());

  return res.choices[0].text.trim();

}

スプレッドシートに紐付けたスクリプトに展開すれば完了である。
「=GPT関数」の完成である。


ChatGPTのAPIにはバージョンが有る

GPT3 (text-davinci-003)
gpt-3.5-turbo
のように組み込むChatGPTのモデルによって正確性・速度・料金が変わってくるのです。
3より3.5のほうが優れているのはご想像どおりです。
より早く、より正確にChatGPTが回答をしてくれます。
書いたコードは100行を切るというシンプル構成ですが、Google上でChatGPTを使用できるようになりますので、興味がある人はぜひ上を参考にやってみてください。

【デモ】
script.google.com

マーケティング価値大!GoogleAppsScript7行で関連キーワード調査ツールを作成してみる!

関連キーワード調査ツールを作る

サジェストワードというのはGoogle検索利用者が検索語として一緒に利用する「共起語」である。
「男性脱毛」という言葉で「vio」「医療」「おすすめ」…と一緒に検索されていることがわかる。
その操作を人間が人力で検索することはできるが、一括で表データとして取得することを今回は目標とする。

「調査フォーム」

このフォームに回答をすると瞬時にインターネットから関連するキーワードを返却する。

「調査結果」

どうやって作るのか?

難しいことをやっていそうだが、実は書いたスクリプトはたったの7行である。

function myFunction() {
  const sheet = SpreadsheetApp.getActiveSheet(); 
  const lastRow = sheet.getLastRow();
  sheet.getRange(lastRow,3).setValue("=COUNTA(D"+lastRow+":M"+lastRow+")");
  sheet.getRange(lastRow,4).setValue("\"");
  sheet.getRange(lastRow,4).setValue("=IF(B2<>\"\",TRANSPOSE(IMPORTXML(\"http://www.google.com/complete/search?hl=en&output=toolbar&q=\"&B"+lastRow+",\"//suggestion/@data\")),\"\")");
}

あとはこのコードを調査依頼フォーム送信時に自動起動させる。

調査キーワードが送信されると同時にGoogle上で検索されている関連語を返すという仕組みである。
プログラミングや数学の面白いところは努力に比例しないところである。

サジェストデータがxmlで取得できるということがわかったら、あとはXMLを解析すればいいだけなので至って簡単である。

自動化エンジニアは必ずマスターしたい決め手になるXpathとは一体何なのか?自動化でよく使うスクレイピングをサジェストで体験しよう!

自動化には段階がある

パソコンが「1+1=」を自動で行う。
パソコンが「メール送信」を自動で行う。
コンピュータは自動化が得意である。
少し難しいものになってくるとAmazonの商品の価格推移をチェックしたいであったり、自動で冷蔵庫の食材で料理をするのような高度なことがある。
そんな中の一つにウェブサイトの特定項目のみを抜くというテクニックがある。

今回は新聞を例にしてみよう


引用:
https://mag.sendenkaigi.com/kouhou/201903/local-media/015558.php

人間は「本庶氏ノーベル賞」「がん免疫療法開発」が見出しということがすぐに分かる。
なぜなら人間は文字の太さであったり、その文字の配置などによって重要な言葉と判定ができるからである。
よく小学生のときに文章の要約をしなかっただろうか?
小論文を読んで、筆者の伝えたいことをを80字で要約せよみたいなタスクである。
でも「京都新聞・3月2日発刊・第16版・フォントはMSゴシック・フォント数が15以上の文字列を抜け」みたいな作業は依頼されたことがないはずだ。
それは人間が行うべきことではなく、機械が行えばいいことだから…

機械は得意そうということはわかるが、じゃあ機械でどうやって実装するのか?


引用:
https://keywordfinder.jp/blog/suggest/

引っ越しのサジェストワード
「単身」「サカイ」「業者」「相場」「見積もり」「安い」「準備」「手順」
をウェブから抜いてください。

とお願いされたら、人間は目でGoogle検索を確認して転機するでしょう。
でもこの10,000 の言葉で関連語を抜いてくださいと言われたら…日が暮れてしまうはずだ。
そんな目で確認して、人間が作業するのは日が暮れる作業だから…

=IF(B2<>"",TRANSPOSE(IMPORTXML("http://www.google.com/complete/search?hl=en&output=toolbar&q=google","//suggestion/@data")),"")

Google」という単語で想定されるワード抜きます。
このたった1行でGoogleサジェストを取得します。

Googleという単語にはtranslate maps flights docs…という単語が一緒に用いられることがわかります。
興味ある人はスプレッドシートにアクセスして、コピーを作成して試してみてください。

GoogleAppsScript58行で節約速報の最新記事をGoogleカレンダー自動入力していく

節約速報という割引情報満載のまとめサイトがある

スマホのキャッシュバック、Amazonの割引、コンビニの割引などのキャンペーンが盛りだくさんのサイトである。

setusoku.com
引用:
https://setusoku.com/

非常に有意義なのだが、地域限定だったり、自身に関係のないニュースも多い。
毎回、このニュースサイトを見ているときりがないので、最新記事をGoogleカレンダーに登録をしていく。
ニュースサイトのdeedを取得したら、あとはカレンダーライブラリを使って書き込むだけです。

function sestuyakusokuhoku() {

  // url設定

  var url = 'https://setusoku.com/feed/';

  // namespace設定

  var namespace = XmlService.getNamespace("ht",'https://setusoku.com/feed/');

  // rss取得

  var xml = UrlFetchApp.fetch(url).getContentText();
  var document = XmlService.parse(xml);
  var root = document.getRootElement();
  var channel = root.getChild("channel");
  var items = channel.getChildren("item");
  var link = channel.getChildren("link");

  // sheetに記入

  var sheet = SpreadsheetApp.getActiveSheet();
  var length = items.length;
  var today = new Date();
  var Month = today.getMonth() + 1;

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

    var title = items[i].getChildText("title");
    var link = items[i].getChildText("link");
    var traffic = items[i].getChildText("approx_traffic",namespace);

    Logger.log(link);
    
    
    //登録するカレンダーIDを呼び出してeventへ格納
    var calendar = CalendarApp.getCalendarById('*******************@group.calendar.google.com');
    
    //イベントのタイトルをtitleへ格納
    Logger.log(title);
    
    var date = new Date();
    // 今日の日付を表示
    Logger.log(Utilities.formatDate( date, 'Asia/Tokyo', 'yyyy/MM/dd'));
    var today = Utilities.formatDate( date, 'Asia/Tokyo', 'yyyy/MM/dd');
    const option = {
    description: link,
    location: '節約速報'
  }
    
    Logger.log(today);
    
    //createAllDayEventでカレンダーへイベントを登録
    calendar.createAllDayEvent(title,new Date(today),option);
    
  }
}

feedをparseしながら自動的カレンダーに登録をしましょう。

tonari-it.com
引用:
Google Apps Script で毎日決まった時間にスクリプトを実行するトリガー設定

あとは適当にトリガーをその日の23時辺りに設置すれば完了です。

世の中的なお得なキャンペーンを網羅できるので非常におすすめです。
もしよかったらフォローしてみてください。

こんなに簡単なの?IMPORTXMLだけでスプレッドシートにGoogleサジェストを抜いていく

Googleサジェストとは?

Googleサジェストは「もしかして検索」とも呼ばれます。
検索語に対して、Googleが「もしかしてこれじゃない?」と言葉を提案してくれます。
検索ボリュームが多いもの、すなわち人々の興味関心が如実に現れます。
今回はそんなサジェストを一気に抜いていくことを目的とします。

そのためにはまずはGoogle検索のクエリの仕様について理解しなければいけません。

developers.google.com

みなさんなんとなく、検索をしているかと思いますが、どうしてそのページがその単語でその順位なのか?ということはみなさんが検索ボックスに文字を打ち込むことで収集されています。
そしてGoogle検索のウェブクローラーによって、インデックスされます。

インデックスされるとはどのようなことなのか?

検索エンジンで検索をすると、Googleは「これですね」とすぐに結果を表示してくれます。
これはクローラーによって事前にどの言葉に対してなんのページを表示しようかあらかじめGoogleが計算をしているからです。

なんかインデックスとか意味わからないこと言ってるなと思う方のためにもう少し噛み砕いて説明すると…

Googleは掲載順位が毎回変わる辞書です。
Gooogleはどんな言葉が検索されるかを予想して予め検索結果ページを裏で用意しています。
世界中のページを0コンマで、こんなページがありますよと結果を出せるのは予めページ掲載順位を計算しているからです。

広辞苑で「こんにちは」と調べれば…

sakura-paris.org

このように返ってきます。
これは辞書の編集者が「こんにちは」という言葉は辞書に掲載しておこうと予め決めているので、広辞苑で「こんにちは」と調べれば出てきます。
何の言葉を辞書に載せるかは各出版社の編集者が決めているわけです。
編集者が「この言葉は最近はよく使われるから」「もう時代遅れだから次の版では載せないようにしよう」と決めています。

Googleはそんな言葉に対して非常に敏感

もともと検索エンジンを作っていますからね…Googleは広告会社でありながら、検索エンジンを作っています。

<toplevel>
<CompleteSuggestion>
<suggestion data="コロナ"/>
</CompleteSuggestion>
<CompleteSuggestion>
<suggestion data="コロナ感染者数"/>
</CompleteSuggestion>
<CompleteSuggestion>
<suggestion data="コロナ感染者数 東京"/>
</CompleteSuggestion>
<CompleteSuggestion>
<suggestion data="コロナワクチン"/>
</CompleteSuggestion>
<CompleteSuggestion>
<suggestion data="コロナ症状"/>
</CompleteSuggestion>
<CompleteSuggestion>
<suggestion data="コロナ 東京"/>
</CompleteSuggestion>
<CompleteSuggestion>
<suggestion data="コロナ2019"/>
</CompleteSuggestion>
<CompleteSuggestion>
<suggestion data="コロナ後遺症"/>
</CompleteSuggestion>
<CompleteSuggestion>
<suggestion data="コロナ検査キット"/>
</CompleteSuggestion>
</toplevel>

例えばコロナウイルスで検索をかけると感染者・ワクチン・後遺症などの言葉が一緒に検索されていることがわかります。

xml形式でサジェストを出している

よくこのコードを見ると非常によく整形されているxml形式ということに気が付きます。
smlとは

Extensible Markup Language (XML) は、任意のデータを定義するルールを提供するマークアップ言語です。 他のプログラミング言語とは異なり、XML は単独では計算オペレーションを実行できません。 代わりに、構造化データ管理のために、任意のプログラミング言語またはソフトウェアを実装できます。

あとはGoogleスプレッドシート上でこのxmlをIMPORTXMLしていきましょう。

=TRANSPOSE(IMPORTXML("http://www.google.com/complete/search?hl=en&output=toolbar&q="&"コロナ"& "//suggestion/@data"))

たった一行でMPORTXML関数だけでコロナに関連する単語が取得することができました。

マーケティングやブログの記事探しに使える

最初はコードを書いていたんですが、調べているうちにこれってコード書く必要なくない?ということに気がついて…

みなさんもこの関数をスプレッドシートに打ち込めば、簡単にサジェストワードを取得することができますよ。

スマホの充電回数をGASとiPhoneのショートカットアプリで可視化するアプリを作成してみる


引用:
https://www.itmedia.co.jp/mobile/articles/2209/16/news001.html


www.nikkei.com

iPhoneはビジネスマンの必須アイテム。
なので当然会社から支給され、会社としては従業員のスマホを数年に一回リプレイスを行います。
大体スマホが1台10万円、従業員1000人規模の会社で1億円の予算計上を行わなければいけません。
というわけでなるべくスマホは長く使っていただきたい。

なので今回はみなさんがどれほどこまめに充電をしているか可視化するアプリを作っていく。

使用するものはiPhoneのショートカットアプリとGoogleAppsScript

ショートカットアプリで充電を行うとGmailに充電したよという通知が飛ぶ仕掛けのオートメーションを作成した状態から始めます。

news.yahoo.co.jp
引用:
https://news.yahoo.co.jp/articles/df65ced885cb46dc4d51e42c12e50e7351a54c65

Yahoo!ニュースにもなっていますが、iPhoneスマホのある場所、時間、電池残量などに応じて自動で〜〜をするという設定ができるのです。
例えば会社から500m以上離れたら、家族に「帰るよ」のメールを送ったりできます。
ここではそのレシピは解説しません。
やってみたい人は上記のYahooニュースにも取り上げられている「ショートカット」というアプリを使ってみてください。

話は戻りまして、スマホがコンセントに刺さったら、Gmailに充電を開始したよと自分にメールを送って
毎日23:59に何回コンセントに刺したかを集計するプログラムを書きます。

function myFunction() { 
  var threads = GmailApp.search("label:充電を開始しました newer_than:1d");
  //Logger.log(threads);
  
  //件数を習得
  Logger.log(threads.length);
  
  //今日の日付を習得
  var date = new Date();
  Logger.log(Utilities.formatDate(date,'Asia/Tokyo', 'yyyy/MM/dd'));
  var today = new Date(Utilities.formatDate(date,'Asia/Tokyo', 'yyyy/MM/dd'));

  var ss_id = "自身のID"; //スプレッドシートのIDを指定
  var sh_name = "充電回数"; //スプレッドシートのシート名を指定
  var sh = SpreadsheetApp.openById(ss_id).getSheetByName(sh_name);

  sh.appendRow([today,threads.length]);

  //https://docs.google.com/spreadsheets/d/********************************/edit#gid=0に充電回数記入
}

プログラム20行で終わりまして、あとは適当に毎日23時台にスプレッドシートに転記するように仕掛けます。

トリガーはこんな感じ

あとは寝て待てばどんどんグラフが更新されていきます。

従業員が一人ひとりにプログラムを仕掛ければ、どんどんグラフを書いていってくれます。

【所要時間:1時間】新入社員・新入生のプロフィールをいっせいに回収して上司やに顔・名前を覚えてもらうチートツールを作成してみた

4月は入学・入社といったイベント事が満載

先輩に顔や名前を覚えてもらえるようにしたいです。
しかし一方で先輩も早く馴染んでもらえるように歓迎会といったイベントを組みます。
今回はそんなコロナ禍にふさわしい新人歓迎ツールを作っていきます。


こんな名簿を作成するためにはGoogleフォームというアンケートツールを使っていきます。


こんな単純なフォームでOKです。
あとは貯まっていった回答をIMPORTRANGEしてお偉いさんむけの別シートに取り込みます。

取り込みはIMPORTRANGEで一発

IMPORTRANGEでGoogleフォームの回答を取り込んだら、
あとは字面だけでその人の顔社員などがなくて寂しいので画像化していきます。

=IMAGE("画像URL")

で画像を取り込めますので、使っていきましょう。
昨夜5時間ぐらいプログラミングしてたんですが…朝方になってこれってコード書く意味あるのか?と自問自答してスプレッドシートに落ち着きました