リモートワークで IoT 機器がなくてもスムーズに開発できるように簡素なエミュレータを作った話

この記事は Akerun Advent Calendar 2020 - Qiita の9日目の記事です。

はじめまして、 Web エンジニアの meriy100 です。

私は今年の3月に入社してすぐに10月にリリースされた Akerun ConnectAPI とフロントエンドの開発にアサインされました。

しかし、 コロナの影響ですぐにフルリモートとなり自宅で開発することになったのですが、 開発が進むととある問題に直面しました。

開発用の Akerun が自宅に無いので Akerun Connect から施錠解錠操作をしても結果が返って来ないのです (開発用の Akerun は セキュリティの都合上自宅で環境を整えるのが大変で、 ハードウェアチーム優先になっていました)。

結果が返って来ないと結果の表示を実装するためにいくつか手間な作業が入ってしまい、 開発効率が落ちてしまいます。 開発環境で使える Akerun がすぐに使えない状況では困るということで、 当時の Akerun Connect 開発チームで簡単なエミュレータを作ることにしました。

なにをつくるか

前提として、 Akerun Connect の開発チームは全員Webエンジニアで Akerun のハードウェアの仕様や実装は完全には把握していません。 また、 プロダクト開発の真っ只中なのであまり大きなものを開発する余裕もありませんでした。 なのでまずは壮大な構想は描かずに、 以下のような Akerun Connect の開発に必要な最低限のエミュレータを実装することとしました。

  1. 施錠解錠、 Akerun 状態取得等の Akerun Connect で行える Akerun の操作ができる。
  2. Akerun Connect と Akerun のやり取りの部分のみを模倣し、 Akerun ハードウェア群の処理は考えない。
  3. 最終的な Akerun とのつなぎ込みのテストは 開発用のAkerun がある会社でまとめて行う。

f:id:photosynth-inc:20201207170549p:plain

どうやったか

開発すると言っても、 Akerun Connect の開発もあるのでなるべく影響が出ないように毎日1時間だけエミュレータの開発に時間をさくようにしました。 また、 この手の開発を一人でやっていると気持ちが滅入ってしまいがち (私だけかも?) なので、 その1時間はペアプロで開発します。

具体的には、 1日目をAさんと Bさんでペアプロしたら2日目は BさんとCさん、 3日目は CさんとDさん といった感じに前回の実装者の内一人と新しい人一人のペアで回します。 特に前回やったことの詳細なレポートを書くのも大変なので、 前回やったことは簡単なメモと前回参加した実装者から共有する形とし、 開発以外の余計な作業が発生しないように調整しました。

結果

開発は10日ほどで終了し、 無事自宅の開発環境でも Akerun の施錠解錠操作等の結果が返って来るようになりました。 具体的には Akerun Connect の開発環境のサーバーからローカルで立ち上げた MQTT サーバーを経由し、Ruby で実装されたスクリプトで施錠解錠結果と同じ情報を開発環境サーバーに HTTP でリクエストするというものです。

実装してしまえば大したことはなかったのですが、 それまでは Akerun のエミュレータを作るならハードウェアの仕様、 実装を完全に模倣しないといけないからコストが掛かる、 と思われていました。実は必要なものはローカルの MQTT サーバーと総計600行程度の簡単なスクリプトのみでした。

できたもの以外の部分で良かったこと

持ち回りでペアプロしたことで、 普段のアプリケーション開発では使わないような RubyAPI や MQTT の仕様などをチームで手を動かしながら共有できたのがよかったですね。 あとは、 フルリーモートが続いて人と話す機会が減ったので1時間のペアプロは良い気分転換になりました。 コロナで息苦しい世の中になってしまいましたが、 誰かと一緒になにかやるのはいつでも楽しいですね!

株式会社フォトシンスでは、一緒にプロダクトを成長させる様々なレイヤのエンジニアを募集しています。 hrmos.co

Akerun Proの購入はこちらから akerun.com