Cats and Dogs

現像ノートSeason 3STIL.BIZ第 4 話 / 全 6 話

現像ノート

五枚目で、固まった ── デバッグが、仕様を変えるまで

仕組みは整いました。でも、名刺を何枚も続けて撮ると、五枚目あたりで画面が固まる。重い処理を逃がし、メモリを削り ── どちらも正しい改善でした。けれど本当の出口は、その先にありました。バグを追っていたら、いつのまにか、アプリの撮り方そのものを作り替えていたのです。

五枚目で、固まった ── デバッグが、仕様を変えるまで

撮るところは VisionKit に任せ、振り分けは AI とルールベースで全機種に届くようにした。仕組みは整いました。でも、いざ名刺を何枚も続けて撮ってみると、おかしなことが起きました。今日は、その一つのバグを追ううちに、アプリの作り方ごと変えることになった話です。

五枚目で、固まる

連続でスキャンしていると、五枚目あたりで、スキャナ画面の右上のチェックボタンが効かなくなる。アプリは落ちません。カメラの映像も動いている。でも、撮り終えたあとの「確定」が、押せない。いったんアプリをバックグラウンドに移して戻すと、また動く。

まず、重い処理を逃がした

最初に疑ったのは、処理の重さでした。名刺を一枚撮るたびに、ボケ具合を測ったり、画像をきれいに補正したりする処理が、画面を動かすのと同じ流れの上で走っていた。これでは、画面の反応を奪ってしまう。

だから、その重い処理を別の流れ(バックグラウンド)に逃がし、補正に使う部品も毎回作り直さず使い回すようにしました。理にかなった改善です。── でも、まだ、固まる。

次に、メモリを削った

次に疑ったのは、メモリでした。補正したあとの画像を、大きいまま抱え込んでいた。名刺一枚で数十メガバイト。続けて撮ると、それが積み上がって、カメラを動かす OS の仕組みが、息切れする。

だから、補正の段階で画像を表示・保存に十分なサイズまで小さく縮め、使い終わった画像はすぐ手放すようにしました。これも正しい。── それでも、五枚目で、固まる。

本当の原因は、別のところに

ここで効いたのは、症状をもう一度よく聞くことでした。「落ちない・スキャナ画面のまま・カメラ映像は動く・戻すと回復する」。これは、メモリが尽きたときの壊れ方とは違う。

原因は、もっと手前にありました。私は、名刺を一枚撮るたびに、スキャナの画面を開いて、閉じて、また開いていたのです。この「開き直し」のコストが、撮るたびに少しずつ積み重なって、画面のタッチの効きだけが、だんだん鈍っていく。固まって見えていたのは、それでした。メモリでも、処理の重さでもなかった。

だから、開き直さない

原因が分かってしまえば、直し方はもう、処理の最適化ではありませんでした。仕様を変えることでした。

スキャナを一枚ごとに開き直すのをやめて、一回のセッションで名刺を続けて撮り、撮り終わってから、まとめて一枚ずつ確認して保存する方式にしました。スキャナを開き直さないから、鈍りが起きない。連続スキャンは、固まらないどころか、むしろスムーズになりました。

同じ名刺を二度撮ってしまっても、確認は一枚ずつ送るので気づけますし、「同じ名前の名刺があります」という重複の知らせも働きます。要らない一枚は、その場でスキップできる。

デバッグが、仕様を変えた

重い処理を逃がし、メモリを削り ── どちらも、それ自体は正しい改善でした。でも、本当の出口は、その先の「撮り方そのものを変える」ことにありました。

バグを追っていたら、いつのまにか、アプリの撮り方を作り替えていた。現場のつまずきは、ときどき、最適化の先にある「いちばんいい設計」まで、こちらを連れて行ってくれます。固まった五枚目が、結果的に、連続スキャンを気持ちよくしてくれました。

次回

次も、現場の話です。読めるはずの名刺が「ピントが甘いようです」と落とされる ── その原因が、ずっと放っておかれた一つの数字だった、という話をします。

STIL.BIZ は App Store で公開しています。

App Store で STIL.BIZ を入手