信頼できないWindows API応答を、正しい入力に変える技術

川西智也

Windows用の日本語入力エンジン「awase」を、たった一人で作った記録。1日で動くプロトタイプはできた。しかし、正しく動くようになるまでには、そこから長い道のりを要した。理由はひとつ、観測した状態と、いま実行してよい状態は同じではなかったからだ。 Windowsは自分のIMEの状態すら正直に教えてくれない。ブラウザは非同期の裏でこっそり順序を入れ替える。競合するIMEが何をしているかは、公式には知る方法がない。LINEは自分自身の合成イベントに怯えて偽の入力を作り出す。固定の待機時間をいくら調整しても、根本的には直らない。 本書は、これら一つひとつの「工夫」を、症状・仮説・実験・発見・設計という形で追った記録である。最終的にたどり着いたのは「観測は状態ではない、鮮度は一度検査して終わりではなく、実行に移す直前に再検証される契約である」という設計原則だった。 終章では、この原則がIME固有の話ではないことを示すため、著者が別に設計しているロボット向けアプリケーションランタイム(Unitree Go2 Runtime)を検証する。そこにも、同じ設計上の空白が見つかった。

目次

  1. はじめに:1日で動いた。しかし、それで終わりではなかった
  2. 第1章:なぜ親指シフトを、自分の手で作ったのか
  3. 第2章:「よかった」が「よがんた」になる
  4. 第3章:最初の一文字が化ける
  5. 第4章:「わからない」を値にする
  6. 第5章:過去から届く観測
  7. 第6章:メーターの針が、在宅を教えてくれる
  8. 第7章:フィルタでは勝てない
  9. 第8章:増殖したFSMを解体する
  10. 第9章:エポック
  11. 第10章:送ったキーは、届いたのか
  12. 第11章:消したのは、疑わしい文字ではなかった
  13. 第12章:5日間で、6回ひっくり返した
  14. 第13章:もう要らないのでは、と誰が言うのか
  15. 第14章:二つの手が、同じ場所を書き換えていた
  16. 第15章:一度も走らなかったテスト
  17. 第16章:それでも壊れる条件
  18. 終章:境界を一つ閉じるたびに
  19. 付録