簡易的な入退室記録アプリ(SlackとGAS)

(一度書いたのですが、スマホから編集したらバグで変なことになりました。書き直します。)

新型感染症ウイルスの流行に伴って、研究室の在室記録の必要性が高まりました。

そこで日頃から研究室内連絡ツールであるSlackと、何かと利用しているGoogleのプラットフォームを使用して、

Slackで決まったコマンドを送信(発言)すると、名前と日時のログが取れる簡易的なシステムを組みました。

はじめに


 手順に関しては、プログラムやシステムなどに慣れていない後輩に共有するために書いたもので、内容については詳しくありません。不足する情報は適宜googleなどで検索していただければ幸いです。

要件、使用したツール、環境

【要件】
・何時に誰がいたかを後で知りたい
・どの人が同じ時間帯にいたかを知りたい
・入/退室の記録のトリガーが手短に、なるべく習慣化しやすい方法
【使用ツール】
・Slack API
・Google スプレッドシート
・Google Apps Scripts (GAS)
【環境】
・Slack アプリ(ブラウザ・デスクトップ)とアカウント
・googleアカウント(※スプレッドシートの編集権限を"誰でも"にします。Gsuiteのアカウントではうまくできませんでした。)

手順

GASコードの作成

①Googleドライブ>新規>その他>Google Apps Scriptを開く

②以下のコードを書く

function doPost(e) {
 var response = { text: e.parameter.text + '入室記録しました'};
 var name = e.parameter.text;
 createEvent(name);
 return ContentService.createTextOutput(JSON.stringify(response)).setMimeType(ContentService.MimeType.JSON);
}

function doGet(e) {
 doPost(e);
}

function createEvent(name) {
 const id = '<<ここはスプレッドシートのid>>';
 const spredsheet = SpreadsheetApp.openById(id);
 const sheet = spredsheet.getSheetByName('<<シート名>>');
 var lastRow = sheet.getLastRow();
 sheet.getRange(lastRow + 1,2).setValue(name);
 var d = new Date(); var mon = d.getMonth() + 1;
 var day = d.getDate();
 var h = d.getHours();
 var min = d.getMinutes();
 var now = mon + "/" + day + " " + ":" + min;
 sheet.getRange(lastRow + 1,3).setValue(now);
}
スプレッドシートのURLから、idはわかります。
https://docs.google.com/spreadsheets/d/XXXXXXXXXXXX/edit#gid=YYYYYYYY
XXXXXXXXXXXXの部分がスプレッドシートのid、YYYYYYYYの部分がシートのidです。

③公開>ウェブアプリケーションとして導入>
 ・project version は常にnewにする
 ・Execute the app as: Me(xxxx@gmail.com)
 ・who has access to the app: anyone even anonymous
 >Deploy
④場合によってはここでもう一度ログイン情報が聞かれる
 (googleの何か(スプレッドシートなど)を使用している場合、そっちの認証のため)
⑤URLをコピー
 このURLは、version変更しても変わりません


Slack APIの設定
①webからslack APIにログイン
 適宜、ワークスペースにログインする
②Slack APIで「Create New App」のボタンが出るようにする
 トップ画面なら右上のyour appを押すといける
③App NameとDevelopment slack workspaceを入力、選択 > create App
④Slash Commands > Create New Command

 command ->コマンド名
 Request URL -> さっきのGASのURL
 そのほかテキトーに。
 > save
⑥Building App for Slackにて、Add features and funvtionalityと、install your app to your workspaceにチェックがはいるようにする。



実際に運用してみて

試験運用した時のスプレッドシートです。(人名は隠してます)(スマホのスクショですみません)

スプレッドシートのマクロで人によってセルの背景色が変わるようにしています。
また、他のシートでマクロにより、人別にソートされるようにすると、自分のログが固まって見れます。
実際に運用してみた
 実は、当初はスプレッドシートではなく、googleカレンダーと連携することを考えていました。
 システム的には可能ですが、研究室の諸事情によりgoogleカレンダーではなくスプレッドシートにして、googleカレンダーには手動で入力という形になりました。
 そもそもgoogleカレンダーに手動入力での毎日ログ取りしていたのですが、毎日やるには結構めんどくさかったです。そこで、毎日研究室にきて必ず開くSlackへのコマンドによって記録しよう!となったのですが、最終的には、slackコマンドで毎日スプレッドシート上に記録し、ある程度の期間でgoogleカレンダーに入力し直すという方式で運用しました。(例:毎日slackコマンドでログ取り→週末にスプレッドシートを見ながら5日分まとめてgoogleカレンダーに入力)
 googleカレンダーでは、要件の

・どの人が同じ時間帯にいたかを知りたい

を満たすことができます。(参考:スクショ)

画像1



最後に


 研究室は実験・バイオ系で、私自信プログラムとかまだまだ初心者ですが、調べる時間込みで1日もかからず出来ました。それぐらいgoogle検索など、ネット上に十分な情報がありました。
 プログラムで自分の生活が便利・楽になることは素晴らしいことです。また、抵抗なくこういったシステムが作れるようなプラットフォームやAPIが充実・展開されている世の中に感謝です。
 ぜひ誰かのお役にたつ記事であればと思います。




この記事が気に入ったらサポートをしてみませんか?