栽培管理アプリを作ってます⑭:完成したと思ったら問題が出た話

目次

「完成した」と思ったのに…

栽培管理アプリの実装がひと通り終わり、デブロイ前にポチポチと実際の農作業データを入力し始めたのですが、これがまたどうもしっくりこない(何度目なんだろう・・・)

テスト中は簡単な入力で試験したときは問題はないように見えたんですが、ところが、まとめて入力してみると問題が次々と出てきました。

開発中には気づけなかったことが、いざ農家として運用すると実運用で一気に見えてきた形です。

今回はその3つの問題と解決策をまとめます。それぞれ詳細記事へのリンクも貼っています。


問題① ページネーション

開発中は limit(100) で取得件数を絞っていました。データが少ないうちはこれで問題ありません。

ところが将来的に作業を入力し続けると、件数がどんどん増えていきます。limit(100) で取得件数を絞ったままにすると過去の履歴が見えない。制限を外して全件表示にしたとしても、今度はひたすら下にスクロールしないといけない。それはそれで使いにくい。

そこでページネーションを実装することにしました。ただ、単純にDB側で件数ページネーションをするとUIの日付表示が途中で分断される問題があります。このアプリは日付ごとにグループ表示しているため、「1ページ=20日分」という日付単位の方式を選んでいます。

⑭-1 ページネーションを実装した話


問題② 農薬の按分で1畝だけ極端に少ない値になる

複数ハウスに農薬を面積比で按分する機能は以前から実装していましたが、ハウス数・畝数が増えてくると問題が出ました。

例えば500mlを32畝に按分すると、500÷32=15.625ml。整数に丸めると16mlになりますが、16ml×31畝=496mlで4mlの端数が出ます。旧ロジックではこの端数を1件にまとめて調整していたため、その畝だけ極端に少ない値になっていました。

農薬の防除記録として「この畝だけ4mlしか散布していない」という履歴が残るのは好ましくありません。

対策として端数を0.1単位で複数の畝に分散させるロジックに変更しました。

⑭-2 農薬の按分計算で「1畝だけ少ない」が起きた話


問題③ マスタを削除したら履歴も消える

農薬マスタに一括削除機能があります。ところが、過去の作業履歴で使用した農薬のマスタを削除すると、履歴も消えてしまうことに気づきました。

外部キー参照の仕組み上、参照先のマスタが消えると履歴も整合性が取れなくなります。開発中はデータが少ないので気づきにくいですが、本番運用では大事故レベルです。

対策として「履歴があるマスタは削除禁止」という仕様に変更しました。UIでの表示制御に加え、Server Action側でも削除をブロックする二重防御にしています。

⑭-3 マスタを削除したら履歴も消えた話


実際に使ってみて初めて分かること

3つに共通しているのは、テスト中には気づけなかったという点です。

  • データが少ないうちは limit の制限は問題にならない
  • 畝数が少ないうちは按分の端数は目立たない
  • 開発中はマスタを頻繁に作り直すので削除の影響に気づかない

実際に使い始めて、データが積み上がってきたときに初めて見えてくる問題があります。「完成」と「実用」の間にはまだ距離がありました。

引き続き改善を続けていきます。


※そして、一応デブロイしました。→ 栽培管理アプリのデモはこちら

目次