Sarcasistブログ

Sarcasistのメンバーが技術ネタ、運営ネタ、サービスに関するを記事を投稿するブログ

Googleフォームで勤怠管理!(暫定版)

ご挨拶

こんにちは。 サーカシストの@arumukoと申します。

気づいたら夏になり、気温も30℃を超える日が続きますね...
って思ってたらもう7月も終わりますよ...

夏は気づいたら始まっていて、気づいたら終わっているものです。
気づいたら始まっていて、気づいたら終わっているものってたくさんありますよね。
日々の活動記録もそうじゃないでしょうか?

ってことは関係なく、勤怠管理をGoogleフォームで作ってみました。

経緯

勤怠管理と言っているものの、サーカシストの活動は別に勤怠ではありません。
ですので、活動記録フォームと思ってもらえれば大丈夫です。

何故始めようと思った?

仕事以外の時間でのコミュニティの活動は「別にしなくても問題ない」となりがちです。
ですが感情的には「やったほうがいい!むしろやりたい!」となります。

「やったほうがいい!むしろやりたい!」って気持ちが、実際に行動に移そうと思う頃にはなくなっていることが多々あります。
この気持ちがなくなる前に、自分の自由時間にマッピングできれば、実際に行動に移せると考えました。

f:id:Sarcasist:20180725223027p:plain

サーカシストではどうやっているか?

で今サーカシストでは、週の最初に

  1. 「今週は○○時間」取れるって言うのを宣言して
  2. GitLabで管理してるIssueをざっくりの時間で見積もり
  3. 自分自身をアサインしています。

「今日はだいたい4時間ぐらいできそうだから、これとこれやります〜」

みたいな感じです。

  • 宣言効果
  • 無理のない見積もり

をできると思っています。

そして、実際に自分がどれだけ作業できたかを把握するために、

「活動時間フォーム」を作りました。

Google フォームを使う利点

活動管理フォームを作ってから実感しましたが、「Googleフォーム」はフォームなのです。
アンケートの用途で使われるのをよく見ます。

Google アンケート」ではなく、「Google フォーム」なのです。
フォームとして用意したいものはGoogle フォームを使うとさくっとつくれるなぁと思いました。

実際にやってみよう!

Googleフォームの用意

Googleドライブにアクセスし、Googleフォームを作成します。 f:id:Sarcasist:20180725223919p:plain

画像のような感じで、フォームを編集します。
現在はメンバー数も少ないので、ラジオボタンにしております。
メールアドレスの自動収集ができれば、そちらで大丈夫です。
f:id:Sarcasist:20180725224755p:plain

回答タブに移動し、フォームに紐づくスプレッドシートを作成します。 f:id:Sarcasist:20180725224833p:plain 緑のスプレッドシートマークをクリックすると、↓ f:id:Sarcasist:20180725224846p:plain

右上の「送信」ボタンから、共有方法を選択します。この例ではリンクを取得しています。 f:id:Sarcasist:20180725224903p:plain

これでフォームは完成です。

一度フォームを送信してみる

一度作成したフォームで「開始」を送ってみましょう。
そうすることで、スプレッドシートに一行追加されます。
なぜ、これをするかというと、
Googleフォームから送信され、スプレッドシートに挿入される行は、最後の列まで値を上書きするみたいです。
ですので、一行だけデータをいれておきます。

スプレッドシートの編集

フォームを作ったフォルダと同じ場所に、スプレッドシートが作成されているはずです。
それを編集し、下の画像のようにします。

f:id:Sarcasist:20180725225701p:plain

それぞれの列(セル)に入れる値を説明します。

D列 (日にち)

=A2

ここは表示形式の変更をします。
ここのセルは開始日時をみるためだけなので、表示形式の変更をします。 列全体を選択して、画像のように変更します。

f:id:Sarcasist:20180725235515p:plain

E列 (時間)

=A2

ここは表示形式の変更をします。
ここのセルは開始時間をみるためだけなので、表示形式の変更をします。 列全体を選択して、画像のように変更します。

f:id:Sarcasist:20180725230215p:plain

F列 (実働時間)

F列には、終了時間から開始時間を引いた値が入るようにします。

=if(C2="終了", A2 - MAXIFS(INDIRECT("$A$2:A"&row()),INDIRECT("$B$2:B"&row()),B2,INDIRECT("$C$2:C"&row()),"開始"),"")

「開始/終了」のところに「終了」が入った場合のみ表示し、過去の開始の中で一番値が大きいものを引き算します。

ピポッドテーブルを作る

「データ」タブよりピポッドテーブルを作ります。
ピポッドテーブルを作ることで実働時間の合計を算出できます。

f:id:Sarcasist:20180725233601p:plain

  • 行 : メンバー
  • 値 : 実働時間のsum

にします。

f:id:Sarcasist:20180725233829p:plain

このようなデータが入っていた場合は

f:id:Sarcasist:20180725233915p:plain

となると思います。これで実働時間の集計もできますね。

開始/終了をスラックへ通知

スラック通知は好みで行ってください。

一度フォームへ戻り、右上のメニューからスクリプトエディタを選択します。

コード.gsを以下のように編集します。

詳しくは、私自身が参考にしたQiitaをご確認ください。
わかりやすいです!

qiita.com

function sendToSlack(body, channel) {
  var url = "ここにweb hook urlを書きます。";
  var data = { "channel" : channel, "username" : "活動管理", "text" : body, "icon_emoji" : ":date: " };
  var payload = JSON.stringify(data);
  var options = {
    "method" : "POST",
    "contentType" : "application/json",
    "payload" : payload
  };
  var response = UrlFetchApp.fetch(url, options);
}

function onFormSubmit(e){

  var body = ""; 
  var applicant = "";
  var itemResponse = e.response.getItemResponses();

  for (var j = 0; j < itemResponse.length; j++){    
    var formData = itemResponse[j];
    var title = formData.getItem().getTitle();
    var response = formData.getResponse();

    switch (title) {
      case "メンバー":
        member = response;
        break;
      case "開始/終了":
        shututai = response;
        break;
      default:
        break;
    }
  }
  var bodyPublic =  body + "" + member + "が" + shututai + "しました" ;
  sendToSlack(bodyPublic, "ここに通知先のチャンネルを書きます。");
}

プロジェクトのトリガーまで設定したら。フォームから「開始」をためして見ましょう。 すると、 f:id:Sarcasist:20180725234840p:plain

Slackに通知されました! これでSlack通知の設定は完了です。

まとめ

これで活動管理をすることができるようになりました。 チームでやるのもいいですが個人で使うのでも、
「自分がどれだけやったか」を振り返ることができると思います。

「ほんのひとときでも、自分がどれだけやったか〜 窓に映ってる素顔を褒めろ〜」 「Wow 〜 ...」

以上です。ぜひ試して見てください。