*

GAS × Chatwork × Spreadsheetの勤怠管理システムを公開してみた

   

どうも、デジタルクエストのヒヨコエンジニアのyokoです。
今回は、Google Apps Script(以下、GAS)、Chatwork、Spreadsheetを連携させて作った勤怠システムを公開する事に相成りました。

ちなみに勤怠システムには「パルプンテ」と命名。
デジタルクエストは略してDQだからド◯クエの魔法名をね( ̄ー+ ̄)笑
ちなみにちなみにパルプンテは何が起きるか分からない魔法との事。
この勤怠システムもただ挨拶して記録して集計するだけじゃなくて、利用者にびっくりするような何かを提供出来るようになればいいなと。
今のところびっくりするようなバグを提供しまくっているのは内緒(爆

ソース公開場所
https://github.com/dq-nozomi-yokomura/Parupunte

動作環境
ぶらうざがひらけばどこでも
※設定はPC推奨

やれること、できること

◯利用者目線でのパルプンテ
・出社・退社時間の日々の記録が出来る
・有給の申請が出来る
・各内容の修正が出来る

そのままですね。
「おはよー」とか「お疲れー」とかでその日の勤怠を記録出来ます。
お疲れ様

あとは打刻が漏れていた際に、後日修正で入力出来たりします。
有給も事前・当日の登録や、事後に修正可能だったりします。
◯管理者目線でのパルプンテ

・集計が出来る
今回は尺の関係で触れませんが、勤怠記録を使って残り有給数を出したり、月の労働時間の集計を行ったりしてます。

・入力のログ取得が出来る
このシステムでは登録内容の修正が可能であるため、誰がいつどんな事を入力したのかを記録していて後から見直す事が可能になっています。
そこのあなた、不正してもばれますよ(*ω*)フッフッフッ

使い方

Chatworkの準備

https://www.chatwork.com/

①管理者用アカウントでAPIトークンを発行する
管理者用アカウントでChatworkにログイン後、画面右上のメニューから「動作設定」を選択します。
選択後に開いたウィンドウ内のメニューに「API発行」項目があるので、そこから発行してください。
※API発行はChatworkの管理者権限がないと表示されません

②勤怠管理用チャットルームを作成する
Chatwork画面左上にあるプラスマーク(+)のアイコンをクリック、「グループチャットを新規作成」を選択します。
管理対象者を招待してチャットルームを作成します。

③チャットワークIDをメモる
チャットワークIDはアカウント固有のIDです。
管理者と、管理対象者のIDを全員分メモしてください。
IDは今のところいけてる見つけ方が分からず、とりあえずToで選択時に作成されるタグから抜いてます。
自分自身(この場合は管理者)のIDが一番厄介で、他アカウントで上記の方法をとるか、他アカウントから自身へToで送られてきたチャットを引用してタグを確認するかで確認します。

④チャットルームIDをメモる
チャットルームIDは、URLの「https://www.chatwork.com/#!rid◯◯◯」の◯◯◯の部分になります。
メモするルームIDは2種類あります。
まずは②で作ったチャットルームのIDをメモしてください。
続いて管理者アカウントと、管理対象者との個別チャットのルームIDをメモしてください。

※登録に対する返信を、個別チャットではなく勤怠管理用チャットで行う場合には勤怠管理用チャットのルームIDだけでOKです

Spreadsheetの準備

https://docs.google.com/spreadsheets/

⑤パルプンテ.xlsxとログ.xlsxをスプレッドシートとして読み込む
スプレッドシートのメニュー画面右上にある、「ファイル選択ツールを開く」をクリック。
githubからローカルにダウンロードした「出退勤.xlsx」と「パルプンテ_ログ.xlsx」をアップロードします。

⑥勤怠管理用ブックのURLをメモる
スプレッドシートとしてアプロードが完了したら、対象のファイルを開きます。
開いたらURLをメモしてください。
「https://docs.google.com/spreadsheets/☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓」みたいなURLなので、そのままメモしてください。

⑦管理対象者一覧を更新する
「出退勤」の方の「打刻対象者マスタ」シートを開き、必要項目を埋めていきます。
左から、チャットワークID・個別ルームID・名前になります。
③と④でメモしたやつを使用してください。
管理対象者全員分を記入してください。

注意すべき点は、EmbossingMstという範囲名に全員が収まらないといけないので、デフォルトの50名以上になる場合は
「データ」 > 「名前付き範囲」で範囲の値を調整してください。

⑧管理対象者の個別管理シートを作成する
勤怠管理は個人毎のシートに記録されるため、それ用のシートを作成する必要があります。
作成といっても簡単で、「template」シートを「シートのコピー」し、出来たシートの名前を管理対象者のチャットワークIDに変更するだけです。

GASの準備

https://script.google.com

ブラウザでGoogleにログイン
Googleのメニューから『Google Apps Script』(スクリプトエディタ)を開く

⑨ソースをコピペで配置していく
今のところいけてるデプロイ手法を見つけられておらず、ここは地道に全ファイルをコピペで…
よくミスって本番の方でエラー出してるのでここらへんどうにかしないとなぁ( ̄¬ ̄)
CLIでローカルのソースをあげたりgit管理出来るぜーって記事を見かけたので、導入せねば…><

あ、独り言さーせん
とりあえず全部コピペ成功すればモーマンタイですはい

⑩設定ファイルを編集する
setting.conf.gsに、もろもろの必要な情報を設定していきます。

WORKBOOK_URL … ⑥でメモしたパルプンテ(勤怠記録用)のブックのURLを設定します。
ROOM_ID_ALL … ④でメモした勤怠管理用チャットルームのIDを設定します。
ACCOUNT_TOKEN … ①で発行したAPIトークンを設定します。
ACCOUNT_ID … ③でメモした管理者のチャットワークIDを設定します。
LOGBOOK_URL … ⑥でメモしたログのブックのURLを設定します。

⑪トリガーを設定する
最後にトリガーの設定です。
cron的なやつです。
スクリプトエディタで、「リソース」 > 「現在のプロジェクトのトリガー」を選択。

管理部屋の投稿を取得してログに書き込む「checkInput」と、ログを読み込んで勤怠記録への書き込みと利用者への返信を行う「checkReply」の2つを設定します。
人数とラッシュ時の利用頻度次第ですが、どちらも無難に5分周期でよいのではと思います。
(たぶんうちの50人くらいの規模ならどちらも1分でいけそうな気はしてる)
トリガー設定

よし、準備完了!
…と見せかけて、実は罠が1個潜んでます。

スクリプトが初めてアクセスするサービス(Spreadsheetの場合はブック単位で初回アクセス時)がある場合はダイアログが表示され、アクセスを許可してあげないといけません。
これを忘れると待てど暮らせど設定しているはずのスクリプトが実行されません。
そのため初回はトリガーではなく手動で実行し、アクセスを許可する、という1工程が必要になります。
※Googleカレンダーと連携させたりGmailと連携させたときに、いずれもこれで本番がとまってしまいました…学習しろ自分…orz
これでようやく完了です!
お疲れ様でした\(^o^)/

 

その他の機能

さてさて、こんな感じで利用可能なパルプンテですが、公開している事以外にも社内向けにはいろいろ機能があったりします。

Googleカレンダー登録機能

うちの会社は勤怠連絡をGoogleカレンダーの共通カレンダーに対して
【yoko】全休
みたいな感じで登録するのですが、パルプンテに午前休とか午後休を登録すると自動で登録します。スクリーンショット 2016-07-19 22.56.54

打刻漏れ通知機能

まぁ漏れちゃいますよね、にんげんだもの。
そんなときは翌日に管理者アカウントから通知がきます。
打刻漏れ通知

「ドジっ子な」とかつけてるのは受信者のヘイトを上げて二度と打刻を忘れないぞと思わせる策謀です。

私も一回受信しましたが効果抜群でした。
あ、どうでもいいですね。

 

みたいなみたいな感じでございます。
パルプンテ(何が起こるか分からない魔法)の名前に負けないように、今後もいろんなサービスと連携したりして機能を追加していこうと思ってます。

ちょっと分かりにくいコードかもしれませんが(汗
拡張の可能性は無限大だと思ってますので、興味持たれた方はどうぞいじくってみてくださいm(_ _)m

 

 

PS

こちらのサイトを参考にさせていただきました

チャットで勤怠管理する「みやもとさん」をリリースしました
http://blog.masuidrive.jp/2014/10/19/miyamoto-san/

  • このエントリーをはてなブックマークに追加


  関連記事

digitalquest_icon
SPAJAM2016 東京D予選に出てみた話 – 事前準備編 –

SPAJAM2016 東京D予選に行ってきました。 SPAJAM2016と言うの …

amazon_icon
手軽にインフラ環境構築の自動化を実現する(したい) 其ノ参 CloudFormationでCodeDeploy設定を自動構築してみる。

前々回(手軽にインフラ環境構築の自動化を実現する(したい) 其ノ壱)の続きです。 …

gaikan3
DQ ハッカソンで合宿に行ってきました

開発部の社員と有志の企画・デザイナーの総勢13名で、ハッカソンを行いました。 伊 …

1
Storyboardを使ってContainerView+PageViewのサンプルを作ってみた

概要 横スクロールするメニュー+メニューに連動してメインビューが切り替わる、 S …

digitalquest_icon
Hello World

株式会社デジタルクエストの開発ブログです。 弊社ではWebサービス、iOS/An …

AWS_CloudFormation-200x200
手軽にインフラ環境構築の自動化を実現する(したい) 其ノ弐 CloudFormationでAurora環境を構築してみる。

前回(手軽にインフラ環境構築の自動化を実現する(したい) 其ノ壱)の続きです。 …

AWS_CloudFormation-200x200
手軽にインフラ環境構築の自動化を実現する(したい) 其ノ壱 CloudFormationの使い方をマスターする

DQには実はインフラ専任のエンジニアは居ません。 案件担当のエンジニアがインフラ …

digitalquest_icon
NAT Gatewayを使って、ELB+AutoScalling下のVPC-EC2のアウトバウンドIPを固定化してみた。

弊社サービスの3bkは外部サービス連携を幾つかしています。 そのうちの一つがアク …

girl-1076998_1920
結局わたしでしょ?♡

Hi!ミシェルさんです 😀   サービスの企画とかUXについての意見て …

スクリーンショット 2016-06-14 17.01.23
SPAJAM2016 東京D予選に出てみた話 – 決戦編 –

前回の続き SPAJAM2016 東京D予選に行ってきました -決戦編-。 SP …