GoogleAppsScriptでバイトのシフト表を読み込んで勤怠管理

gas-part-time-job

GoogleAppsScript(GAS)はプログラミング初心者でも簡単にプログラムを作ることができ、Googleのサービスとも簡単に連携することができます。本記事では、スプレッドシートに記入されたバイトのシフト表をGoogleAppsScriptで読み込んで勤怠管理をしたいと思います。

こんにちは、えびじゅんです。

僕は現在、北海道に住んでいますが
東京のWeb系ベンチャー企業で開発のアルバイトをしています。

いわゆるリモートワークってやつです。
エンジニアの特権ですね♪

でも、リモートで働くエンジニアの退勤管理って実は難しいんですよね。。。

というのも、どの程度までシステムを作ったら「完成」なのかわからないですし
見積もり工数と実際の作業時間が全然違ったりすることも多いんです。

僕の会社では
効果があるのかどうかは別として、「勤務開始時と終了時にメールで報告」することになっています。

もう1度言います。
効果があるのかどうかは別として、です!

週1〜2回程度なら良いんですが、毎日メールを出すのもめんどくさいんですよね。。。

エンジニアなら、めんどくさい作業は自動化しちゃいましょう!!

作業を自動化するには、GoogleAppsScriptが比較的簡単でオススメです

というわけでやること

  • スプレッドシートのシフト表から自分の勤怠時間を読み込む
  • 勤務開始時・終了時に送信されるように、メールを予約する

では、行くぞ!!




シフト表を読み込む

GoogleAppsScriptからスプレッドシートを扱う方法は
前回の記事を参照します↓
【コピペでOK】GoogleAppsScriptでGoogleスプレッドシートの値を取り出す

ちなみにシフト表はこんな感じです。

右端の赤枠が僕のシフトでして、ここの時間を取得して、開始時間と終了時間にメールを送信するトリガーを作成します。

前提条件として

  • B列に日にちが入力されている
  • 3行目に名前が入力いるが、何列目か分からない
  • 時間は「hh:mm〜hh:mm」形式で入力されている
  • 月ごとにシートが分割されている

こんな感じです。なので、今回やることとしては

  1. 今月分のシートを取得する
  2. B列から今日の日付を探す
  3. 3行目から自分の名前を探す
  4. 2,3から見つけた行・列を指定し、その日のシフトを取得する
  5. 開始時間と終了時間に分割し、トリガーを作成する。

では、1つずつやっていきましょう!!

今月分のシートを取得する

画像下部にYYYY年MM月形式で各月ごとに名前がつけられています。

GoogleAppsScriptでスプレッドシート全体を取得した後、「今月分」のシートを取り出します

var spreadsheet = SpreadsheetApp.openById('スプレッドシートのID');
var sheetidnex = Utilities.formatDate(new Date(), "JST","yyyy年M月");
var sheet = spreadsheet.getSheetByName(sheetidnex);

上記コードでスプレッドシートを取り出せました。

B列から今日の日付を探す

続いて、スプレッドシートのB列から「今日の日付」を探します

var today = new Date(); //プログラム実行時の日付・時間を取得
today.setHours(0); //時間の情報をリセット
today.setMinutes(0);
today.setSeconds(0);

var rows = sheet.getRange(“B:B”).getValues();
var rowindex = 0;
for each(var row in rows){ //取得した日付と一致する値が見つかるまでループ
  rowindex += 1;
  if(String(today) == String(row)){
    break;
  }
}

これでセルを指定するための行が確定しました。

3行目から自分の名前を探す

続いて、名前を検索して列を確定させます。
今回は、3行目に名前が入力されているので、3行目のデータを全て取得します。

var cols = String(sheet.getRange("3:3").getValues());
cols = (cols.split(",")); //3行目のデータがCSV形式で取得されるので、配列に変換する。
var colindex = 0;
for each(var col in cols){ //配列の各要素から文字を検索する。
  colindex += 1;
  if(String("えび") == String(row)){
    break;
  }
}

