🚪
はじめに - スマートロック開発日誌 #1
この記事は、スマートロック開発日誌の第1回の記事です。
なにするの?
個室ジムを運営する株式会社ハコジムで、スマートロックを開発しています。
スマートロックのソフトウェアに加え、ハードウェアも開発します!
ドメイン駆動設計をライトに適用して開発しています。
ここでは実際の開発を例に、わかりやすくまとめた記事を投稿していきたいと思います。
※ ドメイン駆動設計やアクターモデルについて、ある程度理解していることを前提とします
ドメイン駆動設計やアクターモデルについて知らなくても理解できるよう書いていきます!
スマートロックとは
簡単に言うと、マイコン制御のロック(錠)です!
スタンドアローンで動くものや、ネットワークと連携するものもあります。
ロック(錠)とキー(鍵)で様々な種類があります。
- ロック
- 既存のロックを置き換えるもの
- 既存のロックを利用するもの
- モータでサムターンを回転させる
- 既存のロックとは別に設置するもの
- 電磁石と鉄板で吸着する電磁ロック
- 電磁石とバネでロックボルトを突出させロックする
- キー
- PIN (暗証番号)
- 非接触カード (NFC、交通系ICカードなど)
- 生体認証 (指紋、虹彩、静脈パターン、音声、顔など)
- スマートフォンアプリ
- Bluetoothでローカル接続
- インターネット経由
なぜ作るのか
ハコジムは基本的に無人のため、入退室管理にスマートロックを利用しています。
現在、既存のスマートロックで運用していますが、以下の点で不満がありました。
- 後付けでサムターンを回すタイプは、機械的な不良で頻繁に調整や修理が必要
- ロックを置き換えるタイプは、寸法要件により取り付けられない場合にドアの交換が必要
- ロックを置き換えるタイプは、完全に故障するとドアを破壊しないと入室できなくなる
- 情報がロックデバイスに同期されるのが遅い
- サービスの耐障害性が低く、月に数時間は障害で情報の同期が停止する
ハコジムでは直前に予約して利用することも可能なので、情報の同期が遅いのは致命的です。
要求
- 直前に予約した場合でも、すぐに部屋に入れるようになること
- 予約した時間以外は部屋に入れないこと
- 開き戸、引き戸など様々な扉に対応できること
- 雑居ビルや民家など、様々な物件に入居する可能性があるため
- 機械的に故障しにくいこと
どうするか
- 電磁ロックを使用する
- 磁力で強力に吸着するという単純な仕組みのため、開き戸や引き戸に対応できる
- 可動部がないため、機械的に故障しにくい
- 電力の供給を断つと自動的にロックが解除されるため、停電時や故障時でも安心
- 工事が必要だが、寸法要件など緩く取り付けやすい
- 出店時に全面的に工事するため、ドア工事が必要なことはデメリットにならない
- 情報の変更履歴を再生することにより、軽量で高速な同期を行う
- ドメインイベントとイベントソーシングが使えそう!
サーバ構成
スマートロックは重要なインフラのため、十分な耐障害性を持たせたいです。
ビジネスロジックの実行には分散アクターモデルを採用し、耐障害性とスケーラビリティの向上、排他制御を簡略化します。
※ Orleans は、 .Net Framework で動作する分散アクターモデルのフレームワークです。
Orleans では、アクターを Grain、その実行環境を Silo と呼んでいます。
おわりに
次回は、ドメイン駆動設計について解説していきます。
Discussion