【GAS×チャットワーク】作業時間を記録するスクリプトを作成しました

GoogleAppsScript

作業を行う際は、その作業内容と、作業にかかった時間を記録すると、何かと利点があります。しかし、私の場合、それをやろうと思っても適切なツールが見つかりませんでした。ならば自分で作ってみよう!と思いたち、作ってみた!というのが今回の内容です。

作業時間と内容を記録するメリット

初めに、作業時間とその内容を記録するメリットをご紹介します。

作業内容が明確になる

まず、作業内容が明確になるというメリットが挙げられます。

いざなにか作業をしようと思って時間を作ってみても、何から手を付けていけばいいだろう、と悩むことはありませんか?また、実際に作業に着手したあとで、作業の優先順位を間違えていた、という場合がありませんか?

こういったことは、事前にこれから作業する内容を記録しておくことで、防ぐことができます。記録することで、それが作業内容の把握につながるからです。

 

進捗状況が可視化される

作業した内容を記録しておくことで、進捗状況をしっかりと把握することができます。

これだけの時間で、どれだけの作業が進んだのかを把握しておけば、これらかの作業計画を立てる際などにも役立ちます。この作業にこれだけの時間がかかるなら、ここのスケジュールに余裕を持っておこう、なんてこともできちゃいます。

 

集中できる

次に、集中できるというメリットがあります。

作業時間の開始時間を記録することで、「これから作業を始める!」というモードに気持ちを切り替えることができます。また、作業の時間を記録することになるので、その間は別の作業をしたいという誘惑にも打つ勝ちやすくなります。

つまり、必然的に目の前の作業に集中しやすい環境ができるのですね。

 

チャットワークとGASを使って記録しよう

なぜチャットワークとGoogleAppsScript?

なぜチャットワークを使用するのでしょうか。別にチャットワークでなくても、メールでもLINEでも好きなツールを使えばいいですし、もっといえばスプレッドシートに直接書き込むような形式でもいいわけです。なのになぜチャットワークにこだわるのか。

簡単にいえば以下の2点のメリット、つまり

  • UIが馴染みやすい
  • Googleスプレッドシートと連携しやすい

です。

私も一時期スプレッドシートを記録用として使用していました。作業の内容や時間を記録するという意味では、スプレッドシートが最も優れています。しかし、入力するのがなんだか面倒くさい。これは完全に個人の好みになるかと思うのですが、私にはスプレッドシートに直接入力するというのは馴染みませんでした。

しかし、チャットワークだと、なんだか馴染んだのですね。個人的には、タイムカードを押すかのようなイメージで使うことができました。繰り返すようですが、ここは完全な好みの問題になるのかもしれません。

ただ、Googleスプレッドシートと連携しやすい、というメリットはあります。チャットワークには、GoogleAppsScriptで利用しやすいように、ライブラリが作成されています。これを利用することで、少ないコードで簡潔に処理を記述することができます。GoogleAppsScriptにはたくさんの優れた機能がありますので、GoogleAppsScriptと連携できる(しやすい)というのは、大きなメリットとなります。

 

スクリプトの紹介

どんな処理を行うのか

では、いよいよスクリプトなどの紹介をしていきたいと思います。それに際して、どんな処理を行うのかを簡単に紹介しておきます。処理の流れとしては以下のようになります。

  1. チャットワークで「開始」・「終了」を含むメッセージを送信
  2. Webhookを利用してGoogleAppsScript側にPOSTリクエスト
  3. GoogleAppsScript側でメッセージを読み取り、それをスプレッドシートに記入

ポイントは、「Webhook」かと思います。Webhookというのは、何らかのイベントが発生した際に、指定したURLにPOSTリクエストする仕組みのことです。今回の場合でいうと、何らかのイベント:チャットワークでのメッセージ送信、指定したURLというのはGoogleAppsScriptで作成するWebアプリのURLです。つまり、チャットワークでメッセージを送信した際に、GoogleAppsScript側にPOSTリクエストを送信するための仕組みがWebhookなのです

ざっとで構いませんので、どんな処理を行うのかを理解しておきましょう。

 

まずはGoogleAppsScriptでの処理から!

まずは、GoogleAppsScript側の処理から記述していきます。新しくGoogleスプレッドシートを作成し、以下のように項目行を入力してください。シート名は、わかりやすいように「ログ」に変更しておいてください。

