本題に入る前に
弊社では一部の部署でフリーアドレス制をとっています。
ところが「誰がどこに座ってるかわからん!」という指摘が多く困っていたので助けてあげることにしました。
そこで無料で簡単に使えるWebプロトタイプの王である「GAS」で座席管理システムを作りました。(勝手に呼んでるだけ)
最初は弊部のみでやっていましたが、噂が流れ別部署に導入したり、最近はフロア一体に導入になりました。
実はそんなに乗り気じゃない
システム作って使われるというのはエンジニアにとって非常に嬉しいことなのですが、そんな楽観的になれない理由があります。
-
保守運用がワンオペ
- 一人で空き時間にえっちらおっちら作っていたので、ここまで規模が大きくなることを想定していませんでした。
- GAS(JS)が分かる人がいない、学びたい人がいないため詰んでます。
※良い子は無計画でシステムを作っちゃダメだぞ☆
-
あくまでプロトタイプ
- セキュリティ周りはガバガバです。(漏れて困る情報はないので問題ないともいえる
- 将来的にはAWSとかクラウド使ってきっちり作りたいので、ここがゴールではないです。
止まるんじゃねぇぞ - コードもある程度のリファクタリングにしています。(完全にリファクタリングする時間がない)
-
UX的にイマイチ(納得してない
- 座席にQRコードを貼って、カメラで読み込み、メールアドレスを入力してもらって着席ボタン・・・長いわ!!!
- O365入れてるのでPowerAppsとかでちゃちゃっとできれば楽ちん♪と考えてます。
- 要らないスマホとか置いて顔認証して完全オートで着席管理するのが夢です。
さて本題
説明した通り、性能試験とかそんなものしてませんし、やったテストは単体テストと遷移テストぐらいです。
全フロア対応をしたところ、やたら座席の表示が遅いことに気付きました。
流石に「うぬぅ」って声が出るくらいのレスポンスだったので優先度高で対応することにしました。
確認したこと
-
for文と呼び出しレスポンス周りにログを仕込む
- for文がネスト構造(多重ループ)になると処理が遅くなるため、コードを要チェックします。
- レスポンス投げるところで呼び出しがおかしかったりする可能性があるので確認します。
→一か所怪しいところがあったので書き直しました。
-
スプレッドシートから取得/書き込み部分の洗い出し
- スプレッドシートが絡むと処理がかなり遅くなります。←今回の原因はこれ
- メソッドで切り出していたりすると気づかない場合があるので確認します。
原因と対策
原因は「for文で毎回スプレッドシートを読み込み」に行ってました。
ヤラカシ~
座席とメンバーの情報の部分だったので、変更がない限り初期のタイミングでしか取得しないように変更しました。
たったこれだけで解消しましたw(皆さん笑ってください。
まとめ
決してGASの処理は速くありませんが、スプレッドシートを模擬DBとして使ってサイトを作ったり、チューニングによっては普通のサイトと謙遜ない速度で処理ができたりするので便利です。
もっと腕を磨かなくては・・・