Ruby勉強会を開催しました(2016#09)

8月2度目のRuby勉強会を開催しました。
今回は会場の都合により9月3日の開催予定を1週間繰り上げての開催となりました。

前回開催から間もないため、今回の参加者は6名とやや少なめでしたが、
社内では親睦会幹事の打ち合わせも行われており、休日とは思えない人口密度でした。

今回の参加者でグループウェアの担当者は筆者だけ。 他の参加者は業務で利用しているJavaやAndroidなどを学習している人が多めでした。


話が突然変わりますが、弊社の勤怠管理では現在ExcelとVBAマクロを利用しています。
勤怠管理システムを導入している企業もあると思いますが、中小企業や客先で作業することが多い弊社のようなSIerは Excelを駆使して利用しているケースも多いのではないかと思います。
しかし、最近Excelで管理するこを見直さなければならない状況になってきました。

弊社の様にエンジニアが多く在籍している企業では、Macユーザーの比率も高いと思いますが、 例に漏れず、弊社でもMacユーザーが増えています。そこで問題となってきているのがExcelのマクロの互換性です。

Office mac 2011までは大きな問題は無かったのですがOffice365(バージョンで言うと2016かな)で Excelの更新を行い、その後WindowsのExcelでファイルを開くとマクロが削除されてしまうという問題が生じています。

マイクロソフトのWebサイトで同様の事象が報告されていました。
解決策があることを期待したのですが、2015年の秋頃から認識されている問題にも拘わらず未だに修正されていないようです。


タイムカード機能をグループウェアに追加することにしました

上記の通り、Excelでの管理は限界を迎えつつあります。
また、今後もExcel改善は期待できそうもないと勝手に判断し、勤怠管理機能をグループウェアに追加することにしました。
しかし、勤務条件は企業により様々ですので勤怠管理システムを汎用的に作るのは相当大変です。

先ずは基本となる出社時刻と退社時刻を記録するだけの機能をグループウェアに設けることからスタートします。
本当に単純な時間を記録するだけの、まさに「タイムカード」ですね。

グループウェアへのタイムカード機能の追加にあたり、単独の機能としてではなく稟議(ワークフロー)で運用できるように組み込むことにしました。
将来、勤怠管理(時間外労働や有給休暇の管理など)と、その承認機能と連携することを考慮して追加したいと思います。

タイムカード機能を追加することにしましたが、ここで更に1つ決めなければならないことがあります。
時刻をどのように管理するか、ようは永続化する時のデータベースの方を文字列とするか時間(time)とするかです。
ここが意外と重要なポイント(後々追加する機能に影響しそう)となると考えています。

文字列として永続化する場合、時間の計算をする際などに時刻に変換する処理を組み入れなければなりません。
一方、時刻として永続化すれば計算はし易いのかもしれませんが、24時を過ぎる場合も考慮しなければなりません。
データベースにはPostgreSQLを採用しているのですが、time型は24:00:00までしか入力が許されていないようでした。
25時、26時などと入力することへの対応が難しそうです。

深夜の残業をゼロにすれば問題ありませんが、運用業務などは夜勤となり、日を跨ぐことも考慮しておく必要があります。

ここは時計の時刻をそのまま、例えば25時ではなく01:00と入力し、出社時刻と退社時刻の関係から翌日なのかどうかを判断するなど 何らかの対応が必要になりますね。

データが確実に時刻形式で永続化されることと、時刻の演算でメリットがあるのでないかと期待して今回はtime型で進めることにしました。

機能追加にあったっての技術的な課題などは別途投稿したいと思います。