インフィニットループ 技術ブログ

2015年12月07日 (月)

著者 : saitou

Beacon技術を使って全自動出退勤を実現する

どうも!saitouです。
先月リリースされた「全自動出退勤」対応のシュキーン(以下、とおってシュキーン)ですが、
今回は表題のとおり、どのような仕組みで全自動出退勤を実現したのか、について解説します。
とおってシュキーンでは、オフィスへの入退出の検知にBeaconと呼ばれる技術を使っています。
▼とおってシュキーンのデモ動画。iOS/Android端末を持って「通るだけ」で、自動で出退勤を記録します。

Beaconとは

Beacon技術は、主にBeacon信号を発する機器とその信号を検知する機器によって成り立ちます。
これをとおってシュキーンに置き換えると、オフィスに設置された親機がBeacon信号を発信し、
そのBeacon信号を従業員のスマートフォンにインストールされた子機用アプリが検知する、という関係になります。

退勤時間の確定

とおってシュキーンのおおまかな処理の流れは以下の図の通りです。
とおってシュキーンの処理の流れ
図でも触れられている通り、とおってシュキーンでは日付変更時刻になった時点で記録されている
最も遅い退出時刻を退勤時間として確定します。

退出取り消し

退出取り消し処理は、その名の通り退出後に出勤範囲に戻ってきたときに退出記録を取り消すというものです。
なぜこのような処理をするかというと、
※日付変更時刻を5:00とした場合
9:50 出勤
13:00 昼食のため外出(退出が記録される)
14:00 昼食から戻る
突然のトラブル対応で徹夜コース確定
翌朝5:00日付変更時刻を過ぎる
翌朝8:00帰宅(退出が記録される)

このようなケースの場合、退出取り消しを行わないと日付変更時刻時点での最終退出記録である
13:00が退勤時刻として確定されてしまう
ためです。
退出取り消し処理が入っている場合、上記のケースでは退勤が打刻されないことになりますが、
徹夜勤務があった場合の打刻記入に関しては導入各社で異なった決まりがあるだろうということで、
打刻修正申請にて対応してもらうのが妥当という方針でこのような仕様となっています。

打刻忘れ対策

シュキーンでは打刻忘れを通知する機能をオンすると、
上記のような特殊なケースで打刻されなかった場合や端末の電池切れ、
端末の置き忘れ等で打刻が正常にされなかったと見なされる場合には翌日に打刻忘れではないか
確認するメールが届くようになっており、
万一打刻忘れをしていても記憶が新しいうちに打刻申請をすることが可能となります。

iOSでのビーコン検知方法

とおってシュキーンのiOS版では、iOS標準のiBeaconの仕組みをほぼそのまま使って実装しています。
iBeaconの初期化手順等はクラスメソッドさんの記事が詳しく、入門におすすめです。
[iOS 7] 新たな領域観測サービス iBeacon を使ってみる
また、iOS7.1からはアプリのタスクがキルされた状態からでもビーコンの出入りを検知してバックグラウンドで
起動する事が可能となっており、出勤時や退勤時にわざわざアプリを立ち上げる必要がなくなりました。
[iOS][iBeacon] iOS 7.1 からアプリを起動していなくても領域観測できるようになったので、さまざまなバックグラウンド処理を試してみた
didEnterRegionでビーコンエリアへの侵入を検知し、
didExitRegionで退出を検知するというシンプルな構成になっています。

-(void)locationManager:(CLLocationManager*)manager didEnterRegion:(CLRegion*)region
{
    // ビーコンエリアへの侵入を検知したら呼ばれる
    // 出勤情報などを送信する。
}
-(void)locationManager:(CLLocationManager*)manager didExitRegion:(CLRegion*)region
{
    // ビーコンエリアからの退出を検知したら呼ばれる。
    // 退勤情報などを送信する。
}

Androidでのビーコン検知方法

Android版のとおってシュキーンでは、Android Beacon Libraryというライブラリを使用しており、Android4.3以上のBluetooth Low Energy (BLE)に対応したデバイスで、ビーコンエリアの出入りを検出できます。
Android Beacon Libraryに関しては、こちらの解説記事が大変参考になります。
[Android][iBeacon] Android Beacon Library パラっと解説 その1 [準備]
ビーコンエリアの出入り判定は、基本的には以下のようなシンプルなコードで実装しています。

import org.altbeacon.beacon.startup.BootstrapNotifier;
public class ShukeenApplication extends Application implements BootstrapNotifier {
  @Override
  public void didEnterRegion() {
    // ビーコンエリアへの侵入を検知したら呼ばれる。
    // 出勤情報などを送信する。
  }
  @Override
  public void didExitRegion() {
    // ビーコンエリアからの退出を検知したら呼ばれる。
    // 退勤情報などを送信する。
  }
}

Androidの場合、現状ではビーコンを発信できるデバイスが非常に限られているため、Android版の親機からはビーコンを発信することはできません。そのため、とおってシュキーンの親機となれるのはiOSデバイスのみという制約があります。今後、デバイスの進化によって、Androidでも簡単にビーコンを発信できるようになれば、Android版のとおってシュキーン親機も実現可能になるかもしれません。
android_shukiin
弊社では、ビーコン技術を使って新しいことをしたい!という技術者の方を募集しております。
ぜひ採用情報をご覧ください。
採用情報

勤怠管理システム「シュキーン」について

シュキーンは、出退勤記録が簡単な勤怠管理システムです。3種類の打刻方法が用意されています。
スマートフォンを持って通るだけで打刻する「とおってシュキーン」
NFC対応ICカードをかざして打刻する「かざしてシュキーン」
PC/スマートフォンのブラウザから打刻する「Webでシュキーン」
無料で使える「フリープラン」もご用意しておりますので、ぜひお試しください。
勤怠管理システム「シュキーン」
タイムマネジメント型勤怠管理システム 「シュキーン」

ブログ記事検索

このブログについて

このブログは、札幌市・仙台市の「株式会社インフィニットループ」が運営する技術ブログです。 お仕事で使えるITネタを社員たちが発信します!