これで、行と列が確定し、セルを指定する準備が出来ました。




2,3から見つけた行・列を指定し、その日のシフトを取得する

上記の手順で取得した行と列を指定し、セルの値(勤務時間)を取得します。
中身はhh:mm~hh:mm形式ですので、文字数を指定して開始時間と終了時間を取り出し、トリガーを作成する流れです。

var value = sheet.getRange(rowindex,colindex).getValue();
Logger.log("value" + value);
if(value){
  var start = value.substr(0,2); //開始時間を取得
  var fin = value.substr(6,2); //終了時間を取得
  setTrigger(start,fin); //トリガーを作成
  }
}

setTrigger関数は、名前の通りトリガーを作成するためのもので
開始時間と終了時間を渡すと、それぞれに対応した関数を実行するトリガーを作成するものです。
詳しくは後述します。

開始時間と終了時間に分割し、トリガーを作成する。

ここまでで、セルの中身からバイトの勤務時間を取得することができました。
最後に、勤務時間になったら自動でメールを送信するトリガーを作成しておしまいです。

先ほど使ったsetTrigger関数の中身はこちら
古いトリガーを全て削除し、引数の開始時間と終了時間にそれぞれトリガーを作成しています。
セットしている関数は、メールを作成するもので、詳しくは後述します。

function setTrigger(start,fin){
  delTrigger();
  var setTime = new Date();
  setTime.setHours(start);
  setTime.setMinutes(00);
  var date = new Date();
  ScriptApp.newTrigger('start_mail').timeBased().at(setTime).create();
  setTime.setHours(fin);
  setTime.setMinutes(00);
  ScriptApp.newTrigger('fin_mail').timeBased().at(setTime).create();
}

それぞれのトリガーでセットされている’start_mail’と’fin_mail’は、Gmailでメールを送るための関数です。

function start_mail() {
var to = ['address1@test.com', 'address2@test.com']; //送信先(複数可)
var start_title = "作業開始"; //メールタイトル
var start_body = "お疲れ様です。えびです。本日の作業開始します。"; //メール本文
MailApp.sendEmail(to, start_title, start_body); //メール送信
}

もっと本格的にプログラミングを学びたい方へ

本記事では、GoogleAppsScriptを使ってバイトの勤怠管理をするということを紹介しました。

GoogleAppsScriptは比較的簡単な言語で
初心者でもすぐにプログラムを作ることができますが、出来ることがあまり多くはないです。

  • プログラミングに興味があるが何から学んでいいかわからない方
  • Webアプリケーション開発をやってみたい方
  • 以前プログラミングに挫折した方
  • 手軽な価格でメンターをつけたい初心者の方
  • エンジニアを目指す第一歩を踏み出したい方

はぜひこちら↓の記事を読んでみてください

プログラミングの独学、大変じゃないですか?

プログラミングを独学しているそこのあなた

  • 思い通りにプログラムが動かなくてイライラする
  • エラーをググってもなかなか解決策が見つからない
  • そもそも何から手をつけて良いかわからない

こんな悩みを抱えていませんか?

そんなあなたにおすすめなのが、メンターを雇えるサービス MENTA です

メンターとのマッチングがめちゃくちゃ簡単

MENTAを利用すれば、自分のやりたいことを丁寧に教えてくれるメンターと簡単に出会うことができます!

自分が覚えたいスキルセットを持ったメンターを探す

もしくは

自分が覚えたいスキルと予算を提示して、メンターからの連絡を待つ

たったこれだけです!

プログラミングスクールより格安の料金設定

料金はメンター次第ですが、月々1000〜5000円程度(中には0円でサポートしてくれるメンターも!!)

ebi
えび

プログラミングスクールの月額は平均3万円とされている中で、5000円程度でメンターを雇えるのはかなり格安です!!

ぜひMENTAを活用してスキルアップを目指しましょう!!

 

1 個のコメント

  • コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください