🚪

はじめに - スマートロック開発日誌 #1

2021/03/26に公開

この記事は、スマートロック開発日誌の第1回の記事です。

なにするの?

個室ジムを運営する株式会社ハコジムで、スマートロックを開発しています。
スマートロックのソフトウェアに加え、ハードウェアも開発します!
ドメイン駆動設計をライトに適用して開発しています。

ここでは実際の開発を例に、わかりやすくまとめた記事を投稿していきたいと思います。

※ ドメイン駆動設計やアクターモデルについて、ある程度理解していることを前提とします
ドメイン駆動設計やアクターモデルについて知らなくても理解できるよう書いていきます!

スマートロックとは

簡単に言うと、マイコン制御のロック(錠)です!
スタンドアローンで動くものや、ネットワークと連携するものもあります。

ロック(錠)とキー(鍵)で様々な種類があります。

  • ロック
    • 既存のロックを置き換えるもの
    • 既存のロックを利用するもの
      • モータでサムターンを回転させる
    • 既存のロックとは別に設置するもの
      • 電磁石と鉄板で吸着する電磁ロック
      • 電磁石とバネでロックボルトを突出させロックする
  • キー
    • PIN (暗証番号)
    • 非接触カード (NFC、交通系ICカードなど)
    • 生体認証 (指紋、虹彩、静脈パターン、音声、顔など)
    • スマートフォンアプリ
      • Bluetoothでローカル接続
      • インターネット経由

なぜ作るのか

ハコジムは基本的に無人のため、入退室管理にスマートロックを利用しています。
現在、既存のスマートロックで運用していますが、以下の点で不満がありました。

  • 後付けでサムターンを回すタイプは、機械的な不良で頻繁に調整や修理が必要
  • ロックを置き換えるタイプは、寸法要件により取り付けられない場合にドアの交換が必要
  • ロックを置き換えるタイプは、完全に故障するとドアを破壊しないと入室できなくなる
  • 情報がロックデバイスに同期されるのが遅い
  • サービスの耐障害性が低く、月に数時間は障害で情報の同期が停止する

ハコジムでは直前に予約して利用することも可能なので、情報の同期が遅いのは致命的です。

要求

  • 直前に予約した場合でも、すぐに部屋に入れるようになること
    • 予約した時間以外は部屋に入れないこと
  • 開き戸、引き戸など様々な扉に対応できること
    • 雑居ビルや民家など、様々な物件に入居する可能性があるため
  • 機械的に故障しにくいこと

どうするか

  • 電磁ロックを使用する
    • 磁力で強力に吸着するという単純な仕組みのため、開き戸や引き戸に対応できる
    • 可動部がないため、機械的に故障しにくい
    • 電力の供給を断つと自動的にロックが解除されるため、停電時や故障時でも安心
    • 工事が必要だが、寸法要件など緩く取り付けやすい
      • 出店時に全面的に工事するため、ドア工事が必要なことはデメリットにならない
  • 情報の変更履歴を再生することにより、軽量で高速な同期を行う
    • ドメインイベントとイベントソーシングが使えそう!

サーバ構成

スマートロックは重要なインフラのため、十分な耐障害性を持たせたいです。
ビジネスロジックの実行には分散アクターモデルを採用し、耐障害性とスケーラビリティの向上、排他制御を簡略化します。

※ Orleans は、 .Net Framework で動作する分散アクターモデルのフレームワークです。
Orleans では、アクターを Grain、その実行環境を Silo と呼んでいます。
https://github.com/dotnet/orleans

おわりに

次回は、ドメイン駆動設計について解説していきます。

Discussion