スタジオのエンジニア有志が集まって、 Google Cloud Platform™ を活用した技術勉強会を実施しています。今回は、その中でIoT関連の勉強会メンバーが作成したアプリケーションをご紹介します。

​勤怠打刻システム(dakoku)の開発

会社で導入されている勤怠システムは、社員カードを専用の機器にタッチさせると出社/退社の打刻ができるような仕組みになっています。ただし、お客さま先に常駐して作業をしている社員は、その機器を利用することができません。そのため、勤怠の打刻をするときに、ブラウザを開いて、ログインして…という面倒な作業を行う必要がありました。できれば、お客さま先でも簡単に打刻ができるようにならなか、そういった端末がないか、という声があがり。『なければ作ろう!』ということで開発されました。

開発は以下の5人の有志で行われました。

  • @sizuhiko: プロダクトマネージャー/アーキテクト/メインプログラマー/発案者

  • @kunou: Team Spirit スクレイピングプログラム初期バージョン開発

  • @tastyHama: APIサーバー初期バージョン開発

  • @minakamoto: カード情報CRUDWebサービス開発

  • @sakai-y, @fossamagna: kotlin アドバイザー

​システム構成と機能

dakoku画像 (2).png

利用している GCP™ サービス:

  • Cloud IoT Core: デバイスからのMQTTリクエストを受信。デバイス管理。

  • Cloud Pub/Sub: Cloud IoT Core からのリクエストを Cloud Functions へ転送(Pub)する

  • Cloud Functions: デバイスからのリクエストを受信(Sub)する Node.js プログラムを配備

  • Cloud Tasks: 各プログラム(マイクロサービス)を呼び出す

  • Google AppEngine™: カード情報のCRUDと、打刻API、打刻スクリプトのプログラムを配備

打刻用のデバイスはCloud IoT Coreで管理し、登録されているデバイスからしか接続できないようになっています。認証済みデバイスは、Cloud IoT Coreに対して、カード番号と出社/退社の情報をMQTTで送信する仕組みです。Cloud Functionsのプログラムは、リクエストをWebアプリケーションへ転送します。このような仕組みになっているのは、Clout IoT CoreとCloud Pub/Subのリクエストを受信するのが、Cloud Functionsだと容易にできるからです。Webアプリケーションは自身が管理するカード番号から、ログインするためのID/Passwordを取得し、scriptを呼び出して実際の勤怠システム(Webサイト)を操作することになります。各マイクロサービスの呼び出しはCloud Tasks(AppEngine Queue)を利用しています。これは、AppEngine Queueを利用すると、独自のHTTPヘッダーが付与し、内部からのリクエストかどうかを容易に判定できるために採用しています。
 

打刻ボード

打刻用のデバイス(実物)

このシステムのアピールポイント

まず、社外から勤怠の打刻ができるようになったことで出退勤処理に関するストレスから解放されました。また、各プログラムをマイクロサービス化することで、このシステム以外の利用シーンにもアーキテクチャが流用できると考えています。

例えば、以下のようなユースケース…

  • デバイスからのリクエストを Cloud Functions のレイヤーでルーティングして、別の GAE サービスに転送する。

  • ​Webアプリケーションのユーザ登録情報から、その他のシステムのスクレイピングサービスへリクエストを転送する。

 

​開発時の様子

今回は、Google Cloud Platform の仕組みを上手く利用して、各サービスは外部から直接アクセスできない(認証されたデバイスからしかリクエストできない)ような仕組みを簡単に構築することができました。

​今後もこういった取り組みを継続して、新しい技術の取り込みを進めていきたいと思います。

ASF_logo_line.png
  • Facebook

 お電話でのお問い合わせはこちら

0776-25-8488

平日10:00~17:00まで。セールス目的のお電話はご遠慮ください。 

set-baseE_Y.png

​株式会社永和システムマネジメント

 〒918-8231 福井県福井市問屋町3丁目111番地
 

© 2019 ESM, Inc.