そして、「ツール」→「スクリプトエディタ」を開いてください。まずは、POSTリクエストされた際の処理を、GoogleAppsScriptで記述していきます。以下を記入してください。

 

2つのfunctionがありますね。doPost関数とtransTime関数です。このうち、

  • doPost → POSTリクエストがあった際に発生する関数
  • transTime → UNIX時間を変換する関数

です。コードを簡単に解説しますと、

の箇所では、POSTされたデータを読み取っています。

  • POSTされたデータを取得し、「e.postData.contents」
  • それをJavaScriptで扱いやすい形式に変換 「var json = JSON.parse(e.postData.contents)
  • そのデータからメッセージの本文と、「var body = json.webhook_event.body」
  • 時間を受け取っています。「var time = json.webhook_event.send_time」

 

この箇所では、メッセージの内容によって処理を分けています。

  • メッセージの最初の2文字をslice関数によって取得し、それが「開始」であるなら、「if(body.slice(0,2)=="開始")」
  • シートの最終行の1つ下に時間と、「sh.getRange(lastRow+1, 1).setValue(time)」
  • メッセージの3文字目以降を入力しています。「sh.getRange(lastRow+1, 2).setValue(body.slice(3))」

「終了」が入力された際の処理も同様ですが、lastRowの1つ下ではなく、LastRowを指定しています。これは、「終了」のメッセージが来る場合は、すでに開始のメッセージが入力されており、lastRowの1つ下を指定しなくても良いからです。

「終了」の場合に、1点追加している箇所は、5列目に経過時間を表示するための式を入力している点です。「sh.getRange(lastRow, 5).setFormula("C" + lastRow + "- A" + lastRow)」

 

Webアプリケーションとして導入しよう!

この処理にPOSTリクエストを飛ばすためには、Webアプリケーションとして、このスクリプトを導入する必要があります。

「公開」→「Webアプリケーションとして導入」の順にクリックしてください。以下の画面が表示されるかと思いますので、

  1. プロジェクトバージョン「新規作成」に、
  2. アプリケーションにアクセスできるユーザーを「全員(匿名ユーザーを含む)」にし、
  3. 「更新」をクリックしてください。

 

すると、次の画面が開きますので、「現在のウェブアプリケーションのURL」をコピーしておいてください。後で、チャットワークでWebhookの設定をする際に、アクセスするURLとしてこのURLを指定します。

 

チャットワーク側の設定をしよう!

では、チャットワーク側の設定を行っていきます。まずは、Webhookの設定から行っていきましょう。まずは、どんな内容を設定しなければいけないか、Webhookの設定画面を見てみましょう。右上のアカウント名をクリックし、「API設定」をクリックしてください。

 

すると、以下の画面が現れますので、

  1. 左側の「Webhook」をクリックし、
  2. ページが開いたら、「新規作成」をクリックしてください。

 

すると、以下の画面が表示されます。

このWebhook名、WebhookURL、イベントは、それぞれ以下のように設定してください。

  • Webhook名:好みの名前
  • Webhook URL:GoogleAppsScriptのウェブアプリケーションのURL
  • イベント:
    • ルームイベントを選択
    • メッセージ作成を選択
    • ルームID:お好みのチャットルーム(マイチャットがおすすめ)のID

ルームIDは、基本的にマイチャットのを選択するのがいいでしょう。マイチャットのURLのhttps://www.chatwork.com/#!rid 以降のURLがルームIDです。それを設定し「作成」ボタンをクリックしてください。

これで設定は完了です!

動かしてみよう!

では、実際に動かしてみましょう。

指定したチャットルームで、最初の2文字を「開始」としたメッセージを送信してみましょう。

 

すると、シートには、以下のように開始日時とやる予定のことが記録されます。

 

同様に、最初の2文字を「終了」としたメッセージを送信してみましょう。

 

すると、シートには、以下のように記入されます。

終了時間と実際にやったこと、作業時間が記録されました。

ちゃんと動きましたか?

動かなかった場合は、コードを見直したり、設定が間違っていないか確認してみましょう。

まとめ

今回は、チャットワークを利用した作業ログツールを作成しました。

可能であれば、次回は、作業のカテゴリなども記録できるように機能を追加してみる予定です。