Cats and Dogs

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

現像ノート

「ok」は、開いたの証明にならない ── 開かない PDF を追う

iPhone から Mac のファイルを開く。実行すると、ログには「ok」。でも、Mac の画面では、何も起きていない。犯人探しは、思わぬところに行き着きました ── 十四日間つけっぱなしだった、一枚のアプリ。そして本当の反省は、犯人ではなく、「ok」の側にありました。

「ok」は、開いたの証明にならない ── 開かない PDF を追う

前回は信頼の土台の話でした。今日は、開発の現場の話です。この連載で何度か書いてきた「うまくいったように見えるもの」の話でもあります。

開かない PDF

STIL.HUB には、Mac のフォルダを iPhone から辿って、ファイルを Mac 側で開く機能があります(ブラウズと呼んでいます)。手元でファイル名を押すと、Mac の画面でそれが開く。

実機で試していたとき、PDF が開きませんでした。何度押しても、Mac の画面は無反応。ところが、相棒(Companion)のログを見ると、記録は全部こうなっています。

「開く要求を実行 → ok」

ok。でも、開いていない。ログと画面が、まっすぐ食い違っていました。

「ok」の正体

まず疑ったのは、自分のコードの ok でした。調べると、嫌なものが出てきました。ファイルを開く処理は、OS に「これを開いてください」と依頼して、依頼の結果を見ずに ok と記録していたのです。返事を確認しない伝言係が、「伝えました」とだけ報告していた。ok は「開いた」ではなく、「言った」の意味でしかありませんでした。

では、依頼はどこへ消えたのか。

十四日間の、居眠り

Mac の中を見ていくと、犯人がいました。PDF を開く役の標準アプリが、十四日間、起動しっぱなしになっていて、応答できない状態で固まっていたのです。ウィンドウの一覧を調べると、そのアプリが持っていたのは、高さ 39 ピクセルの、潰れたウィンドウの残骸が四枚だけ。OS は「開いてほしい」という依頼を受理して、この居眠り中のアプリに渡し、依頼はそこで闇に消えていました。

アプリを再起動すると、PDF は、何事もなかったように開きました。十四日ぶりに起こされた居眠りが、直接の犯人でした。

でも、反省は「ok」の側に

犯人は見つかりました。でも、直すべきは Mac の再起動ではありません。居眠りは、また起きるからです。私が直せるのは、こちら側 ── ok の作りのほうでした。

ファイルを開く処理を、結果が返ってくる形の API に切り替えました。開けたら開けた、失敗したら失敗と、理由つきで返ってくる。そして、その失敗を、Mac の中のログに沈めず、iPhone の画面まで運んで表示するようにしました。押した人が見ているのは手元の画面なので、知らせはそこに届かないと意味がありません。

沈黙の成功は、検証にならない

いちばんの反省は、この機能を作ったとき、「開くことを確認した」と記録していたことです。あの確認で見ていたのは、無条件の ok でした。つまり、何も検証していなかった。うまくいったように見えるものと、うまくいったことが証明されているものは、別物です。

レシートのときに、実機で出たバグをテストにすると書きました。今回の学びは、その手前にあります。結果を返してくれる API を選べるときは、必ず選ぶ。 返事を見ない伝言係を、仕組みの中に置かない。「ok」は、開いたの証明にならないのです。

次回

こんどは、OS に頼もうとして、頼み方ごと変えた話です。Mac の音声入力を手元から起こそうとして失敗し、最後は「iPhone で話して、Mac で打つ」に辿り着きました。

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

App Store で STIL.HUB を入手